Skip to content

Commit 6c23af4

Browse files
authored
feat(core): Lazy install on required packages (emacs-eask#284)
* feat(core): Lazy install on required packages * fix: Emacs 26.x * docs: Update dev api * Fix typo
1 parent 40c2d87 commit 6c23af4

26 files changed

+93
-57
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
1212
* fix(lint): match behavior of declare linter to checkdoc (#272)
1313
* fix(test): ERT test fails on Emacs 30+ (cc1f4e15b7b40b986ad1a93f6e40d121340598de)
1414
* fix(test): eask options should not be passed to buttercup (#281)
15+
* feat(core): Lazy install on required packages (#284)
1516

1617
## 0.10.x
1718
> Released Jun 13, 2024

docs/content/Development-API/_index.en.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ Initialize packages for use.
249249

250250
Scope that temporary makes archives available.
251251

252-
`ARCHIVES` can either be a string or a list of strings.
252+
The argument `ARCHIVES` can either be a string or a list of strings.
253253

254254
```elisp
255255
(eask-with-archives "melpa"
@@ -260,6 +260,21 @@ Scope that temporary makes archives available.
260260
💡 This is handy when you need certain packages from certain archives.
261261
{{< /hint >}}
262262

263+
## 🔍 Function: eask-archive-install-packages (`archives` `names`)
264+
265+
Install packages with archives setup.
266+
267+
The arugment `names` can be a symbol or list of symbols.
268+
269+
```elisp
270+
(eask-archive-install-packages '("gnu" "melpa")
271+
'el2org) ; accept list
272+
```
273+
274+
{{< hint info >}}
275+
💡 This only installs packages if they are missing.
276+
{{< /hint >}}
277+
263278
## 🔍 Function: eask-package-desc (`name` &optional `current`)
264279

265280
Build package descriptor for a package.
@@ -975,7 +990,7 @@ Return size of the current package.
975990
Create execution with the responsive message output.
976991

977992
```elisp
978-
(eask-with-progress
993+
(eask-with-progress
979994
"Downloading files... "
980995
(eask-with-verbosity 'debug ; Often used with `eask-with-verbosity'
981996
;; Execute some operations..

docs/content/Development-API/_index.zh-tw.md

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ $ eask init
179179
💡 我們不經常呼叫它,因為我們不希望直接執行另一個命令!
180180
{{< /hint >}}
181181

182-
## 🔍 Function: eask-import (`url`)
182+
## 🔍 函式: eask-import (`url`)
183183

184184
從 url 載入並評估腳本。
185185

@@ -246,15 +246,30 @@ $ eask init
246246

247247
臨時使存檔可用的範圍。
248248

249-
`ARCHIVES` 可以是字符串或字符串列表
249+
參數 `archives` 可以是字串或字串列表
250250

251251
```elisp
252252
(eask-with-archives "melpa"
253253
(eask-package-install 'dash)) ; 安裝僅在 MELPA 中定義的包
254254
```
255255

256256
{{< hint info >}}
257-
💡 當您需要某些檔案中的某些包時,這很方便。
257+
💡 當您需要某些存檔中的特定套件時,這非常方便。
258+
{{< /hint >}}
259+
260+
## 🔍 函式: eask-archive-install-packages (`archives` `names`)
261+
262+
使用 archives 設定安裝套件。
263+
264+
參數 `names` 可以是符號或符號列表。
265+
266+
```elisp
267+
(eask-archive-install-packages '("gnu" "melpa")
268+
'el2org) ; 接受列表
269+
```
270+
271+
{{< hint info >}}
272+
💡 這只會在套件遺失時安裝套件。
258273
{{< /hint >}}
259274

260275
## 🔍 函式: eask-package-desc (`name` &optional `current`)
@@ -965,7 +980,7 @@ This will kill Emacs process.
965980
使用響應消息輸出創建執行。
966981

967982
```elisp
968-
(eask-with-progress
983+
(eask-with-progress
969984
"檔案下載中s... "
970985
(eask-with-verbosity 'debug ; 通常與 `eask-with-verbosity` 一起使用
971986
;; 執行一些操作..
@@ -1011,6 +1026,6 @@ This will kill Emacs process.
10111026

10121027
返回可能的包名稱。
10131028

1014-
## 🔍 Function: eask-guess-entry-point ()
1029+
## 🔍 函式: eask-guess-entry-point ()
10151030

10161031
返回可能的包的入口點。

lisp/_prepare.el

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,8 +569,8 @@ scope of the dependencies (it's either `production' or `development')."
569569
(eask-defvc< 27 (eask-pkg-init)) ; XXX: remove this after we drop 26.x
570570
(when eask-depends-on-recipe-p
571571
(eask-log "Installing required external packages...")
572-
(eask-with-archives '("gnu" "melpa")
573-
(eask-package-install 'package-build))
572+
(eask-archive-install-packages '("gnu" "melpa")
573+
'package-build)
574574
(eask-with-progress
575575
"Building temporary archives (this may take a while)... "
576576
(eask-with-verbosity 'debug (github-elpa-build))
@@ -656,6 +656,14 @@ Argument BODY are forms for execution."
656656
"done ✓"))
657657
,@body))
658658

659+
(defun eask-archive-install-packages (archives names)
660+
"Install package NAMES with ARCHIVES setup."
661+
(eask-defvc< 27 (eask-pkg-init)) ; XXX: remove this after we drop 26.x
662+
(when-let* ((names (eask-listify names))
663+
((cl-some (lambda (pkg) (not (package-installed-p pkg))) names)))
664+
(eask-with-archives archives
665+
(eask--package-mapc #'eask-package-install names))))
666+
659667
(defun eask-package-installable-p (pkg)
660668
"Return non-nil if package (PKG) is installable."
661669
(assq (eask-intern pkg) package-archive-contents))

lisp/core/cat.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525

2626
(eask-start
2727
;; Preparation
28-
(eask-with-archives "melpa"
29-
(eask-package-install 'e2ansi))
28+
(eask-archive-install-packages '("gnu" "melpa")
29+
'e2ansi)
3030
(eask-msg "")
3131

3232
;; Start the task

lisp/core/docs.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343

4444
(eask-start
4545
;; Preparation
46-
(eask-with-archives '("gnu" "melpa")
47-
(eask-package-install 'el2org))
46+
(eask-archive-install-packages '("gnu" "melpa")
47+
'el2org)
4848

4949
;; Start building...
5050
(require 'el2org)

lisp/core/loc.el

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636

3737
(eask-start
3838
;; Preparation
39-
(eask-with-archives '("gnu" "melpa")
40-
(eask-package-install 'markdown-mode))
39+
(eask-archive-install-packages '("gnu" "melpa")
40+
'markdown-mode)
4141

4242
(require 'markdown-mode)
4343
;; Start LOC
4444
(if-let* ((files (or (eask-expand-file-specs (eask-args))
4545
(eask-package-files)))
46-
(eask-output (get-buffer-create "*eask-output*")))
46+
(eask-output (get-buffer-create "*eask-output*")))
4747
(with-current-buffer eask-output
4848
(erase-buffer)
4949
(progn ; Print header

lisp/core/package.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ Argument VERSION is a string represent the version number of this package."
7474
(ignore-errors (make-directory eask-dist-path t))
7575

7676
(eask-defvc< 27 (eask-pkg-init)) ; XXX: remove this after we drop 26.x
77-
(eask-with-archives '("gnu" "melpa")
78-
(eask-package-install 'package-build))
77+
(eask-archive-install-packages '("gnu" "melpa")
78+
'package-build)
7979
(eask-load "extern/package-build") ; override
8080

8181
(let* ((version (eask-package-version))

lisp/format/elfmt.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646

4747
(eask-start
4848
;; Preparation
49-
(eask-with-archives '("gnu" "melpa" "jcs-elpa")
50-
(eask-package-install 'elfmt))
49+
(eask-archive-install-packages '("gnu" "melpa" "jcs-elpa")
50+
'elfmt)
5151
(setq eask-format-elfmt--version (eask-package--version-string 'elfmt))
5252

5353
;; Start formatting

lisp/format/elisp-autofmt.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646

4747
(eask-start
4848
;; Preparation
49-
(eask-with-archives '("gnu" "melpa")
50-
(eask-package-install 'elisp-autofmt))
49+
(eask-archive-install-packages '("gnu" "melpa")
50+
'elisp-autofmt)
5151
(setq eask-format-elisp-autofmt--version (eask-package--version-string 'elisp-autofmt))
5252

5353
;; Start formatting

lisp/generate/ignore.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444

4545
(eask-start
4646
;; Preparation
47-
(eask-with-archives "melpa"
48-
(eask-package-install 'gitignore-templates))
47+
(eask-archive-install-packages '("gnu" "melpa")
48+
'gitignore-templates)
4949

5050
;; Start the task
5151
(require 'gitignore-templates)

lisp/generate/license.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848

4949
(eask-start
5050
;; Preparation
51-
(eask-with-archives "melpa"
52-
(eask-package-install 'license-templates))
51+
(eask-archive-install-packages '("gnu" "melpa")
52+
'license-templates)
5353

5454
;; Start the task
5555
(require 'license-templates)

lisp/generate/test/buttercup.el

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@
4141
" test-file name test-file))))))
4242

4343
(eask-start
44-
(eask-with-archives '("gnu" "melpa")
45-
(eask-package-install 'buttercup)
46-
(eask-package-install 'f))
44+
(eask-archive-install-packages '("gnu" "melpa")
45+
'(buttercup f))
4746
(require 'buttercup)
4847
(require 'f)
4948
(eask-generate-test-buttercup--init (eask-guess-package-name)))

lisp/generate/test/ecukes.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
nil t))
1616

1717
(eask-start
18-
(eask-with-archives '("gnu" "melpa")
19-
(eask-package-install 'ecukes))
18+
(eask-archive-install-packages '("gnu" "melpa")
19+
'ecukes)
2020
(require 'ecukes-new)
2121
(ecukes-new))
2222

lisp/generate/test/ert-runner.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
" name))))
3232

3333
(eask-start
34-
(eask-with-archives '("gnu" "melpa")
35-
(eask-package-install 'ert-runner))
34+
(eask-archive-install-packages '("gnu" "melpa")
35+
'ert-runner)
3636
(advice-add 'ert-runner/run :override #'ignore)
3737
(load-library "ert-runner")
3838
(load-library "f")

lisp/init/cask.el

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,8 @@ Optional argument CONTENTS is used for nested directives. e.g. development."
206206

207207
(eask-start
208208
;; Preparation
209-
(eask-with-archives `("gnu" "melpa" "jcs-elpa")
210-
(eask-package-install 'package-build)
211-
(eask-package-install 'cask))
209+
(eask-archive-install-packages '("gnu" "melpa" "jcs-elpa")
210+
'(package-build cask))
212211

213212
;; Start Converting
214213
(require 'cask)

lisp/init/eldev.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@
7777

7878
(eask-start
7979
;; Preparation
80-
(eask-with-archives "melpa"
81-
(eask-package-install 'eldev))
80+
(eask-archive-install-packages '("gnu" "melpa")
81+
'eldev)
8282

8383
;; Start Converting
8484
(require 'eldev)

lisp/init/keg.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ If no found the Keg file, returns nil."
125125

126126
(eask-start
127127
;; Preparation
128-
(eask-with-archives "melpa"
129-
(eask-package-install 'keg))
128+
(eask-archive-install-packages '("gnu" "melpa")
129+
'keg)
130130

131131
;; Start Converting
132132
(require 'keg)

lisp/lint/elisp-lint.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252

5353
(eask-start
5454
;; Preparation
55-
(eask-with-archives '("gnu" "melpa")
56-
(eask-package-install 'elisp-lint))
55+
(eask-archive-install-packages '("gnu" "melpa")
56+
'elisp-lint)
5757
(setq eask-lint-elisp-lint--version (eask-package--version-string 'elisp-lint))
5858

5959
;; Start Linting

lisp/lint/elsa.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060

6161
(eask-start
6262
;; Preparation
63-
(eask-with-archives '("gnu" "melpa")
64-
(eask-package-install 'elsa))
63+
(eask-archive-install-packages '("gnu" "melpa")
64+
'elsa)
6565
(setq eask-lint-elsa--version (eask-package--version-string 'elsa))
6666

6767
;; Start Linting

lisp/lint/package.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959

6060
(eask-start
6161
;; Preparation
62-
(eask-with-archives '("gnu" "melpa")
63-
(eask-package-install 'package-lint))
62+
(eask-archive-install-packages '("gnu" "melpa")
63+
'package-lint)
6464
(setq eask-lint-package--version (eask-package--version-string 'package-lint))
6565

6666
;; Start Linting

lisp/lint/regexps.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060

6161
(eask-start
6262
;; Preparation
63-
(eask-with-archives "gnu"
64-
(eask-package-install 'relint))
63+
(eask-archive-install-packages '("gnu")
64+
'relint)
6565
(setq eask-lint-regexps--relint-version (eask-package--version-string 'relint))
6666

6767
;; Start Linting

lisp/test/buttercup.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
(eask-start
1818
;; Preparation
19-
(eask-with-archives '("gnu" "melpa")
20-
(eask-package-install 'buttercup))
19+
(eask-archive-install-packages '("gnu" "melpa")
20+
'buttercup)
2121

2222
;; Start Testing
2323
(require 'buttercup)

lisp/test/ecukes.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ Modified from function `ecukes-cli/run'."
2929

3030
(eask-start
3131
;; Preparation
32-
(eask-with-archives '("gnu" "melpa")
33-
(eask-package-install 'ecukes))
32+
(eask-archive-install-packages '("gnu" "melpa")
33+
'ecukes)
3434

3535
;; Start Testing
3636
(require 'ecukes)

lisp/test/ert-runner.el

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
(setq ert-runner-verbose t))))
2222

2323
(eask-start
24-
(eask-with-archives '("gnu" "melpa")
25-
(eask-package-install 'ert-runner))
24+
(eask-archive-install-packages '("gnu" "melpa")
25+
'ert-runner)
2626
(require 'ert-runner))
2727

2828
;;; test/ert-runner.el ends here

lisp/test/melpazoid.el

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@
3030

3131
(eask-start
3232
;; Preparation
33-
(eask-with-archives '("gnu" "melpa")
34-
(eask-package-install 'package-lint)
35-
(eask-package-install 'pkg-info))
33+
(eask-archive-install-packages '("gnu" "melpa")
34+
'(package-lint pkg-info))
3635

3736
;; Start Testing
3837
(let* ((dirs (or (eask-args) `(,default-directory))))

0 commit comments

Comments
 (0)