|
| 1 | +;;; init/eldev.el --- Initialize Eask from Eldev -*- lexical-binding: t; -*- |
| 2 | + |
| 3 | +;;; Commentary: |
| 4 | +;; |
| 5 | +;; Commmand use to convert Eldev-file to Eask-file |
| 6 | +;; |
| 7 | +;; $ eask init --from eldev |
| 8 | +;; |
| 9 | + |
| 10 | +;;; Code: |
| 11 | + |
| 12 | +(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args))))) |
| 13 | + (load (expand-file-name "_prepare.el" |
| 14 | + (locate-dominating-file dir "_prepare.el")) |
| 15 | + nil t)) |
| 16 | + |
| 17 | +(defun eask--eldev-map-elpa (name) |
| 18 | + "Convert Eldev mapping to Eask mapping." |
| 19 | + (pcase name |
| 20 | + ("melpa-unstable" 'melpa) |
| 21 | + (_ name))) |
| 22 | + |
| 23 | +(defun eask--convert-eldev (filename) |
| 24 | + "Convert Eldev FILENAME to Eask." |
| 25 | + (let* ((filename (expand-file-name filename)) |
| 26 | + (file (file-name-nondirectory (eask-root-del filename))) |
| 27 | + (new-file (eask-s-replace "Eldev" "Eask" file)) |
| 28 | + (new-filename (expand-file-name new-file)) |
| 29 | + (converted)) |
| 30 | + (eask-with-progress |
| 31 | + (format "Converting file `%s` to `%s`... " file new-file) |
| 32 | + (eask-with-verbosity 'debug |
| 33 | + (cond ((not (string-prefix-p "Eldev" file)) |
| 34 | + (eask-debug "✗ Invalid Eldev filename, the file should start with `Eldev`")) |
| 35 | + (t |
| 36 | + (with-current-buffer (find-file new-filename) |
| 37 | + (erase-buffer) |
| 38 | + (goto-char (point-min)) |
| 39 | + |
| 40 | + (let* ((project-name (file-name-nondirectory (directory-file-name default-directory))) |
| 41 | + (package-name (eask-read-string (format "\npackage name: (%s) " project-name) nil nil project-name)) |
| 42 | + (version (eask-read-string "version: (1.0.0) " nil nil "1.0.0")) |
| 43 | + (description (eask-read-string "description: ")) |
| 44 | + (guess-entry-point (eask-guess-entry-point project-name)) |
| 45 | + (entry-point (eask-read-string (format "entry point: (%s) " guess-entry-point) |
| 46 | + nil nil guess-entry-point)) |
| 47 | + (emacs-version (eask-read-string "emacs version: (26.1) " nil nil "26.1")) |
| 48 | + (website (eask-read-string "website: ")) |
| 49 | + (keywords (eask-read-string "keywords: ")) |
| 50 | + (keywords (split-string keywords "[, ]")) |
| 51 | + (keywords (string-join keywords "\" \"")) |
| 52 | + (content (format |
| 53 | + "(package \"%s\" |
| 54 | + \"%s\" |
| 55 | + \"%s\") |
| 56 | +
|
| 57 | +(website-url \"%s\") |
| 58 | +(keywords \"%s\") |
| 59 | +
|
| 60 | +(package-file \"%s\") |
| 61 | +
|
| 62 | +(script \"test\" \"echo \\\"Error: no test specified\\\" && exit 1\") |
| 63 | +" |
| 64 | + package-name version description website keywords |
| 65 | + entry-point))) |
| 66 | + (insert content) |
| 67 | + |
| 68 | + (when-let* ((names (mapcar #'car package-archives)) |
| 69 | + (sources (mapcar #'eask--eldev-map-elpa names))) |
| 70 | + (insert "\n") |
| 71 | + (dolist (source sources) |
| 72 | + (insert "(source '" (eask-2str source) ")\n")))) |
| 73 | + (save-buffer)) |
| 74 | + (setq converted t)))) |
| 75 | + (if converted "done ✓" "skipped ✗")) |
| 76 | + converted)) |
| 77 | + |
| 78 | +(eask-start |
| 79 | + ;; Preparation |
| 80 | + (eask-with-archives "melpa" |
| 81 | + (eask-package-install 'eldev)) |
| 82 | + |
| 83 | + ;; Start Converting |
| 84 | + (require 'eldev) |
| 85 | + (let* ((patterns (eask-args)) |
| 86 | + (files (if patterns |
| 87 | + (eask-expand-file-specs patterns) |
| 88 | + (directory-files default-directory t "Eldev"))) |
| 89 | + (files (cl-remove-if-not (lambda (file) |
| 90 | + (string= "Eldev" (file-name-nondirectory file))) |
| 91 | + files)) |
| 92 | + (converted 0)) |
| 93 | + (cond |
| 94 | + ;; Files found, do the action! |
| 95 | + (files |
| 96 | + (eldev--set-up) ; XXX: Load once! |
| 97 | + (dolist (file files) |
| 98 | + (when (eask--convert-eldev file) |
| 99 | + (cl-incf converted))) |
| 100 | + (eask-msg "") |
| 101 | + (eask-info "(Total of %s Eldev-file%s converted)" converted |
| 102 | + (eask--sinr converted "" "s"))) |
| 103 | + ;; Pattern defined, but no file found! |
| 104 | + (patterns |
| 105 | + (eask-info "(No files match wildcard: %s)" |
| 106 | + (mapconcat #'identity patterns " "))) |
| 107 | + ;; Default, print help! |
| 108 | + (t |
| 109 | + (eask-info "(No Eldev-files have been converted to Eask)") |
| 110 | + (eask-help "init/eldev"))))) |
| 111 | + |
| 112 | +;;; init/eldev.el ends here |
0 commit comments