aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Kangas2023-12-22 23:41:36 +0100
committerStefan Kangas2023-12-23 01:31:26 +0100
commitbb5399e3cd75450db6db9b3c5829f7bd87ca1308 (patch)
tree35f1539dc7087a74429a96de5999f49a64a2cdd1
parent9cb85e950dac77b59d48d320c7d40689d019aad4 (diff)
downloademacs-bb5399e3cd75450db6db9b3c5829f7bd87ca1308.tar.gz
emacs-bb5399e3cd75450db6db9b3c5829f7bd87ca1308.zip
Introduce new function lm-package-requires
* lisp/emacs-lisp/package.el (package--prepare-dependencies): Move from here... * lisp/emacs-lisp/lisp-mnt.el (lm--prepare-package-dependencies): ...to here. (lm-package-requires): New function. (package-buffer-info): Use above new function. * test/lisp/emacs-lisp/lisp-mnt-tests.el (lm--tests-lm-package-requires): New test.
-rw-r--r--lisp/emacs-lisp/lisp-mnt.el32
-rw-r--r--lisp/emacs-lisp/package.el25
-rw-r--r--test/lisp/emacs-lisp/lisp-mnt-tests.el20
3 files changed, 54 insertions, 23 deletions
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index cb7cff43555..2c7c6816e9c 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -434,6 +434,38 @@ This can be found in an RCS or SCCS header."
434 header-max t) 434 header-max t)
435 (match-string-no-properties 1))))))) 435 (match-string-no-properties 1)))))))
436 436
437(defun lm--prepare-package-dependencies (deps)
438 "Turn DEPS into an acceptable list of dependencies.
439
440Any parts missing a version string get a default version string
441of \"0\" (meaning any version) and an appropriate level of lists
442is wrapped around any parts requiring it."
443 (cond
444 ((not (listp deps))
445 (error "Invalid requirement specifier: %S" deps))
446 (t (mapcar (lambda (dep)
447 (cond
448 ((symbolp dep) `(,dep "0"))
449 ((stringp dep)
450 (error "Invalid requirement specifier: %S" dep))
451 ((and (listp dep) (null (cdr dep)))
452 (list (car dep) "0"))
453 (t dep)))
454 deps))))
455
456(declare-function package-read-from-string "package" (str))
457
458(defun lm-package-requires (&optional file)
459 "Return dependencies listed in file FILE, or current buffer if FILE is nil.
460The return value is a list of elements of the form (PACKAGE VERSION)
461where PACKAGE is the package name (a symbol) and VERSION is the
462package version (a string)."
463 (require 'package)
464 (lm-with-file file
465 (and-let* ((require-lines (lm-header-multiline "package-requires")))
466 (lm--prepare-package-dependencies
467 (package-read-from-string (mapconcat #'identity require-lines " "))))))
468
437(defun lm-keywords (&optional file) 469(defun lm-keywords (&optional file)
438 "Return the keywords given in file FILE, or current buffer if FILE is nil. 470 "Return the keywords given in file FILE, or current buffer if FILE is nil.
439The return is a `downcase'-ed string, or nil if no keywords 471The return is a `downcase'-ed string, or nil if no keywords
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index bed6e74c921..0e21f57fc3f 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1149,27 +1149,8 @@ Signal an error if the entire string was not used."
1149 (error "Can't read whole string")) 1149 (error "Can't read whole string"))
1150 (end-of-file expr)))) 1150 (end-of-file expr))))
1151 1151
1152(defun package--prepare-dependencies (deps)
1153 "Turn DEPS into an acceptable list of dependencies.
1154
1155Any parts missing a version string get a default version string
1156of \"0\" (meaning any version) and an appropriate level of lists
1157is wrapped around any parts requiring it."
1158 (cond
1159 ((not (listp deps))
1160 (error "Invalid requirement specifier: %S" deps))
1161 (t (mapcar (lambda (dep)
1162 (cond
1163 ((symbolp dep) `(,dep "0"))
1164 ((stringp dep)
1165 (error "Invalid requirement specifier: %S" dep))
1166 ((and (listp dep) (null (cdr dep)))
1167 (list (car dep) "0"))
1168 (t dep)))
1169 deps))))
1170
1171(declare-function lm-header "lisp-mnt" (header)) 1152(declare-function lm-header "lisp-mnt" (header))
1172(declare-function lm-header-multiline "lisp-mnt" (header)) 1153(declare-function lm-package-requires "lisp-mnt" (header))
1173(declare-function lm-website "lisp-mnt" (&optional file)) 1154(declare-function lm-website "lisp-mnt" (&optional file))
1174(declare-function lm-keywords-list "lisp-mnt" (&optional file)) 1155(declare-function lm-keywords-list "lisp-mnt" (&optional file))
1175(declare-function lm-maintainers "lisp-mnt" (&optional file)) 1156(declare-function lm-maintainers "lisp-mnt" (&optional file))
@@ -1212,9 +1193,7 @@ boundaries."
1212 (error "Package lacks a \"Version\" or \"Package-Version\" header"))) 1193 (error "Package lacks a \"Version\" or \"Package-Version\" header")))
1213 (package-desc-from-define 1194 (package-desc-from-define
1214 file-name pkg-version desc 1195 file-name pkg-version desc
1215 (and-let* ((require-lines (lm-header-multiline "package-requires"))) 1196 (lm-package-requires)
1216 (package--prepare-dependencies
1217 (package-read-from-string (mapconcat #'identity require-lines " "))))
1218 :kind 'single 1197 :kind 'single
1219 :url website 1198 :url website
1220 :keywords keywords 1199 :keywords keywords
diff --git a/test/lisp/emacs-lisp/lisp-mnt-tests.el b/test/lisp/emacs-lisp/lisp-mnt-tests.el
index c056761f0f9..1418abf221f 100644
--- a/test/lisp/emacs-lisp/lisp-mnt-tests.el
+++ b/test/lisp/emacs-lisp/lisp-mnt-tests.el
@@ -30,6 +30,26 @@
30 '(("Bob Weiner" . "rsw@gnu.org") 30 '(("Bob Weiner" . "rsw@gnu.org")
31 ("Mats Lidell" . "matsl@gnu.org"))))) 31 ("Mats Lidell" . "matsl@gnu.org")))))
32 32
33(ert-deftest lm--tests-lm-package-requires ()
34 (with-temp-buffer
35 (insert ";; Package-Requires: ((emacs 29.1))")
36 (should (equal (lm-package-requires) '((emacs 29.1)))))
37 (with-temp-buffer
38 (insert ";; Package-Requires: ((emacs \"26.3\") (jsonrpc \"1.0.16\") (flymake \"1.2.1\") (project \"0.9.8\") (xref \"1.6.2\") (eldoc \"1.14.0\") (seq \"2.23\") (external-completion \"0.1\"))")
39 (should (equal (lm-package-requires)
40 '((emacs "26.3") (jsonrpc "1.0.16") (flymake "1.2.1")
41 (project "0.9.8") (xref "1.6.2") (eldoc "1.14.0")
42 (seq "2.23") (external-completion "0.1")))))
43 (with-temp-buffer
44 (insert ";; Package-Requires: ((emacs \"26.3\") (jsonrpc \"1.0.16\") (flymake \"1.2.1\")\n"
45 ";; (project \"0.9.8\") (xref \"1.6.2\") (eldoc \"1.14.0\")\n"
46 ";; (seq \"2.23\") (external-completion \"0.1\"))")
47 (should (equal (lm-package-requires)
48 '((emacs "26.3") (jsonrpc "1.0.16") (flymake "1.2.1")
49 (project "0.9.8") (xref "1.6.2") (eldoc "1.14.0")
50 (seq "2.23") (external-completion "0.1"))))))
51
52
33(ert-deftest lm--tests-lm-website () 53(ert-deftest lm--tests-lm-website ()
34 (with-temp-buffer 54 (with-temp-buffer
35 (insert ";; URL: https://example.org/foo") 55 (insert ";; URL: https://example.org/foo")