feat(cli): add -j/--jobs NUM options

To 'doom sync', 'doom upgrade', and 'doom build'. So users can decide
whether they want Doom 100%'ing their CPUs.

After 3.0, many of these commands will be merged, so a little code
duplication is fine for now.
This commit is contained in:
Henrik Lissner 2022-06-19 01:29:40 +02:00
parent 89e02c1c2b
commit 498d88ba9b
No known key found for this signature in database
GPG key ID: B60957CA074D39A3
3 changed files with 19 additions and 5 deletions

View file

@ -17,12 +17,15 @@
;; DEPRECATED Replace with "doom sync --rebuild" ;; DEPRECATED Replace with "doom sync --rebuild"
(defcli! ((build b)) (defcli! ((build b))
((rebuild-p ("-r") "Only rebuild packages that need rebuilding")) ((rebuild-p ("-r") "Only rebuild packages that need rebuilding")
(jobs ("-j" "--jobs" num) "How many CPUs to use for native compilation"))
"Byte-compiles & symlinks installed packages. "Byte-compiles & symlinks installed packages.
This ensures that all needed files are symlinked from their package repo and This ensures that all needed files are symlinked from their package repo and
their elisp files are byte-compiled. This is especially necessary if you upgrade their elisp files are byte-compiled. This is especially necessary if you upgrade
Emacs (as byte-code is generally not forward-compatible)." Emacs (as byte-code is generally not forward-compatible)."
(when jobs
(setq native-comp-async-jobs-number (truncate jobs)))
(when (doom-packages-build (not rebuild-p)) (when (doom-packages-build (not rebuild-p))
(doom-autoloads-reload)) (doom-autoloads-reload))
t) t)

View file

@ -24,7 +24,8 @@
((noenvvar? ("-e") "Don't regenerate the envvar file") ((noenvvar? ("-e") "Don't regenerate the envvar file")
(noelc? ("-c") "Don't recompile config") (noelc? ("-c") "Don't recompile config")
(update? ("-u") "Update installed packages after syncing") (update? ("-u") "Update installed packages after syncing")
(purge? ("-p") "Purge orphaned package repos & regraft them")) (purge? ("-p") "Purge orphaned package repos & regraft them")
(jobs ("-j" "--jobs" num) "How many CPUs to use for native compilation"))
"Synchronize your config with Doom Emacs. "Synchronize your config with Doom Emacs.
This is the equivalent of running autoremove, install, autoloads, then This is the equivalent of running autoremove, install, autoloads, then
@ -37,10 +38,17 @@ recompile. Run this whenever you:
It will ensure that unneeded packages are removed, all needed packages are It will ensure that unneeded packages are removed, all needed packages are
installed, autoloads files are up-to-date and no byte-compiled files have gone installed, autoloads files are up-to-date and no byte-compiled files have gone
stale." stale.
OPTIONS:
-j, --jobs
Defaults to the maximum number of threads (or 1, if your CPU's threadcount
can't be determined)."
:benchmark t :benchmark t
(run-hooks 'doom-before-sync-hook) (run-hooks 'doom-before-sync-hook)
(add-hook 'kill-emacs-hook #'doom-sync--abort-warning-h) (add-hook 'kill-emacs-hook #'doom-sync--abort-warning-h)
(when jobs
(setq native-comp-async-jobs-number (truncate jobs)))
(print! (start "Synchronizing your config with Doom Emacs...")) (print! (start "Synchronizing your config with Doom Emacs..."))
(unwind-protect (unwind-protect
(print-group! (print-group!

View file

@ -20,6 +20,7 @@
(defcli! ((upgrade up)) (defcli! ((upgrade up))
((packages? ("-p" "--packages") "Only upgrade packages, not Doom") ((packages? ("-p" "--packages") "Only upgrade packages, not Doom")
(jobs ("-j" "--jobs" num) "How many CPUs to use for native compilation")
&context context) &context context)
"Updates Doom and packages. "Updates Doom and packages.
@ -31,7 +32,7 @@ following shell commands:
doom clean doom clean
doom sync -u" doom sync -u"
(let* ((force? (doom-cli-context-suppress-prompts-p context)) (let* ((force? (doom-cli-context-suppress-prompts-p context))
(sync-cmd '("sync" "-u"))) (sync-cmd (append '("sync" "-u") (if jobs `("-j" ,num)))))
(cond (cond
(packages? (packages?
(call! sync-cmd) (call! sync-cmd)
@ -41,7 +42,9 @@ following shell commands:
;; Reload Doom's CLI & libraries, in case there were any upstream changes. ;; Reload Doom's CLI & libraries, in case there were any upstream changes.
;; Major changes will still break, however ;; Major changes will still break, however
(print! (item "Reloading Doom Emacs")) (print! (item "Reloading Doom Emacs"))
(exit! "doom" "upgrade" "-p" (if force? "--force"))) (exit! "doom" "upgrade" "-p"
(if force? "--force")
(if jobs (format "--jobs=%d" jobs))))
((print! "Doom is up-to-date!") ((print! "Doom is up-to-date!")
(call! sync-cmd))))) (call! sync-cmd)))))