Merge 'emacs-29' into 'feature/inhibit-native-comp-cleanup'
This commit is contained in:
commit
d6e4f24372
42 changed files with 907 additions and 508 deletions
|
@ -435,21 +435,26 @@ version of that package."
|
|||
(push pkg missing))))))
|
||||
(version-order (a b)
|
||||
"Predicate to sort packages in order."
|
||||
(version-list-< (cadr b) (cadr a)))
|
||||
(version-list-<
|
||||
(package-desc-version b)
|
||||
(package-desc-version a)))
|
||||
(duplicate-p (a b)
|
||||
"Are A and B the same package?"
|
||||
(eq (car a) (car b)))
|
||||
(eq (package-desc-name a) (package-desc-name b)))
|
||||
(depends-on-p (target package)
|
||||
"Does PACKAGE depend on TARGET?"
|
||||
(or (eq target package)
|
||||
(let* ((pac package-archive-contents)
|
||||
(desc (cadr (assoc package pac))))
|
||||
(seq-some
|
||||
(apply-partially #'depends-on-p target)
|
||||
(package-desc-reqs desc)))))
|
||||
(and desc (seq-some
|
||||
(apply-partially #'depends-on-p target)
|
||||
(package-desc-reqs desc))))))
|
||||
(dependent-order (a b)
|
||||
(or (not (depends-on-p (car b) (car a)))
|
||||
(depends-on-p (car a) (car b)))))
|
||||
(let ((desc-a (package-desc-name a))
|
||||
(desc-b (package-desc-name b)))
|
||||
(or (not desc-a) (not desc-b)
|
||||
(not (depends-on-p desc-b desc-a))
|
||||
(depends-on-p desc-a desc-b)))))
|
||||
(mapc #'search requirements)
|
||||
(cl-callf sort to-install #'version-order)
|
||||
(cl-callf seq-uniq to-install #'duplicate-p)
|
||||
|
@ -597,6 +602,13 @@ attribute in PKG-SPEC."
|
|||
(vc-retrieve-tag dir release-rev)
|
||||
(message "No release revision was found, continuing...")))))
|
||||
|
||||
(defvar package-vc-non-code-file-names
|
||||
'(".dir-locals.el" ".dir-locals-2.el")
|
||||
"List of file names that do not contain Emacs Lisp code.
|
||||
This list is used by `package-vc--unpack' to better check if the
|
||||
user is fetching code from a repository that does not contain any
|
||||
Emacs Lisp files.")
|
||||
|
||||
(defun package-vc--unpack (pkg-desc pkg-spec &optional rev)
|
||||
"Install the package described by PKG-DESC.
|
||||
PKG-SPEC is a package specification, a property list describing
|
||||
|
@ -606,7 +618,7 @@ checkout. This overrides the `:branch' attribute in PKG-SPEC."
|
|||
(pcase-let* (((map :lisp-dir) pkg-spec)
|
||||
(name (package-desc-name pkg-desc))
|
||||
(dirname (package-desc-full-name pkg-desc))
|
||||
(pkg-dir (expand-file-name dirname package-user-dir)))
|
||||
(pkg-dir (file-name-as-directory (expand-file-name dirname package-user-dir))))
|
||||
(when (string-empty-p name)
|
||||
(user-error "Empty package name"))
|
||||
(setf (package-desc-dir pkg-desc) pkg-dir)
|
||||
|
@ -615,6 +627,17 @@ checkout. This overrides the `:branch' attribute in PKG-SPEC."
|
|||
(package--delete-directory pkg-dir)
|
||||
(error "There already exists a checkout for %s" name)))
|
||||
(package-vc--clone pkg-desc pkg-spec pkg-dir rev)
|
||||
(when (directory-empty-p pkg-dir)
|
||||
(delete-directory pkg-dir)
|
||||
(error "Empty checkout for %s" name))
|
||||
(unless (seq-remove
|
||||
(lambda (file)
|
||||
(member (file-name-nondirectory file) package-vc-non-code-file-names))
|
||||
(directory-files-recursively pkg-dir "\\.el\\'" nil))
|
||||
(when (yes-or-no-p (format "No Emacs Lisp files found when fetching \"%s\", \
|
||||
abort installation?" name))
|
||||
(delete-directory pkg-dir t)
|
||||
(user-error "Installation aborted")))
|
||||
|
||||
;; When nothing is specified about a `lisp-dir', then should
|
||||
;; heuristically check if there is a sub-directory with lisp
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue