2022-07-31 21:32:38 +02:00
|
|
|
;;; package-vc.el --- Manage packages from VC checkouts -*- lexical-binding: t; -*-
|
|
|
|
|
2024-01-02 09:47:10 +08:00
|
|
|
;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
|
2022-07-31 21:32:38 +02:00
|
|
|
|
|
|
|
;; Author: Philip Kaludercic <philipk@posteo.net>
|
2024-07-27 10:30:48 +02:00
|
|
|
;; Maintainer: Philip Kaludercic <philipk@posteo.net>
|
2022-07-31 21:32:38 +02:00
|
|
|
;; Keywords: tools
|
|
|
|
|
2022-12-08 23:56:24 +01:00
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
2022-07-31 21:32:38 +02:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
2022-12-08 23:56:24 +01:00
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
2022-07-31 21:32:38 +02:00
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2022-12-08 23:56:24 +01:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2022-07-31 21:32:38 +02:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
|
;; While packages managed by package.el use tarballs for distributing
|
|
|
|
;; the source code, this extension allows for packages to be fetched
|
2023-04-24 02:00:54 +03:00
|
|
|
;; and upgraded directly from a version control system.
|
2022-11-04 18:53:02 +01:00
|
|
|
;;
|
|
|
|
;; To install a package from source use `package-vc-install'. If you
|
|
|
|
;; aren't interested in activating a package, you can use
|
|
|
|
;; `package-vc-checkout' instead, which will prompt you for a target
|
2023-12-03 23:31:30 +01:00
|
|
|
;; directory. If you wish to reuse an existing checkout, the command
|
2022-11-05 16:31:16 +01:00
|
|
|
;; `package-vc-install-from-checkout' will create a symbolic link and
|
|
|
|
;; prepare the package.
|
2022-11-04 18:53:02 +01:00
|
|
|
;;
|
|
|
|
;; If you make local changes that you wish to share with an upstream
|
|
|
|
;; maintainer, the command `package-vc-prepare-patch' can prepare
|
|
|
|
;; these as patches to send via Email.
|
2022-07-31 21:32:38 +02:00
|
|
|
|
2022-08-03 13:47:54 +02:00
|
|
|
;;; TODO:
|
|
|
|
|
2022-10-23 18:18:37 +02:00
|
|
|
;; - Allow maintaining patches that are ported back onto regular
|
|
|
|
;; packages and maintained between versions.
|
2022-08-03 13:47:54 +02:00
|
|
|
|
2022-07-31 21:32:38 +02:00
|
|
|
;;; Code:
|
|
|
|
|
2022-08-11 10:55:43 +02:00
|
|
|
(eval-when-compile (require 'rx))
|
2022-10-23 18:20:30 +02:00
|
|
|
(eval-when-compile (require 'map))
|
2022-12-10 09:43:22 +01:00
|
|
|
(eval-when-compile (require 'cl-lib))
|
2022-07-31 21:32:38 +02:00
|
|
|
(require 'package)
|
|
|
|
(require 'lisp-mnt)
|
|
|
|
(require 'vc)
|
2022-08-03 20:25:17 +02:00
|
|
|
(require 'seq)
|
2022-07-31 21:32:38 +02:00
|
|
|
|
|
|
|
(defgroup package-vc nil
|
|
|
|
"Manage packages from VC checkouts."
|
|
|
|
:group 'package
|
2023-03-30 23:24:08 +02:00
|
|
|
:link '(custom-manual "(emacs) Fetching Package Sources")
|
2022-11-04 18:19:01 +01:00
|
|
|
:prefix "package-vc-"
|
2022-07-31 21:32:38 +02:00
|
|
|
:version "29.1")
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defconst package-vc--elpa-packages-version 1
|
2022-10-28 19:58:05 +02:00
|
|
|
"Version number of the package specification format understood by package-vc.")
|
|
|
|
|
2024-10-24 15:11:44 +03:00
|
|
|
(define-obsolete-variable-alias
|
|
|
|
'package-vc-heuristic-alist
|
|
|
|
'vc-clone-heuristic-alist "31.1")
|
2022-08-11 10:53:11 +02:00
|
|
|
|
2022-10-18 22:34:11 +02:00
|
|
|
(defcustom package-vc-default-backend 'Git
|
2023-08-18 21:59:10 +02:00
|
|
|
"Default VC backend to use for cloning package repositories.
|
|
|
|
`package-vc-install' uses this backend when you specify neither
|
|
|
|
the backend nor a repository URL that's recognized via
|
2024-10-24 21:15:28 +08:00
|
|
|
`vc-clone-heuristic-alist'.
|
2023-08-18 21:59:10 +02:00
|
|
|
|
|
|
|
The value must be a member of `vc-handled-backends' that supports
|
|
|
|
the `clone' VC function."
|
2024-10-24 15:11:44 +03:00
|
|
|
:type vc-cloneable-backends-custom-type
|
2022-10-18 22:34:11 +02:00
|
|
|
:version "29.1")
|
|
|
|
|
2023-03-14 11:50:31 +01:00
|
|
|
(defcustom package-vc-register-as-project t
|
|
|
|
"Non-nil means that packages should be registered as projects."
|
|
|
|
:type 'boolean
|
|
|
|
:version "30.1")
|
|
|
|
|
2022-11-04 20:15:42 +01:00
|
|
|
(defvar package-vc-selected-packages) ; pacify byte-compiler
|
2022-11-06 09:52:57 +01:00
|
|
|
|
|
|
|
;;;###autoload
|
2022-11-06 09:51:45 +01:00
|
|
|
(defun package-vc-install-selected-packages ()
|
2022-11-05 16:43:05 +01:00
|
|
|
"Ensure packages specified in `package-vc-selected-packages' are installed."
|
2022-11-06 09:52:12 +01:00
|
|
|
(interactive)
|
2022-11-06 09:47:39 +01:00
|
|
|
(pcase-dolist (`(,name . ,spec) package-vc-selected-packages)
|
|
|
|
(when (stringp name)
|
|
|
|
(setq name (intern name)))
|
2022-11-12 09:14:33 +01:00
|
|
|
(let ((pkg-descs (assoc name package-alist #'string=)))
|
|
|
|
(unless (seq-some #'package-vc-p (cdr pkg-descs))
|
2022-10-31 09:58:37 +01:00
|
|
|
(cond
|
|
|
|
((null spec)
|
|
|
|
(package-vc-install name))
|
|
|
|
((stringp spec)
|
2022-12-25 09:53:07 +01:00
|
|
|
(package-vc-install name spec))
|
2022-10-31 09:58:37 +01:00
|
|
|
((listp spec)
|
|
|
|
(package-vc--archives-initialize)
|
2023-02-12 14:29:26 +01:00
|
|
|
(package-vc--unpack
|
|
|
|
(or (cadr (assoc name package-archive-contents))
|
|
|
|
(package-desc-create :name name :kind 'vc))
|
|
|
|
spec)))))))
|
2022-10-31 09:58:37 +01:00
|
|
|
|
2023-08-18 21:59:10 +02:00
|
|
|
|
|
|
|
(defcustom package-vc-selected-packages nil
|
|
|
|
"List of packages to install from their VCS repositories.
|
|
|
|
Each element is of the form (NAME . SPEC), where NAME is a symbol
|
|
|
|
designating the package and SPEC is one of:
|
2022-10-31 09:58:37 +01:00
|
|
|
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
- nil, if any package version can be installed;
|
|
|
|
- a version string, if that specific revision is to be installed;
|
2023-08-18 21:59:10 +02:00
|
|
|
- a property list, describing a package specification. For possible
|
|
|
|
values, see the subsection \"Specifying Package Sources\" in the
|
|
|
|
Info node `(emacs)Fetching Package Sources'.
|
2022-10-31 09:58:37 +01:00
|
|
|
|
2023-08-18 21:59:10 +02:00
|
|
|
The command `package-vc-install' updates the value of this user
|
|
|
|
option to store package specifications for packages that are not
|
|
|
|
specified in any archive."
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
:type '(alist :tag "List of packages you want to be installed"
|
2022-10-31 09:58:37 +01:00
|
|
|
:key-type (symbol :tag "Package")
|
|
|
|
:value-type
|
|
|
|
(choice (const :tag "Any revision" nil)
|
|
|
|
(string :tag "Specific revision")
|
|
|
|
(plist :options ((:url string)
|
|
|
|
(:branch string)
|
|
|
|
(:lisp-dir string)
|
|
|
|
(:main-file string)
|
2023-03-27 20:57:31 -04:00
|
|
|
(:doc string)
|
2022-10-31 09:58:37 +01:00
|
|
|
(:vc-backend symbol)))))
|
|
|
|
:version "29.1")
|
|
|
|
|
2023-04-30 20:21:04 +02:00
|
|
|
(defvar package-vc--archive-spec-alists nil
|
2022-10-18 22:34:11 +02:00
|
|
|
"List of package specifications for each archive.
|
2022-11-10 21:52:46 +01:00
|
|
|
The list maps each package name, as a string, to a plist as
|
|
|
|
specified in `package-vc-selected-packages'.")
|
2022-10-18 22:34:11 +02:00
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defvar package-vc--archive-data-alist nil
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"List of package specification metadata for archives.
|
2022-10-28 19:58:05 +02:00
|
|
|
Each element of the list has the form (ARCHIVE . PLIST), where
|
|
|
|
PLIST keys are one of:
|
|
|
|
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
`:version' (integer)
|
|
|
|
Indicates the version of the file formatting, to be compared
|
|
|
|
with `package-vc--elpa-packages-version'.
|
2022-10-28 19:58:05 +02:00
|
|
|
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
`:vc-backend' (symbol)
|
|
|
|
A symbol of the default VC backend to use if a package specification
|
|
|
|
does not indicate a backend. The value ought to be a member of
|
|
|
|
`vc-handled-backends'. If omitted, `vc-clone' will fall back on
|
|
|
|
`package-vc-default-backend'.
|
2022-10-28 19:58:05 +02:00
|
|
|
|
|
|
|
All other values are ignored.")
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--desc->spec (pkg-desc &optional name)
|
2022-10-18 22:34:11 +02:00
|
|
|
"Retrieve the package specification for PKG-DESC.
|
|
|
|
The optional argument NAME can be used to override the default
|
|
|
|
name for PKG-DESC."
|
2022-10-23 13:07:43 +02:00
|
|
|
(alist-get
|
2023-03-15 09:51:14 +01:00
|
|
|
(setq name (or name (package-desc-name pkg-desc)))
|
|
|
|
(if (and (package-desc-archive pkg-desc)
|
|
|
|
(not (alist-get name package-vc-selected-packages
|
|
|
|
nil nil #'string=)))
|
2022-10-30 11:43:11 +01:00
|
|
|
(alist-get (intern (package-desc-archive pkg-desc))
|
2023-04-30 20:21:04 +02:00
|
|
|
package-vc--archive-spec-alists)
|
2023-03-15 09:51:14 +01:00
|
|
|
;; Consult both our local list of package specifications, as well
|
|
|
|
;; as the lists provided by the archives.
|
|
|
|
(apply #'append (cons package-vc-selected-packages
|
2023-04-30 20:21:04 +02:00
|
|
|
(mapcar #'cdr package-vc--archive-spec-alists))))
|
2023-03-15 09:51:14 +01:00
|
|
|
'() nil #'string=))
|
2022-10-18 22:34:11 +02:00
|
|
|
|
|
|
|
(defun package-vc--read-archive-data (archive)
|
2023-04-30 20:21:04 +02:00
|
|
|
"Update `package-vc--archive-spec-alists' for ARCHIVE.
|
2022-11-21 15:16:08 +01:00
|
|
|
This function is meant to be used as a hook for `package-read-archive-hook'."
|
2022-11-02 10:15:28 +01:00
|
|
|
(let ((contents-file (expand-file-name
|
|
|
|
(format "archives/%s/elpa-packages.eld" archive)
|
|
|
|
package-user-dir)))
|
2022-10-18 22:34:11 +02:00
|
|
|
(when (file-exists-p contents-file)
|
|
|
|
(with-temp-buffer
|
|
|
|
(let ((coding-system-for-read 'utf-8))
|
2022-10-28 19:58:05 +02:00
|
|
|
(insert-file-contents contents-file)
|
|
|
|
;; The response from the server is expected to have the form
|
|
|
|
;;
|
|
|
|
;; ((("foo" :url "..." ...) ...)
|
|
|
|
;; :version 1
|
|
|
|
;; :default-vc Git)
|
|
|
|
(let ((spec (read (current-buffer))))
|
2022-11-03 19:38:34 +01:00
|
|
|
(when (eq package-vc--elpa-packages-version
|
2022-10-30 14:07:56 +01:00
|
|
|
(plist-get (cdr spec) :version))
|
2023-04-30 20:21:04 +02:00
|
|
|
(setf (alist-get (intern archive) package-vc--archive-spec-alists)
|
2022-10-28 19:58:05 +02:00
|
|
|
(car spec)))
|
2022-11-03 19:38:34 +01:00
|
|
|
(setf (alist-get (intern archive) package-vc--archive-data-alist)
|
2022-10-28 19:58:05 +02:00
|
|
|
(cdr spec))
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
(when-let* ((default-vc (plist-get (cdr spec) :default-vc))
|
|
|
|
((not (memq default-vc vc-handled-backends))))
|
2022-10-28 19:58:05 +02:00
|
|
|
(warn "Archive `%S' expects missing VC backend %S"
|
|
|
|
archive (plist-get (cdr spec) :default-vc)))))))))
|
2022-10-18 22:34:11 +02:00
|
|
|
|
|
|
|
(defun package-vc--download-and-read-archives (&optional async)
|
|
|
|
"Download specifications of all `package-archives' and read them.
|
2023-04-30 20:21:04 +02:00
|
|
|
Populate `package-vc--archive-spec-alists' with the result.
|
2022-10-18 22:34:11 +02:00
|
|
|
|
|
|
|
If optional argument ASYNC is non-nil, perform the downloads
|
|
|
|
asynchronously."
|
|
|
|
(dolist (archive package-archives)
|
2023-02-12 13:25:54 +01:00
|
|
|
(condition-case err
|
2022-10-22 00:06:02 +02:00
|
|
|
(package--download-one-archive archive "elpa-packages.eld" async)
|
2023-02-12 13:25:54 +01:00
|
|
|
(error (message "Failed to download `%s' archive: %S" (car archive) err)))))
|
2022-10-18 22:34:11 +02:00
|
|
|
|
|
|
|
(add-hook 'package-read-archive-hook #'package-vc--read-archive-data 20)
|
|
|
|
|
2024-09-19 22:27:26 +02:00
|
|
|
(defun package-vc-commit (pkg-desc)
|
|
|
|
"Return the last commit of a development package PKG-DESC."
|
|
|
|
(cl-assert (package-vc-p pkg-desc))
|
2022-07-31 21:32:38 +02:00
|
|
|
;; FIXME: vc should be extended to allow querying the commit of a
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
;; directory (as is possible when dealing with git repositories).
|
2022-07-31 21:32:38 +02:00
|
|
|
;; This should be a fallback option.
|
2024-09-19 22:27:26 +02:00
|
|
|
(cl-loop with dir = (package-desc-dir pkg-desc)
|
2022-07-31 21:32:38 +02:00
|
|
|
for file in (directory-files dir t "\\.el\\'" t)
|
|
|
|
when (vc-working-revision file) return it
|
|
|
|
finally return "unknown"))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--version (pkg)
|
2022-11-27 15:31:29 +01:00
|
|
|
"Return the version number for the VC package PKG."
|
2022-10-07 18:58:02 +02:00
|
|
|
(cl-assert (package-vc-p pkg))
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
(if-let* ((main-file (package-vc--main-file pkg)))
|
2022-11-03 19:28:47 +01:00
|
|
|
(with-temp-buffer
|
|
|
|
(insert-file-contents main-file)
|
|
|
|
(package-strip-rcs-id
|
|
|
|
(or (lm-header "package-version")
|
2022-12-10 09:47:42 +01:00
|
|
|
(lm-header "version")
|
|
|
|
"0")))
|
2022-11-03 19:28:47 +01:00
|
|
|
"0"))
|
2022-07-31 21:32:38 +02:00
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--main-file (pkg-desc)
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Return the name of the main file for PKG-DESC."
|
2022-10-30 11:43:11 +01:00
|
|
|
(cl-assert (package-vc-p pkg-desc))
|
2022-12-10 09:43:22 +01:00
|
|
|
(let* ((pkg-spec (package-vc--desc->spec pkg-desc))
|
|
|
|
(name (symbol-name (package-desc-name pkg-desc)))
|
|
|
|
(directory (file-name-concat
|
|
|
|
(or (package-desc-dir pkg-desc)
|
|
|
|
(expand-file-name name package-user-dir))
|
2023-03-15 10:05:39 +01:00
|
|
|
(plist-get pkg-spec :lisp-dir)))
|
|
|
|
(file (expand-file-name
|
|
|
|
(or (plist-get pkg-spec :main-file)
|
|
|
|
(concat name ".el"))
|
|
|
|
directory)))
|
2022-12-10 09:43:22 +01:00
|
|
|
(if (file-exists-p file) file
|
|
|
|
;; The following heuristic is only necessary when fetching a
|
|
|
|
;; repository with URL that would break the above assumptions.
|
|
|
|
;; Concrete example: https://github.com/sachac/waveform-el does
|
|
|
|
;; not have a file waveform-el.el, but a file waveform.el, so we
|
|
|
|
;; try and find the closest match.
|
|
|
|
(let ((distance most-positive-fixnum) (best nil))
|
|
|
|
(dolist (alt (directory-files directory t "\\.el\\'" t))
|
|
|
|
(let ((sd (string-distance file alt)))
|
|
|
|
(when (and (not (string-match-p (rx (or (: "-autoloads.el")
|
|
|
|
(: "-pkg.el"))
|
|
|
|
eos)
|
|
|
|
alt))
|
|
|
|
(< sd distance))
|
|
|
|
(when (< sd distance)
|
|
|
|
(setq distance (string-distance file alt)
|
|
|
|
best alt)))))
|
|
|
|
best))))
|
2022-10-30 11:43:11 +01:00
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--generate-description-file (pkg-desc pkg-file)
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Generate a package description file for PKG-DESC and write it to PKG-FILE."
|
2022-10-16 17:18:06 +02:00
|
|
|
(let ((name (package-desc-name pkg-desc)))
|
|
|
|
;; Infer the subject if missing.
|
|
|
|
(unless (package-desc-summary pkg-desc)
|
|
|
|
(setf (package-desc-summary pkg-desc)
|
2022-11-03 19:38:34 +01:00
|
|
|
(let ((main-file (package-vc--main-file pkg-desc)))
|
2022-10-30 11:43:11 +01:00
|
|
|
(or (package-desc-summary pkg-desc)
|
|
|
|
(and-let* ((pkg (cadr (assq name package-archive-contents))))
|
|
|
|
(package-desc-summary pkg))
|
|
|
|
(and main-file (file-exists-p main-file)
|
|
|
|
(lm-summary main-file))
|
|
|
|
package--default-summary))))
|
2022-07-31 21:32:38 +02:00
|
|
|
(let ((print-level nil)
|
|
|
|
(print-quoted t)
|
|
|
|
(print-length nil))
|
|
|
|
(write-region
|
|
|
|
(concat
|
|
|
|
";;; Generated package description from "
|
|
|
|
(replace-regexp-in-string
|
|
|
|
"-pkg\\.el\\'" ".el"
|
|
|
|
(file-name-nondirectory pkg-file))
|
|
|
|
" -*- no-byte-compile: t -*-\n"
|
|
|
|
(prin1-to-string
|
|
|
|
(nconc
|
|
|
|
(list 'define-package
|
|
|
|
(symbol-name name)
|
2022-11-20 15:36:24 +01:00
|
|
|
(package-vc--version pkg-desc)
|
2022-07-31 21:32:38 +02:00
|
|
|
(package-desc-summary pkg-desc)
|
|
|
|
(let ((requires (package-desc-reqs pkg-desc)))
|
|
|
|
(list 'quote
|
|
|
|
;; Turn version lists into string form.
|
|
|
|
(mapcar
|
|
|
|
(lambda (elt)
|
|
|
|
(list (car elt)
|
|
|
|
(package-version-join (cadr elt))))
|
|
|
|
requires))))
|
2022-11-20 15:36:24 +01:00
|
|
|
(list :kind 'vc)
|
2022-07-31 21:32:38 +02:00
|
|
|
(package--alist-to-plist-args
|
2024-09-19 22:27:26 +02:00
|
|
|
(let ((extras (copy-alist (package-desc-extras pkg-desc))))
|
|
|
|
(setf (alist-get :commit extras)
|
|
|
|
(package-vc-commit pkg-desc))
|
|
|
|
extras)
|
|
|
|
)))
|
2022-07-31 21:32:38 +02:00
|
|
|
"\n")
|
|
|
|
nil pkg-file nil 'silent))))
|
|
|
|
|
2023-08-20 16:29:33 +02:00
|
|
|
(defcustom package-vc-allow-build-commands nil
|
2023-08-18 21:59:10 +02:00
|
|
|
"Whether to run extra build commands when installing VC packages.
|
|
|
|
|
|
|
|
Some packages specify \"make\" targets or other shell commands
|
|
|
|
that should run prior to building the package, by including the
|
|
|
|
:make or :shell-command keywords in their specification. By
|
|
|
|
default, Emacs ignores these keywords when installing and
|
|
|
|
upgrading VC packages, but if the value is a list of package
|
|
|
|
names (symbols), the build commands will be run for those
|
|
|
|
packages. If the value is t, always respect :make and
|
|
|
|
:shell-command keywords.
|
2023-05-13 10:05:04 -07:00
|
|
|
|
|
|
|
It may be necessary to run :make and :shell-command arguments in
|
|
|
|
order to initialize a package or build its documentation, but
|
|
|
|
please be careful when changing this option, as installing and
|
|
|
|
updating a package can run potentially harmful code.
|
|
|
|
|
2023-08-18 21:59:10 +02:00
|
|
|
This applies to package specifications that come from your
|
|
|
|
configured package archives, as well as from entries in
|
|
|
|
`package-vc-selected-packages' and specifications that you give
|
|
|
|
to `package-vc-install' directly."
|
2023-05-13 10:05:04 -07:00
|
|
|
:type '(choice (const :tag "Run for all packages" t)
|
|
|
|
(repeat :tag "Run only for selected packages" (symbol :tag "Package name"))
|
|
|
|
(const :tag "Never run" nil))
|
|
|
|
:version "30.1")
|
|
|
|
|
|
|
|
(defun package-vc--make (pkg-spec pkg-desc)
|
|
|
|
"Process :make and :shell-command in PKG-SPEC.
|
|
|
|
PKG-DESC is the package descriptor for the package that is being
|
|
|
|
prepared."
|
|
|
|
(let ((target (plist-get pkg-spec :make))
|
|
|
|
(cmd (plist-get pkg-spec :shell-command))
|
|
|
|
(buf (format " *package-vc make %s*" (package-desc-name pkg-desc))))
|
|
|
|
(when (or cmd target)
|
|
|
|
(with-current-buffer (get-buffer-create buf)
|
|
|
|
(erase-buffer)
|
|
|
|
(when (and cmd (/= 0 (call-process shell-file-name nil t nil shell-command-switch cmd)))
|
|
|
|
(warn "Failed to run %s, see buffer %S" cmd (buffer-name)))
|
|
|
|
(when (and target (/= 0 (apply #'call-process "make" nil t nil (if (consp target) target (list target)))))
|
|
|
|
(warn "Failed to make %s, see buffer %S" target (buffer-name)))))))
|
|
|
|
|
2022-10-20 21:34:48 +02:00
|
|
|
(declare-function org-export-to-file "ox" (backend file))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--build-documentation (pkg-desc file)
|
2022-11-06 12:12:23 +01:00
|
|
|
"Build documentation for package PKG-DESC from documentation source in FILE.
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
FILE can be an Org file, indicated by its \".org\" extension,
|
|
|
|
otherwise it's assumed to be an Info file."
|
2022-11-06 21:53:32 +01:00
|
|
|
(let* ((pkg-name (package-desc-name pkg-desc))
|
2022-11-11 00:09:46 +01:00
|
|
|
(default-directory (package-desc-dir pkg-desc))
|
2023-06-23 08:40:57 +03:00
|
|
|
(docs-directory (file-name-directory (expand-file-name file)))
|
2022-11-15 13:27:59 +01:00
|
|
|
(output (expand-file-name (format "%s.info" pkg-name)))
|
2023-09-01 16:22:45 -07:00
|
|
|
(log-buffer (get-buffer-create (format " *package-vc doc: %s*" pkg-name)))
|
2022-11-15 13:27:59 +01:00
|
|
|
clean-up)
|
2023-09-01 16:22:45 -07:00
|
|
|
(with-current-buffer log-buffer
|
|
|
|
(erase-buffer))
|
|
|
|
(condition-case err
|
|
|
|
(progn
|
|
|
|
(when (string-match-p "\\.org\\'" file)
|
|
|
|
(require 'ox)
|
|
|
|
(require 'ox-texinfo)
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert-file-contents file)
|
|
|
|
(setq file (make-temp-file "ox-texinfo-"))
|
|
|
|
(let ((default-directory docs-directory))
|
|
|
|
(org-export-to-file 'texinfo file))
|
|
|
|
(setq clean-up t)))
|
|
|
|
(cond
|
|
|
|
((/= 0 (call-process "makeinfo" nil log-buffer nil
|
|
|
|
"-I" docs-directory
|
|
|
|
"--no-split" file
|
|
|
|
"-o" output))
|
|
|
|
(message "Failed to build manual %s, see buffer %S"
|
|
|
|
file (buffer-name)))
|
|
|
|
((/= 0 (call-process "install-info" nil log-buffer nil
|
|
|
|
output (expand-file-name "dir")))
|
|
|
|
(message "Failed to install manual %s, see buffer %S"
|
|
|
|
output (buffer-name)))
|
|
|
|
((kill-buffer log-buffer))))
|
|
|
|
(error (with-current-buffer log-buffer
|
|
|
|
(insert (error-message-string err)))
|
|
|
|
(message "Failed to export org manual for %s, see buffer %S" pkg-name log-buffer)))
|
2022-11-15 13:27:59 +01:00
|
|
|
(when clean-up
|
|
|
|
(delete-file file))))
|
2022-10-20 21:34:48 +02:00
|
|
|
|
2023-08-18 21:59:10 +02:00
|
|
|
(defun package-vc-install-dependencies (deps)
|
|
|
|
"Install missing dependencies according to DEPS.
|
|
|
|
|
|
|
|
DEPS is a list of elements (PACKAGE VERSION-LIST), where
|
|
|
|
PACKAGE is a package name and VERSION-LIST is the required
|
|
|
|
version of that package.
|
2022-12-25 09:35:36 +01:00
|
|
|
|
2023-08-18 21:59:10 +02:00
|
|
|
Return a list of dependencies that couldn't be met (or nil, when
|
|
|
|
this function successfully installs all given dependencies)."
|
2022-12-25 09:35:36 +01:00
|
|
|
(let ((to-install '()) (missing '()))
|
|
|
|
(cl-labels ((search (pkg)
|
|
|
|
"Attempt to find all dependencies for PKG."
|
|
|
|
(cond
|
|
|
|
((assq (car pkg) to-install)) ;inhibit cycles
|
|
|
|
((package-installed-p (car pkg)))
|
|
|
|
((let* ((pac package-archive-contents)
|
|
|
|
(desc (cadr (assoc (car pkg) pac))))
|
|
|
|
(if desc
|
2023-02-12 13:10:04 +01:00
|
|
|
(let ((reqs (package-desc-reqs desc)))
|
|
|
|
(push desc to-install)
|
2022-12-25 09:35:36 +01:00
|
|
|
(mapc #'search reqs))
|
|
|
|
(push pkg missing))))))
|
|
|
|
(version-order (a b)
|
|
|
|
"Predicate to sort packages in order."
|
2023-02-14 19:48:01 +01:00
|
|
|
(version-list-<
|
|
|
|
(package-desc-version b)
|
|
|
|
(package-desc-version a)))
|
2022-12-25 09:35:36 +01:00
|
|
|
(duplicate-p (a b)
|
|
|
|
"Are A and B the same package?"
|
2023-02-16 11:38:51 +01:00
|
|
|
(eq (package-desc-name a) (package-desc-name b)))
|
2022-12-25 09:35:36 +01:00
|
|
|
(depends-on-p (target package)
|
|
|
|
"Does PACKAGE depend on TARGET?"
|
|
|
|
(or (eq target package)
|
|
|
|
(let* ((pac package-archive-contents)
|
|
|
|
(desc (cadr (assoc package pac))))
|
2023-02-14 19:48:01 +01:00
|
|
|
(and desc (seq-some
|
|
|
|
(apply-partially #'depends-on-p target)
|
2023-08-19 11:27:02 +02:00
|
|
|
(mapcar #'car (package-desc-reqs desc)))))))
|
2022-12-25 09:35:36 +01:00
|
|
|
(dependent-order (a b)
|
2023-02-14 19:48:01 +01:00
|
|
|
(let ((desc-a (package-desc-name a))
|
|
|
|
(desc-b (package-desc-name b)))
|
2023-08-19 11:27:02 +02:00
|
|
|
(depends-on-p desc-a desc-b))))
|
2023-08-18 21:59:10 +02:00
|
|
|
(mapc #'search deps)
|
2022-12-25 09:35:36 +01:00
|
|
|
(cl-callf sort to-install #'version-order)
|
2023-02-16 11:38:51 +01:00
|
|
|
(cl-callf seq-uniq to-install #'duplicate-p)
|
2022-12-25 09:35:36 +01:00
|
|
|
(cl-callf sort to-install #'dependent-order))
|
|
|
|
(mapc #'package-install-from-archive to-install)
|
|
|
|
missing))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--unpack-1 (pkg-desc pkg-dir)
|
2022-11-06 13:16:50 +01:00
|
|
|
"Prepare PKG-DESC that is already checked-out in PKG-DIR.
|
|
|
|
This includes downloading missing dependencies, generating
|
|
|
|
autoloads, generating a package description file (used to
|
2022-11-27 15:31:29 +01:00
|
|
|
identify a package as a VC package later on), building
|
2022-11-06 13:16:50 +01:00
|
|
|
documentation and marking the package as installed."
|
2024-02-10 10:05:11 -08:00
|
|
|
(let* ((pkg-spec (package-vc--desc->spec pkg-desc))
|
|
|
|
(lisp-dir (plist-get pkg-spec :lisp-dir))
|
|
|
|
(lisp-path (file-name-concat pkg-dir lisp-dir))
|
|
|
|
missing)
|
2022-12-25 09:35:36 +01:00
|
|
|
|
|
|
|
;; In case the package was installed directly from source, the
|
|
|
|
;; dependency list wasn't know beforehand, and they might have
|
|
|
|
;; to be installed explicitly.
|
2023-10-03 10:08:52 +02:00
|
|
|
(let ((ignored-files
|
|
|
|
(if (plist-get pkg-spec :ignored-files)
|
|
|
|
(mapconcat
|
|
|
|
(lambda (ignore)
|
|
|
|
(wildcard-to-regexp
|
|
|
|
(if (string-match-p "\\`/" ignore)
|
|
|
|
(concat pkg-dir ignore)
|
|
|
|
(concat "*/" ignore))))
|
|
|
|
(plist-get pkg-spec :ignored-files)
|
|
|
|
"\\|")
|
|
|
|
regexp-unmatchable))
|
|
|
|
(deps '()))
|
2024-02-10 10:05:11 -08:00
|
|
|
(dolist (file (directory-files lisp-path t "\\.el\\'" t))
|
2023-10-03 10:08:52 +02:00
|
|
|
(unless (string-match-p ignored-files file)
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert-file-contents file)
|
|
|
|
(when-let* ((require-lines (lm-header-multiline "package-requires")))
|
|
|
|
(thread-last
|
|
|
|
(mapconcat #'identity require-lines " ")
|
|
|
|
package-read-from-string
|
2023-12-23 07:24:39 +01:00
|
|
|
lm--prepare-package-dependencies
|
2023-10-03 10:08:52 +02:00
|
|
|
(nconc deps)
|
|
|
|
(setq deps))))))
|
2022-12-25 09:35:36 +01:00
|
|
|
(dolist (dep deps)
|
|
|
|
(cl-callf version-to-list (cadr dep)))
|
2024-01-27 08:17:08 -08:00
|
|
|
(setf (package-desc-reqs pkg-desc) deps)
|
2022-12-25 09:35:36 +01:00
|
|
|
(setf missing (package-vc-install-dependencies (delete-dups deps)))
|
|
|
|
(setf missing (delq (assq (package-desc-name pkg-desc)
|
|
|
|
missing)
|
|
|
|
missing)))
|
|
|
|
|
|
|
|
(let ((default-directory (file-name-as-directory pkg-dir))
|
2023-10-03 10:08:52 +02:00
|
|
|
(pkg-file (expand-file-name (package--description-file pkg-dir) pkg-dir)))
|
2022-12-25 09:35:36 +01:00
|
|
|
;; Generate autoloads
|
|
|
|
(let* ((name (package-desc-name pkg-desc))
|
2024-02-10 10:05:11 -08:00
|
|
|
(auto-name (format "%s-autoloads.el" name)))
|
|
|
|
(package-generate-autoloads name lisp-path)
|
2022-12-25 09:35:36 +01:00
|
|
|
(when lisp-dir
|
|
|
|
(write-region
|
|
|
|
(with-temp-buffer
|
|
|
|
(insert ";; Autoload indirection for package-vc\n\n")
|
|
|
|
(prin1 `(load (expand-file-name
|
|
|
|
,(file-name-concat lisp-dir auto-name)
|
|
|
|
(or (and load-file-name
|
|
|
|
(file-name-directory load-file-name))
|
|
|
|
(car load-path))))
|
|
|
|
(current-buffer))
|
|
|
|
(buffer-string))
|
|
|
|
nil (expand-file-name auto-name pkg-dir))))
|
|
|
|
|
|
|
|
;; Generate package file
|
|
|
|
(package-vc--generate-description-file pkg-desc pkg-file)
|
|
|
|
|
2023-05-13 10:05:04 -07:00
|
|
|
;; Process :make and :shell-command arguments before building documentation
|
2023-08-20 16:29:33 +02:00
|
|
|
(when (or (eq package-vc-allow-build-commands t)
|
2023-05-13 10:05:04 -07:00
|
|
|
(memq (package-desc-name pkg-desc)
|
2023-08-20 16:29:33 +02:00
|
|
|
package-vc-allow-build-commands))
|
2023-05-13 10:05:04 -07:00
|
|
|
(package-vc--make pkg-spec pkg-desc))
|
|
|
|
|
2022-12-25 09:35:36 +01:00
|
|
|
;; Detect a manual
|
2023-03-15 10:05:39 +01:00
|
|
|
(when (executable-find "install-info")
|
2022-12-25 09:35:36 +01:00
|
|
|
(dolist (doc-file (ensure-list (plist-get pkg-spec :doc)))
|
|
|
|
(package-vc--build-documentation pkg-desc doc-file))))
|
|
|
|
|
2023-12-09 10:03:37 +01:00
|
|
|
;; Remove any previous instance of PKG-DESC from `package-alist'
|
|
|
|
(let ((pkgs (assq (package-desc-name pkg-desc) package-alist)))
|
|
|
|
(when pkgs
|
|
|
|
(setf (cdr pkgs) (seq-remove #'package-vc-p (cdr pkgs)))))
|
|
|
|
|
2022-12-25 09:35:36 +01:00
|
|
|
;; Update package-alist.
|
|
|
|
(let ((new-desc (package-load-descriptor pkg-dir)))
|
|
|
|
;; Activation has to be done before compilation, so that if we're
|
|
|
|
;; upgrading and macros have changed we load the new definitions
|
|
|
|
;; before compiling.
|
|
|
|
(when (package-activate-1 new-desc :reload :deps)
|
|
|
|
;; FIXME: Compilation should be done as a separate, optional, step.
|
|
|
|
;; E.g. for multi-package installs, we should first install all packages
|
|
|
|
;; and then compile them.
|
|
|
|
(package--compile new-desc)
|
|
|
|
(when package-native-compile
|
|
|
|
(package--native-compile-async new-desc))
|
|
|
|
;; After compilation, load again any files loaded by
|
|
|
|
;; `activate-1', so that we use the byte-compiled definitions.
|
|
|
|
(package--reload-previously-loaded new-desc)))
|
|
|
|
|
|
|
|
;; Mark package as selected
|
2023-05-14 21:22:59 +02:00
|
|
|
(let ((name (package-desc-name pkg-desc)))
|
|
|
|
(unless (memq name package-selected-packages)
|
|
|
|
(package--save-selected-packages
|
|
|
|
(cons name package-selected-packages))))
|
|
|
|
|
2022-12-25 09:35:36 +01:00
|
|
|
(package--quickstart-maybe-refresh)
|
|
|
|
|
|
|
|
;; Confirm that the installation was successful
|
|
|
|
(let ((main-file (package-vc--main-file pkg-desc)))
|
|
|
|
(message "VC package `%s' installed (Version %s, Revision %S).%s"
|
|
|
|
(package-desc-name pkg-desc)
|
|
|
|
(lm-with-file main-file
|
|
|
|
(package-strip-rcs-id
|
|
|
|
(or (lm-header "package-version")
|
|
|
|
(lm-header "version"))))
|
|
|
|
(vc-working-revision main-file)
|
|
|
|
(if missing
|
|
|
|
(format
|
|
|
|
" Failed to install the following dependencies: %s"
|
|
|
|
(mapconcat
|
|
|
|
(lambda (p)
|
|
|
|
(format "%s (%s)" (car p) (cadr p)))
|
|
|
|
missing ", "))
|
|
|
|
"")))
|
|
|
|
t))
|
2022-10-12 16:09:25 +02:00
|
|
|
|
2023-03-14 11:50:31 +01:00
|
|
|
(declare-function project-remember-projects-under "project" (dir &optional recursive))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--clone (pkg-desc pkg-spec dir rev)
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Clone the package PKG-DESC whose spec is PKG-SPEC into the directory DIR.
|
|
|
|
REV specifies a specific revision to checkout. This overrides the `:branch'
|
|
|
|
attribute in PKG-SPEC."
|
2022-11-03 19:26:21 +01:00
|
|
|
(pcase-let* ((name (package-desc-name pkg-desc))
|
|
|
|
((map :url :branch) pkg-spec))
|
|
|
|
|
|
|
|
;; Clone the repository into `repo-dir' if necessary
|
|
|
|
(unless (file-exists-p dir)
|
|
|
|
(make-directory (file-name-directory dir) t)
|
|
|
|
(let ((backend (or (plist-get pkg-spec :vc-backend)
|
2024-10-24 15:11:44 +03:00
|
|
|
(vc-guess-url-backend url)
|
2022-11-03 19:26:21 +01:00
|
|
|
(plist-get (alist-get (package-desc-archive pkg-desc)
|
2022-11-03 19:38:34 +01:00
|
|
|
package-vc--archive-data-alist
|
2022-11-03 19:26:21 +01:00
|
|
|
nil nil #'string=)
|
|
|
|
:vc-backend)
|
|
|
|
package-vc-default-backend)))
|
|
|
|
(unless (vc-clone url backend dir
|
|
|
|
(or (and (not (eq rev :last-release)) rev) branch))
|
|
|
|
(error "Failed to clone %s from %s" name url))))
|
|
|
|
|
2023-03-14 11:50:31 +01:00
|
|
|
(when package-vc-register-as-project
|
|
|
|
(let ((default-directory dir))
|
|
|
|
(require 'project)
|
|
|
|
(project-remember-projects-under dir)))
|
|
|
|
|
2022-11-03 19:26:21 +01:00
|
|
|
;; Check out the latest release if requested
|
|
|
|
(when (eq rev :last-release)
|
Mark if-let and when-let obsolete
* lisp/subr.el (if-let*, when-let*, if-let, when-let): Mark
if-let and when-let obsolete (bug#73853 and elsewhere). Move
docstring text around so that if-let* and when-let* descriptions
no longer refer to if-let and when-let.
* etc/NEWS: Announce the change.
* admin/admin.el (reminder-for-release-blocking-bugs):
* doc/misc/erc.texi (display-buffer):
* lisp/ansi-color.el (ansi-color-apply)
(ansi-color--face-vec-face):
* lisp/ansi-osc.el (ansi-osc-apply-on-region)
(ansi-osc-hyperlink):
* lisp/arc-mode.el (archive-goto-file)
(archive-next-file-displayer):
* lisp/auth-source-pass.el (auth-source-pass-search)
(auth-source-pass--parse-data)
(auth-source-pass--find-match-many):
* lisp/autorevert.el (auto-revert-notify-rm-watch):
* lisp/buff-menu.el (Buffer-menu-unmark-all-buffers)
(Buffer-menu-group-by-root):
* lisp/calendar/parse-time.el (parse-iso8601-time-string):
* lisp/cedet/pulse.el (pulse-tick):
* lisp/comint.el (comint--fontify-input-ppss-flush-indirect)
(comint--intersect-regions):
* lisp/completion-preview.el (completion-preview--try-table)
(completion-preview--capf-wrapper, completion-preview--update):
* lisp/cus-edit.el (setopt--set)
(custom-dirlocals-maybe-update-cons, custom-dirlocals-validate):
* lisp/custom.el (load-theme):
* lisp/descr-text.el (describe-char):
* lisp/desktop.el (desktop--emacs-pid-running-p):
* lisp/dired-x.el (menu):
* lisp/dired.el (dired-font-lock-keywords)
(dired-insert-directory, dired--insert-disk-space, dired-mode):
* lisp/dnd.el (dnd-handle-multiple-urls):
* lisp/dom.el (dom-remove-attribute):
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (bytecomp--custom-declare):
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el (comp--all-classes)
(comp-cstr-set-range-for-arithm, comp--cstr-union-1-no-mem)
(comp-cstr-intersection-no-mem, comp-cstr-fixnum-p)
(comp-cstr-type-p):
* lisp/emacs-lisp/comp-run.el (comp-subr-trampoline-install)
(native--compile-async):
* lisp/emacs-lisp/comp.el (comp--get-function-cstr)
(comp--function-pure-p, comp--intern-func-in-ctxt)
(comp--addr-to-bb-name, comp--emit-assume, comp--maybe-add-vmvar)
(comp--add-call-cstr, comp--compute-dominator-tree)
(comp--dom-tree-walker, comp--ssa-rename)
(comp--function-call-maybe-fold, comp--fwprop-call)
(comp--call-optim-func):
* lisp/emacs-lisp/edebug.el (edebug-global-prefix)
(edebug-remove-instrumentation):
* lisp/emacs-lisp/eieio.el (initialize-instance):
* lisp/emacs-lisp/ert-x.el (ert-resource-directory):
* lisp/emacs-lisp/ert.el (ert--expand-should-1)
(ert-test-location, ert-write-junit-test-report)
(ert-test--erts-test):
* lisp/emacs-lisp/icons.el (icon-complete-spec, icon-string)
(icons--create):
* lisp/emacs-lisp/lisp-mode.el (lisp--local-defform-body-p):
* lisp/emacs-lisp/loaddefs-gen.el
(loaddefs-generate--make-autoload)
(loaddefs-generate--parse-file):
* lisp/emacs-lisp/multisession.el
(multisession-edit-mode--revert, multisession-edit-value):
* lisp/emacs-lisp/package-vc.el (package-vc--read-archive-data)
(package-vc--version, package-vc--clone):
* lisp/emacs-lisp/package.el (package--reload-previously-loaded):
* lisp/emacs-lisp/pp.el (pp--insert-lisp):
* lisp/emacs-lisp/subr-x.el (add-display-text-property):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print):
* lisp/emacs-lisp/timer.el (run-at-time):
* lisp/emacs-lisp/vtable.el (vtable-goto-table)
(vtable-goto-column, vtable-update-object, vtable--insert-line)
(vtable--compute-widths, vtable--make-keymap):
* lisp/emacs-lisp/warnings.el (display-warning):
* lisp/epa-file.el (epa-file-insert-file-contents):
* lisp/epa.el (epa-show-key):
* lisp/erc/erc-backend.el (erc--split-line, erc--conceal-prompt)
(PRIVMSG, erc--get-isupport-entry):
* lisp/erc/erc-button.el (erc-button-add-nickname-buttons)
(erc--button-next):
* lisp/erc/erc-common.el (erc--find-group):
* lisp/erc/erc-fill.el (erc-fill, erc-fill-static)
(erc-fill--wrap-escape-hidden-speaker)
(erc-fill--wrap-unmerge-on-date-stamp)
(erc-fill--wrap-massage-initial-message-post-clear)
(erc-fill-wrap, erc-fill--wrap-rejigger-region):
* lisp/erc/erc-goodies.el (erc--scrolltobottom-all)
(erc--keep-place-indicator-on-window-buffer-change)
(keep-place-indicator, erc--keep-place-indicator-adjust-on-clear)
(erc-keep-place-move, erc--command-indicator-display):
* lisp/erc/erc-ibuffer.el (erc-members):
* lisp/erc/erc-join.el (erc-join--remove-requested-channel)
(erc-autojoin--join):
* lisp/erc/erc-networks.el
(erc-networks--id-qualifying-init-parts, erc-networks--id-reload)
(erc-networks--id-ensure-comparable)
(erc-networks--reclaim-orphaned-target-buffers)
(erc-networks--server-select):
* lisp/erc/erc-nicks.el (erc-nicks-invert)
(erc-nicks--redirect-face-widget-link, erc-nicks--highlight)
(erc-nicks--highlight-button)
(erc-nicks--list-faces-help-button-action, erc-nicks-list-faces)
(erc-nicks-refresh, erc-nicks--colors-from-faces)
(erc-nicks--track-prioritize)
(erc-nicks--remember-face-for-track):
* lisp/erc/erc-notify.el (querypoll, erc--querypoll-get-next)
(erc--querypoll-on-352, erc--querypoll-send):
* lisp/erc/erc-sasl.el (erc-sasl--read-password):
* lisp/erc/erc-services.el
(erc-services-issue-ghost-and-retry-nick):
* lisp/erc/erc-speedbar.el (erc-speedbar--ensure, nickbar)
(erc-speedbar-toggle-nicknames-window-lock)
(erc-speedbar--compose-nicks-face):
* lisp/erc/erc-stamp.el (erc-stamp--recover-on-reconnect)
(erc-stamp-prefix-log-filter, erc--conceal-prompt)
(erc--insert-timestamp-left, erc-insert-timestamp-right)
(erc-stamp--defer-date-insertion-on-post-modify)
(erc-insert-timestamp-left-and-right)
(erc-stamp--redo-right-stamp-post-clear)
(erc-stamp--reset-on-clear, erc-stamp--dedupe-date-stamps):
* lisp/erc/erc-status-sidebar.el (bufbar)
(erc-status-sidebar-prefer-target-as-name)
(erc-status-sidebar-default-allsort, erc-status-sidebar-click):
* lisp/erc/erc-track.el (erc-track--shortened-names-get)
(erc-track--setup, erc-track--select-mode-line-face)
(erc-track-modified-channels, erc-track--collect-faces-in)
(erc-track--switch-buffer, erc-track--replace-killed-buffer):
* lisp/erc/erc-truncate.el (erc-truncate--setup)
(erc-truncate-buffer):
* lisp/erc/erc.el (erc--ensure-query-member)
(erc--ensure-query-members, erc--remove-channel-users-but)
(erc--cusr-change-status, erc--find-mode, erc--update-modules)
(erc-log-irc-protocol, erc--refresh-prompt)
(erc--restore-important-text-props)
(erc--order-text-properties-from-hash, erc-send-input-line)
(erc-cmd-IGNORE, erc--unignore-user, erc-cmd-QUERY)
(erc-cmd-BANLIST, erc--speakerize-nick)
(erc--format-speaker-input-message, erc-channel-receive-names)
(erc-send-current-line, erc-format-target-and/or-network)
(erc-kill-buffer-function, erc-restore-text-properties)
(erc--get-eq-comparable-cmd):
* lisp/eshell/em-alias.el (eshell-maybe-replace-by-alias--which)
(eshell-maybe-replace-by-alias):
* lisp/eshell/em-glob.el (eshell-glob-convert):
* lisp/eshell/em-pred.el (eshell-pred-user-or-group)
(eshell-pred-file-time, eshell-pred-file-type)
(eshell-pred-file-mode, eshell-pred-file-links)
(eshell-pred-file-size):
* lisp/eshell/em-prompt.el (eshell-forward-paragraph)
(eshell-next-prompt):
* lisp/eshell/esh-arg.el (eshell-resolve-current-argument):
* lisp/eshell/esh-cmd.el (eshell-do-eval, eshell/which)
(eshell-plain-command--which, eshell-plain-command):
* lisp/eshell/esh-io.el (eshell-duplicate-handles)
(eshell-protect-handles, eshell-get-target, eshell-close-target):
* lisp/eshell/esh-proc.el (eshell-sentinel):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref)
(eshell-get-variable, eshell-set-variable):
* lisp/faces.el (face-at-point):
* lisp/ffap.el (ffap-in-project):
* lisp/filenotify.el (file-notify--rm-descriptor):
* lisp/files-x.el (read-dir-locals-file)
(connection-local-update-profile-variables)
(connection-local-value):
* lisp/files.el (file-remote-p, abbreviate-file-name)
(set-auto-mode, hack-local-variables)
(revert-buffer-restore-read-only):
* lisp/find-dired.el (find-dired-sort-by-filename):
* lisp/font-lock.el (font-lock--filter-keywords):
* lisp/gnus/gnus-art.el (article-emojize-symbols):
* lisp/gnus/gnus-int.el (gnus-close-server):
* lisp/gnus/gnus-search.el (gnus-search-transform)
(gnus-search-indexed-parse-output, gnus-search-server-to-engine):
* lisp/gnus/gnus-sum.el (gnus-collect-urls, gnus-shorten-url):
* lisp/gnus/gnus.el (gnus-check-backend-function):
* lisp/gnus/message.el (message-send-mail):
* lisp/gnus/mml.el (mml-generate-mime, mml-insert-mime-headers):
* lisp/gnus/nnatom.el (nnatom--read-feed, nnatom--read-article)
(nnatom--read-article-or-group-authors, nnatom--read-publish)
(nnatom--read-update, nnatom--read-links):
* lisp/gnus/nnfeed.el (nnfeed--read-server, nnfeed--write-server)
(nnfeed--parse-feed, nnfeed--group-data, nnfeed-retrieve-article)
(nnfeed-retrieve-headers, nnfeed--print-part)
(nnfeed-request-article, nnfeed-request-group)
(nnfeed-request-list, nnfeed--group-description)
(nnfeed-request-group-description)
(nnfeed-request-list-newsgroups, nnfeed-request-rename-group):
* lisp/gnus/nnmh.el (nnmh-update-gnus-unreads):
* lisp/help-fns.el (help-find-source)
(help-fns--insert-menu-bindings, help-fns--mention-first-release)
(help-fns--mention-shortdoc-groups)
(help-fns--customize-variable-version)
(help-fns--face-custom-version-info, describe-mode):
* lisp/help-mode.el (help-make-xrefs):
* lisp/help.el (help-key-description, help--describe-command):
* lisp/hfy-cmap.el (htmlfontify-load-rgb-file):
* lisp/ibuf-ext.el (ibuffer-jump-to-filter-group)
(ibuffer-kill-filter-group, ibuffer-kill-line)
(ibuffer-save-filter-groups, ibuffer-save-filters, filename)
(basename, file-extension, ibuffer-diff-buffer-with-file-1)
(ibuffer-mark-by-file-name-regexp)
(ibuffer-mark-by-content-regexp):
* lisp/ibuf-macs.el (ibuffer-aif, ibuffer-awhen):
* lisp/ibuffer.el (ibuffer-mouse-toggle-mark)
(ibuffer-toggle-marks, ibuffer-mark-interactive)
(ibuffer-compile-format, process, ibuffer-map-lines):
* lisp/image.el (image--compute-map)
(image--compute-original-map):
* lisp/image/exif.el (exif-parse-buffer):
* lisp/image/image-converter.el (image-convert-p, image-convert)
(image-converter--find-converter):
* lisp/image/image-dired-util.el
(image-dired-file-name-at-point):
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--with-thumbnail-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired--slideshow-step, image-dired-display-image):
* lisp/image/wallpaper.el (wallpaper--init-action-kill)
(wallpaper--find-setter, wallpaper--find-command)
(wallpaper--find-command-args, wallpaper--x-monitor-name):
* lisp/info-look.el (info-lookup-interactive-arguments)
(info-complete)::(:mode):
* lisp/info.el (info-pop-to-buffer, Info-read-node-name-1):
* lisp/international/emoji.el (emoji--adjust-displayable-1)
(emoji--add-recent):
* lisp/jsonrpc.el (jsonrpc--call-deferred)
(jsonrpc--process-sentinel, jsonrpc--remove):
* lisp/keymap.el (keymap-local-lookup):
* lisp/mail/emacsbug.el (report-emacs-bug-hook)
(submit-emacs-patch):
* lisp/mail/ietf-drums.el (ietf-drums-parse-addresses):
* lisp/mail/mailclient.el (mailclient-send-it):
* lisp/mail/rfc6068.el (rfc6068-parse-mailto-url):
* lisp/mail/undigest.el (rmail-digest-parse-mixed-mime):
* lisp/minibuffer.el (completion-metadata-get)
(completions--after-change)
(minibuffer-visible-completions--filter):
* lisp/net/browse-url.el (browse-url-url-at-point)
(browse-url-file-url, browse-url-emacs):
* lisp/net/dbus.el (dbus-byte-array-to-string)
(dbus-monitor-goto-serial):
* lisp/net/dictionary.el (dictionary-search):
* lisp/net/eww.el (eww--download-directory)
(eww-auto-rename-buffer, eww-open-in-new-buffer, eww-submit)
(eww-follow-link, eww-read-alternate-url)
(eww-copy-alternate-url):
* lisp/net/goto-addr.el (goto-address-at-point):
* lisp/net/mailcap.el (mailcap-mime-info):
* lisp/net/rcirc.el (rcirc, rcirc-connect, rcirc-send-string)
(rcirc-kill-buffer-hook, rcirc-print, rcirc-when)
(rcirc-color-attributes, rcirc-handler-NICK)
(rcirc-handler-TAGMSG, rcirc-handler-BATCH):
* lisp/net/shr.el (shr-descend, shr-adaptive-fill-function)
(shr-correct-dom-case, shr-tag-a):
* lisp/net/sieve.el (sieve-manage-quit):
* lisp/outline.el (outline-cycle-buffer):
* lisp/pcmpl-git.el (pcmpl-git--tracked-file-predicate):
* lisp/proced.el (proced-auto-update-timer):
* lisp/progmodes/bug-reference.el
(bug-reference-try-setup-from-vc):
* lisp/progmodes/c-ts-common.el (c-ts-common--fill-paragraph):
* lisp/progmodes/c-ts-mode.el (c-ts-mode--preproc-offset)
(c-ts-mode--anchor-prev-sibling, c-ts-mode-indent-defun):
* lisp/progmodes/compile.el (compilation-error-properties)
(compilation-find-file-1):
* lisp/progmodes/eglot.el (eglot--check-object)
(eglot--read-server, eglot-upgrade-eglot)
(eglot-handle-notification, eglot--CompletionParams)
(eglot-completion-at-point, eglot--sig-info)
(eglot-register-capability):
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load)
(elisp-eldoc-var-docstring-with-value):
* lisp/progmodes/erts-mode.el (erts-mode--goto-start-of-test):
* lisp/progmodes/flymake.el (flymake--update-eol-overlays)
(flymake-eldoc-function):
* lisp/progmodes/gdb-mi.el (gdb-breakpoints-list-handler-custom)
(gdb-frame-handler):
* lisp/progmodes/go-ts-mode.el (go-ts-mode-docstring)
(go-ts-mode--comment-on-previous-line-p)
(go-ts-mode--get-test-regexp-at-point)
(go-ts-mode-test-this-file):
* lisp/progmodes/grep.el (lgrep, rgrep-default-command)
(grep-file-at-point):
* lisp/progmodes/perl-mode.el (perl--end-of-format-p):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--anchor-prev-sibling, php-ts-mode--indent-defun):
* lisp/progmodes/project.el (project--other-place-command)
(project--find-default-from, project--transplant-file-name)
(project-prefixed-buffer-name, project--remove-from-project-list)
(project-prompt-project-name, project-remember-projects-under)
(project--switch-project-command)
(project-uniquify-dirname-transform, project-mode-line-format):
* lisp/progmodes/python.el
(python-font-lock-keywords-maximum-decoration)
(python--treesit-fontify-union-types)
(python-shell-get-process-name, python-shell-restart)
(python-shell-completion-at-point, python-ffap-module-path)
(python-util-comint-end-of-output-p, python--import-sources)
(python-add-import, python-remove-import, python-fix-imports):
* lisp/progmodes/xref.el (xref--add-log-current-defun):
* lisp/repeat.el (repeat-echo-message-string):
* lisp/saveplace.el (save-place-dired-hook):
* lisp/server.el (server-save-buffers-kill-terminal):
* lisp/shadowfile.el (shadow-make-fullname)
(shadow-contract-file-name, shadow-define-literal-group):
* lisp/shell.el (shell-highlight-undef-mode):
* lisp/simple.el (command-completion-using-modes-p)
(command-execute, file-user-uid, file-group-gid)
(first-completion, last-completion, switch-to-completions):
* lisp/startup.el (startup--load-user-init-file):
* lisp/tab-line.el (tab-line-tabs-buffer-group-by-project):
* lisp/tar-mode.el (tar-goto-file, tar-next-file-displayer):
* lisp/term/android-win.el (android-encode-select-string)
(gui-backend-set-selection):
* lisp/term/haiku-win.el (haiku-dnd-convert-string)
(haiku-select-encode-xstring, haiku-select-encode-utf-8-string):
* lisp/textmodes/emacs-news-mode.el (emacs-news--buttonize):
* lisp/textmodes/ispell.el (ispell-completion-at-point):
* lisp/textmodes/sgml-mode.el (sgml-validate)
(html-mode--complete-at-point):
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer)
(xref-backend-references):
* lisp/thingatpt.el (thing-at-point-file-at-point)
(thing-at-point-face-at-point):
* lisp/thread.el (thread-list--get-status):
* lisp/time.el (world-clock-copy-time-as-kill, world-clock):
* lisp/touch-screen.el (touch-screen-handle-touch):
* lisp/treesit.el (treesit-language-at, treesit-node-at)
(treesit-node-on, treesit-buffer-root-node)
(treesit-node-field-name, treesit-local-parsers-at)
(treesit-local-parsers-on, treesit--cleanup-local-range-overlays)
(treesit-font-lock-recompute-features)
(treesit-font-lock-fontify-region, treesit-transpose-sexps)
(treesit-add-log-current-defun, treesit-major-mode-setup)
(treesit--explorer-refresh, treesit-install-language-grammar):
* lisp/url/url.el (url-retrieve-synchronously):
* lisp/vc/smerge-mode.el (smerge-diff):
* lisp/vc/vc-dir.el (vc-dir):
* lisp/vc/vc-dispatcher.el (vc-do-async-command):
* lisp/vc/vc-git.el (vc-git-dir--branch-headers)
(vc-git-dir--stash-headers, vc-git--log-edit-summary-check)
(vc-git-stash-list):
* lisp/vc/vc.el (vc-responsible-backend, vc-buffer-sync-fileset)
(vc-clone):
* lisp/visual-wrap.el (visual-wrap--apply-to-line):
* lisp/wid-edit.el (widget-text)
(widget-editable-list-insert-before):
* lisp/window-tool-bar.el
(window-tool-bar--keymap-entry-to-string):
* lisp/window.el (display-buffer, display-buffer-full-frame)
(window-point-context-set, window-point-context-use)
(window-point-context-use-default-function):
* lisp/xdg.el (xdg-current-desktop):
* lisp/xwidget.el (xwidget-webkit-callback):
* lisp/yank-media.el (yank-media--get-selection)
(yank-media-types):
* test/lisp/comint-tests.el
(comint-tests/test-password-function):
* test/lisp/completion-preview-tests.el
(completion-preview-tests--capf):
* test/lisp/cus-edit-tests.el (with-cus-edit-test):
* test/lisp/erc/erc-scenarios-base-local-modules.el
(-phony-sblm-):
* test/lisp/erc/erc-scenarios-stamp.el
(erc-scenarios-stamp--on-post-modify):
* test/lisp/erc/erc-services-tests.el
(erc-services-tests--asp-parse-entry):
* test/lisp/erc/erc-tests.el (erc-modules--internal-property)
(erc--find-mode, erc-tests--update-modules):
* test/lisp/erc/resources/erc-d/erc-d-i.el
(erc-d-i--parse-message):
* test/lisp/erc/resources/erc-d/erc-d-t.el
(erc-d-t-kill-related-buffers, erc-d-t-with-cleanup):
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-i--parse-message--irc-parser-tests):
* test/lisp/erc/resources/erc-d/erc-d-u.el
(erc-d-u--read-exchange-slowly):
* test/lisp/erc/resources/erc-d/erc-d.el (erc-d--expire)
(erc-d--finalize-done, erc-d--command-handle-all):
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common-with-cleanup):
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests--common-display-message)
(erc-tests-common-create-subprocess):
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058):
* test/lisp/international/mule-tests.el
(mule-cmds-tests--ucs-names-missing-names):
* test/lisp/progmodes/python-tests.el
(python-tests-get-shell-interpreter)
(python-tests--get-interpreter-info):
* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-resource-file):
* test/lisp/replace-tests.el (replace-tests-with-undo):
* test/src/emacs-tests.el (emacs-tests--seccomp-debug):
* test/src/process-tests.el (process-tests--emacs-command)
(process-tests--emacs-binary, process-tests--dump-file):
* test/src/treesit-tests.el (treesit--ert-test-defun-navigation):
Replace use of the now-obsolete if-let and when-let.
2024-10-24 16:50:07 +08:00
|
|
|
(if-let* ((release-rev (package-vc--release-rev pkg-desc)))
|
2022-11-03 19:26:21 +01:00
|
|
|
(vc-retrieve-tag dir release-rev)
|
|
|
|
(message "No release revision was found, continuing...")))))
|
|
|
|
|
2023-02-16 11:11:23 +01:00
|
|
|
(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.")
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--unpack (pkg-desc pkg-spec &optional rev)
|
2022-10-18 22:34:11 +02:00
|
|
|
"Install the package described by PKG-DESC.
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
PKG-SPEC is a package specification, a property list describing
|
2023-04-30 20:21:04 +02:00
|
|
|
how to fetch and build the package. See `package-vc--archive-spec-alists'
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
for details. The optional argument REV specifies a specific revision to
|
|
|
|
checkout. This overrides the `:branch' attribute in PKG-SPEC."
|
2023-02-22 15:23:43 +01:00
|
|
|
(unless (eq (package-desc-kind pkg-desc) 'vc)
|
|
|
|
(let ((copy (copy-package-desc pkg-desc)))
|
|
|
|
(setf (package-desc-kind copy) 'vc
|
|
|
|
pkg-desc copy)))
|
2022-11-10 21:55:30 +01:00
|
|
|
(pcase-let* (((map :lisp-dir) pkg-spec)
|
2022-11-03 19:26:21 +01:00
|
|
|
(name (package-desc-name pkg-desc))
|
|
|
|
(dirname (package-desc-full-name pkg-desc))
|
2023-02-14 19:49:51 +01:00
|
|
|
(pkg-dir (file-name-as-directory (expand-file-name dirname package-user-dir))))
|
2023-01-11 09:27:01 +01:00
|
|
|
(when (string-empty-p name)
|
|
|
|
(user-error "Empty package name"))
|
2022-07-31 21:32:38 +02:00
|
|
|
(setf (package-desc-dir pkg-desc) pkg-dir)
|
|
|
|
(when (file-exists-p pkg-dir)
|
2022-11-25 00:06:37 +07:00
|
|
|
(if (yes-or-no-p (format "Overwrite previous checkout for package `%s'?" name))
|
2022-11-08 23:45:35 +01:00
|
|
|
(package--delete-directory pkg-dir)
|
2022-07-31 21:32:38 +02:00
|
|
|
(error "There already exists a checkout for %s" name)))
|
2022-11-08 23:45:35 +01:00
|
|
|
(package-vc--clone pkg-desc pkg-spec pkg-dir rev)
|
2023-02-14 19:49:51 +01:00
|
|
|
(when (directory-empty-p pkg-dir)
|
|
|
|
(delete-directory pkg-dir)
|
|
|
|
(error "Empty checkout for %s" name))
|
2023-02-16 11:11:23 +01:00
|
|
|
(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")))
|
2022-11-03 19:26:21 +01:00
|
|
|
|
2022-12-25 11:18:51 +01:00
|
|
|
;; When nothing is specified about a `lisp-dir', then should
|
|
|
|
;; heuristically check if there is a sub-directory with lisp
|
2022-12-27 20:28:05 +01:00
|
|
|
;; files. These are conventionally just called "lisp" or "src".
|
|
|
|
;; If this directory exists and contains non-zero number of lisp
|
|
|
|
;; files, we will use that instead of `pkg-dir'.
|
|
|
|
(catch 'done
|
|
|
|
(dolist (name '("lisp" "src"))
|
|
|
|
(when-let* (((null lisp-dir))
|
|
|
|
(dir (expand-file-name name pkg-dir))
|
|
|
|
((file-directory-p dir))
|
|
|
|
((directory-files dir nil "\\`[^.].+\\.el\\'" t 1)))
|
|
|
|
;; We won't use `dir', since dir is an absolute path and we
|
|
|
|
;; don't want `lisp-dir' to depend on the current location of
|
|
|
|
;; the package installation, ie. to break if moved around the
|
|
|
|
;; file system or between installations.
|
|
|
|
(throw 'done (setq lisp-dir name)))))
|
|
|
|
|
2023-03-15 09:51:14 +01:00
|
|
|
;; Ensure we have a copy of the package specification
|
2023-04-30 20:21:04 +02:00
|
|
|
(unless (seq-some (lambda (alist) (equal (alist-get name (cdr alist)) pkg-spec))
|
|
|
|
package-vc--archive-spec-alists)
|
2023-03-15 09:51:14 +01:00
|
|
|
(customize-save-variable
|
|
|
|
'package-vc-selected-packages
|
|
|
|
(cons (cons name pkg-spec)
|
|
|
|
(seq-remove (lambda (spec) (string= name (car spec)))
|
|
|
|
package-vc-selected-packages))))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(package-vc--unpack-1 pkg-desc pkg-dir)))
|
2022-07-31 21:32:38 +02:00
|
|
|
|
2022-11-06 10:24:56 +01:00
|
|
|
(defun package-vc--read-package-name (prompt &optional allow-url installed)
|
2022-11-27 15:31:29 +01:00
|
|
|
"Query the user for a VC package and return a name with PROMPT.
|
2022-11-06 10:24:56 +01:00
|
|
|
If the optional argument ALLOW-URL is non-nil, the user is also
|
|
|
|
allowed to specify a non-package name. If the optional argument
|
|
|
|
INSTALLED is non-nil, the selection will be filtered down to
|
2022-11-27 15:31:29 +01:00
|
|
|
VC packages that have already been installed."
|
2022-11-06 10:24:56 +01:00
|
|
|
(package-vc--archives-initialize)
|
|
|
|
(completing-read prompt (if installed package-alist package-archive-contents)
|
|
|
|
(if installed
|
|
|
|
(lambda (pkg) (package-vc-p (cadr pkg)))
|
|
|
|
(lambda (pkg)
|
|
|
|
(or (package-vc--desc->spec (cadr pkg))
|
|
|
|
;; If we have no explicit VC data, we can try a kind of
|
|
|
|
;; heuristic and use the URL header, that might already be
|
|
|
|
;; pointing towards a repository, and use that as a backup
|
|
|
|
(and-let* ((extras (package-desc-extras (cadr pkg)))
|
|
|
|
(url (alist-get :url extras))
|
2024-10-24 15:11:44 +03:00
|
|
|
((vc-guess-url-backend url)))))))
|
2022-11-10 19:18:00 +01:00
|
|
|
(not allow-url)))
|
2022-11-06 10:24:56 +01:00
|
|
|
|
|
|
|
(defun package-vc--read-package-desc (prompt &optional installed)
|
2022-11-27 15:31:29 +01:00
|
|
|
"Query the user for a VC package and return a description with PROMPT.
|
2022-11-06 10:24:56 +01:00
|
|
|
If the optional argument INSTALLED is non-nil, the selection will
|
2022-11-27 15:31:29 +01:00
|
|
|
be filtered down to VC packages that have already been
|
2022-11-06 10:24:56 +01:00
|
|
|
installed, and the package description will be that of an
|
|
|
|
installed package."
|
|
|
|
(cadr (assoc (package-vc--read-package-name prompt nil installed)
|
|
|
|
(if installed package-alist package-archive-contents)
|
|
|
|
#'string=)))
|
2022-08-11 10:53:11 +02:00
|
|
|
|
2022-11-17 17:39:46 +01:00
|
|
|
;;;###autoload
|
2023-04-24 02:00:54 +03:00
|
|
|
(defun package-vc-upgrade-all ()
|
2023-08-18 21:59:10 +02:00
|
|
|
"Upgrade all installed VC packages.
|
|
|
|
|
|
|
|
This may fail if the local VCS state of one of the packages
|
|
|
|
conflicts with its remote repository state."
|
2022-11-13 08:12:18 +01:00
|
|
|
(interactive)
|
|
|
|
(dolist (package package-alist)
|
|
|
|
(dolist (pkg-desc (cdr package))
|
|
|
|
(when (package-vc-p pkg-desc)
|
2023-04-24 02:00:54 +03:00
|
|
|
(package-vc-upgrade pkg-desc))))
|
|
|
|
(message "Done upgrading packages."))
|
2022-11-13 08:12:18 +01:00
|
|
|
|
2024-04-26 08:21:37 +02:00
|
|
|
(declare-function vc-dir-prepare-status-buffer "vc-dir"
|
|
|
|
(bname dir backend &optional create-new))
|
|
|
|
|
2022-11-17 17:39:46 +01:00
|
|
|
;;;###autoload
|
2023-04-24 02:00:54 +03:00
|
|
|
(defun package-vc-upgrade (pkg-desc)
|
2023-08-18 21:59:10 +02:00
|
|
|
"Upgrade the package described by PKG-DESC from package's VC repository.
|
|
|
|
|
|
|
|
This may fail if the local VCS state of the package conflicts
|
|
|
|
with the remote repository state."
|
2023-04-24 02:00:54 +03:00
|
|
|
(interactive (list (package-vc--read-package-desc "Upgrade VC package: " t)))
|
2022-11-03 19:38:34 +01:00
|
|
|
;; HACK: To run `package-vc--unpack-1' after checking out the new
|
2022-11-01 16:35:23 +01:00
|
|
|
;; revision, we insert a hook into `vc-post-command-functions', and
|
|
|
|
;; remove it right after it ran. To avoid running the hook multiple
|
|
|
|
;; times or even for the wrong repository (as `vc-pull' is often
|
|
|
|
;; asynchronous), we extract the relevant arguments using a pseudo
|
|
|
|
;; filter for `vc-filter-command-function', executed only for the
|
|
|
|
;; side effect, and store them in the lexical scope. When the hook
|
|
|
|
;; is run, we check if the arguments are the same (`eq') as the ones
|
|
|
|
;; previously extracted, and only in that case will be call
|
2022-11-03 19:38:34 +01:00
|
|
|
;; `package-vc--unpack-1'. Ugh...
|
2022-11-01 16:35:23 +01:00
|
|
|
;;
|
|
|
|
;; If there is a better way to do this, it should be done.
|
2022-11-13 08:12:18 +01:00
|
|
|
(cl-assert (package-vc-p pkg-desc))
|
2022-11-01 16:35:23 +01:00
|
|
|
(letrec ((pkg-dir (package-desc-dir pkg-desc))
|
2022-11-15 10:20:01 +01:00
|
|
|
(vc-flags)
|
2022-11-01 16:35:23 +01:00
|
|
|
(vc-filter-command-function
|
|
|
|
(lambda (command file-or-list flags)
|
2022-11-15 10:20:01 +01:00
|
|
|
(setq vc-flags flags)
|
2022-11-01 16:35:23 +01:00
|
|
|
(list command file-or-list flags)))
|
|
|
|
(post-upgrade
|
2022-11-15 10:20:01 +01:00
|
|
|
(lambda (_command _file-or-list flags)
|
|
|
|
(when (and (file-equal-p pkg-dir default-directory)
|
|
|
|
(eq flags vc-flags))
|
|
|
|
(unwind-protect
|
|
|
|
(with-demoted-errors "Failed to activate: %S"
|
|
|
|
(package-vc--unpack-1 pkg-desc pkg-dir))
|
|
|
|
(remove-hook 'vc-post-command-functions post-upgrade))))))
|
2022-11-01 16:35:23 +01:00
|
|
|
(add-hook 'vc-post-command-functions post-upgrade)
|
|
|
|
(with-demoted-errors "Failed to fetch: %S"
|
2024-04-26 08:21:37 +02:00
|
|
|
(require 'vc-dir)
|
|
|
|
(with-current-buffer (vc-dir-prepare-status-buffer
|
|
|
|
(format " *package-vc-dir: %s*" pkg-dir)
|
|
|
|
pkg-dir (vc-responsible-backend pkg-dir))
|
2022-11-15 10:20:01 +01:00
|
|
|
(vc-pull)))))
|
2022-10-12 20:26:17 +02:00
|
|
|
|
2022-10-28 20:10:30 +02:00
|
|
|
(defun package-vc--archives-initialize ()
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Initialize package.el and fetch package specifications."
|
2022-10-28 20:10:30 +02:00
|
|
|
(package--archives-initialize)
|
2022-11-03 19:38:34 +01:00
|
|
|
(unless package-vc--archive-data-alist
|
2022-10-28 20:10:30 +02:00
|
|
|
(package-vc--download-and-read-archives)))
|
|
|
|
|
2022-11-03 19:38:34 +01:00
|
|
|
(defun package-vc--release-rev (pkg-desc)
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Return the latest revision that bumps the \"Version\" tag for PKG-DESC.
|
2022-10-30 11:43:11 +01:00
|
|
|
If no such revision can be found, return nil."
|
2022-11-03 19:38:34 +01:00
|
|
|
(with-current-buffer (find-file-noselect (package-vc--main-file pkg-desc))
|
2022-10-30 11:43:11 +01:00
|
|
|
(vc-buffer-sync)
|
|
|
|
(save-excursion
|
|
|
|
(goto-char (point-min))
|
|
|
|
(let ((case-fold-search t))
|
2022-10-30 14:43:10 +01:00
|
|
|
(when (cond
|
|
|
|
((re-search-forward
|
|
|
|
(concat (lm-get-header-re "package-version") ".*$")
|
|
|
|
(lm-code-start) t))
|
|
|
|
((re-search-forward
|
|
|
|
(concat (lm-get-header-re "version") ".*$")
|
|
|
|
(lm-code-start) t)))
|
2022-10-30 11:43:11 +01:00
|
|
|
(ignore-error vc-not-supported
|
|
|
|
(vc-call-backend (vc-backend (buffer-file-name))
|
|
|
|
'last-change
|
2022-10-30 16:52:08 +01:00
|
|
|
(buffer-file-name)
|
|
|
|
(line-number-at-pos nil t))))))))
|
2022-10-30 11:43:11 +01:00
|
|
|
|
2022-08-12 17:02:20 +02:00
|
|
|
;;;###autoload
|
2022-12-25 09:53:07 +01:00
|
|
|
(defun package-vc-install (package &optional rev backend name)
|
2023-08-18 21:59:10 +02:00
|
|
|
"Fetch a package described by PACKAGE and set it up for use with Emacs.
|
|
|
|
|
|
|
|
PACKAGE specifies which package to install, where to find its
|
|
|
|
source repository and how to build it.
|
|
|
|
|
|
|
|
If PACKAGE is a symbol, install the package with that name
|
|
|
|
according to metadata that package archives provide for it. This
|
|
|
|
is the simplest way to call this function, but it only works if
|
|
|
|
the package you want to install is listed in a package archive
|
|
|
|
you have configured.
|
|
|
|
|
|
|
|
If PACKAGE is a string, it specifies the URL of the package
|
|
|
|
repository. In this case, optional argument BACKEND specifies
|
|
|
|
the VC backend to use for cloning the repository; if it's nil,
|
|
|
|
this function tries to infer which backend to use according to
|
2024-10-24 21:15:28 +08:00
|
|
|
the value of `vc-clone-heuristic-alist' and if that fails it
|
2023-08-18 21:59:10 +02:00
|
|
|
uses `package-vc-default-backend'. Optional argument NAME
|
|
|
|
specifies the package name in this case; if it's nil, this
|
|
|
|
package uses `file-name-base' on the URL to obtain the package
|
|
|
|
name, otherwise NAME is the package name as a symbol.
|
|
|
|
|
|
|
|
PACKAGE can also be a cons cell (PNAME . SPEC) where PNAME is the
|
2023-12-10 13:22:04 +01:00
|
|
|
package name as a symbol, and SPEC is a plist that specifies how
|
2023-08-18 21:59:10 +02:00
|
|
|
to fetch and build the package. For possible values, see the
|
|
|
|
subsection \"Specifying Package Sources\" in the Info
|
|
|
|
node `(emacs)Fetching Package Sources'.
|
2022-11-15 20:05:33 +01:00
|
|
|
|
2023-05-06 20:51:39 +02:00
|
|
|
By default, this function installs the last revision of the
|
|
|
|
package available from its repository. If REV is a string, it
|
2023-08-18 21:59:10 +02:00
|
|
|
describes the revision to install, as interpreted by the relevant
|
|
|
|
VC backend. The special value `:last-release' (interactively,
|
|
|
|
the prefix argument), says to use the commit of the latest
|
|
|
|
release, if it exists. The last release is the latest revision
|
|
|
|
which changed the \"Version:\" header of the package's main Lisp
|
|
|
|
file.
|
|
|
|
|
|
|
|
If you use this function to install a package that you also have
|
|
|
|
installed from a package archive, the version this function
|
|
|
|
installs takes precedence."
|
2022-07-31 21:32:38 +02:00
|
|
|
(interactive
|
|
|
|
(progn
|
|
|
|
;; Initialize the package system to get the list of package
|
|
|
|
;; symbols for completion.
|
2022-10-28 20:10:30 +02:00
|
|
|
(package-vc--archives-initialize)
|
2022-11-06 10:24:56 +01:00
|
|
|
(let* ((name-or-url (package-vc--read-package-name
|
|
|
|
"Fetch and install package: " t))
|
2023-01-11 09:27:01 +01:00
|
|
|
(name (file-name-base (directory-file-name name-or-url))))
|
|
|
|
(when (string-empty-p name)
|
|
|
|
(user-error "Empty package name"))
|
2022-12-25 09:53:07 +01:00
|
|
|
(list name-or-url
|
|
|
|
(and current-prefix-arg :last-release)
|
|
|
|
nil
|
|
|
|
(intern (string-remove-prefix "emacs-" name))))))
|
2022-10-28 20:10:30 +02:00
|
|
|
(package-vc--archives-initialize)
|
2022-10-18 22:34:11 +02:00
|
|
|
(cond
|
2022-11-15 20:05:33 +01:00
|
|
|
((null package)
|
2022-11-12 09:18:19 +01:00
|
|
|
(signal 'wrong-type-argument nil))
|
2022-11-15 20:05:33 +01:00
|
|
|
((consp package)
|
|
|
|
(package-vc--unpack
|
|
|
|
(package-desc-create :name (car package)
|
|
|
|
:kind 'vc)
|
|
|
|
(cdr package)
|
|
|
|
rev))
|
|
|
|
((and-let* (((stringp package))
|
2024-10-24 15:11:44 +03:00
|
|
|
(backend (or backend (vc-guess-url-backend package))))
|
2022-11-03 19:38:34 +01:00
|
|
|
(package-vc--unpack
|
2022-07-31 21:32:38 +02:00
|
|
|
(package-desc-create
|
2022-11-15 20:05:33 +01:00
|
|
|
:name (or name (intern (file-name-base package)))
|
2022-10-18 22:34:11 +02:00
|
|
|
:kind 'vc)
|
2022-11-15 20:05:33 +01:00
|
|
|
(list :vc-backend backend :url package)
|
2022-10-18 22:34:11 +02:00
|
|
|
rev)))
|
2022-11-15 20:05:33 +01:00
|
|
|
((and-let* ((desc (assoc package package-archive-contents #'string=)))
|
2022-11-03 19:38:34 +01:00
|
|
|
(package-vc--unpack
|
2023-02-22 15:23:43 +01:00
|
|
|
(cadr desc)
|
2022-11-03 19:38:34 +01:00
|
|
|
(or (package-vc--desc->spec (cadr desc))
|
2022-10-30 11:43:11 +01:00
|
|
|
(and-let* ((extras (package-desc-extras (cadr desc)))
|
|
|
|
(url (alist-get :url extras))
|
2024-10-24 15:11:44 +03:00
|
|
|
(backend (vc-guess-url-backend url)))
|
2022-10-30 11:43:11 +01:00
|
|
|
(list :vc-backend backend :url url))
|
2022-11-15 20:05:33 +01:00
|
|
|
(user-error "Package `%s' has no VC data" package))
|
2022-10-18 22:34:11 +02:00
|
|
|
rev)))
|
2022-11-15 20:05:33 +01:00
|
|
|
((user-error "Unknown package to fetch: %s" package))))
|
2022-07-31 21:32:38 +02:00
|
|
|
|
2022-11-03 23:15:12 +01:00
|
|
|
;;;###autoload
|
2022-11-03 19:26:21 +01:00
|
|
|
(defun package-vc-checkout (pkg-desc directory &optional rev)
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
"Clone the sources for PKG-DESC into DIRECTORY and visit that directory.
|
|
|
|
Unlike `package-vc-install', this does not yet set up the package
|
2022-12-09 19:49:44 +01:00
|
|
|
for use with Emacs; use `package-vc-install-from-checkout' for
|
|
|
|
setting the package up after this function finishes. Optional
|
|
|
|
argument REV means to clone a specific version of the package; it
|
|
|
|
defaults to the last version available from the package's
|
|
|
|
repository. If REV has the special value
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
`:last-release' (interactively, the prefix argument), that stands
|
|
|
|
for the last released version of the package."
|
2022-11-03 19:26:21 +01:00
|
|
|
(interactive
|
2022-11-06 10:24:56 +01:00
|
|
|
(let* ((name (package-vc--read-package-name "Fetch package source: ")))
|
|
|
|
(list (cadr (assoc name package-archive-contents #'string=))
|
2024-01-30 00:52:39 -08:00
|
|
|
(read-directory-name "Clone into new or empty directory: " nil nil
|
|
|
|
(lambda (dir) (or (not (file-exists-p dir))
|
2022-11-06 10:24:56 +01:00
|
|
|
(directory-empty-p dir))))
|
|
|
|
(and current-prefix-arg :last-release))))
|
2022-11-03 19:26:21 +01:00
|
|
|
(package-vc--archives-initialize)
|
2022-11-03 19:38:34 +01:00
|
|
|
(let ((pkg-spec (or (package-vc--desc->spec pkg-desc)
|
2022-11-03 19:26:21 +01:00
|
|
|
(and-let* ((extras (package-desc-extras pkg-desc))
|
|
|
|
(url (alist-get :url extras))
|
2024-10-24 15:11:44 +03:00
|
|
|
(backend (vc-guess-url-backend url)))
|
2022-11-03 19:26:21 +01:00
|
|
|
(list :vc-backend backend :url url))
|
2022-11-13 08:17:07 +01:00
|
|
|
(user-error "Package `%s' has no VC data"
|
|
|
|
(package-desc-name pkg-desc)))))
|
2022-11-03 19:38:34 +01:00
|
|
|
(package-vc--clone pkg-desc pkg-spec directory rev)
|
2022-11-03 19:26:21 +01:00
|
|
|
(find-file directory)))
|
|
|
|
|
2022-11-03 23:15:12 +01:00
|
|
|
;;;###autoload
|
2023-10-08 23:29:23 +02:00
|
|
|
(defun package-vc-install-from-checkout (dir &optional name)
|
2023-08-18 21:59:10 +02:00
|
|
|
"Install the package NAME from its source directory DIR.
|
2023-10-08 23:29:23 +02:00
|
|
|
NAME defaults to the base name of DIR.
|
; Fix documentation of package-vc.el
* lisp/emacs-lisp/package-vc.el (package-vc-default-backend)
(package-vc-selected-packages, package-vc--archive-spec-alist)
(package-vc--archive-data-alist, package-vc--query-spec)
(package-vc--read-archive-data, package-vc-commit)
(package-vc--main-file, package-vc--generate-description-file)
(package-vc--build-documentation, package-vc--unpack-1)
(package-vc--guess-backend, package-vc--clone)
(package-vc--unpack, package-vc-update, package-vc--release-rev)
(package-vc-install, package-vc-checkout)
(package-vc-link-directory, package-vc-refresh)
(package-vc-prepare-patch, package-vc--archives-initialize): Doc fixes.
2022-11-05 13:11:28 +02:00
|
|
|
Interactively, prompt the user for DIR, which should be a directory
|
|
|
|
under version control, typically one created by `package-vc-checkout'.
|
|
|
|
If invoked interactively with a prefix argument, prompt the user
|
2023-10-08 23:29:23 +02:00
|
|
|
for the NAME of the package to set up."
|
|
|
|
(interactive (let* ((dir (read-directory-name "Directory: "))
|
|
|
|
(base (file-name-base (directory-file-name dir))))
|
|
|
|
(list dir (and current-prefix-arg
|
|
|
|
(read-string
|
|
|
|
(format-prompt "Package name" base)
|
|
|
|
nil nil base)))))
|
2022-10-12 16:09:25 +02:00
|
|
|
(unless (vc-responsible-backend dir)
|
|
|
|
(user-error "Directory %S is not under version control" dir))
|
2022-10-28 20:10:30 +02:00
|
|
|
(package-vc--archives-initialize)
|
2022-10-20 21:45:17 +02:00
|
|
|
(let* ((name (or name (file-name-base (directory-file-name dir))))
|
2022-10-12 16:09:25 +02:00
|
|
|
(pkg-dir (expand-file-name name package-user-dir)))
|
2022-12-09 19:54:25 +01:00
|
|
|
(when (file-exists-p pkg-dir)
|
|
|
|
(if (yes-or-no-p (format "Overwrite previous checkout for package `%s'?" name))
|
|
|
|
(package--delete-directory pkg-dir)
|
|
|
|
(error "There already exists a checkout for %s" name)))
|
2022-11-16 10:28:14 +01:00
|
|
|
(make-symbolic-link (expand-file-name dir) pkg-dir)
|
|
|
|
(package-vc--unpack-1
|
|
|
|
(package-desc-create
|
|
|
|
:name (intern name)
|
2022-12-15 18:21:24 +01:00
|
|
|
:dir pkg-dir
|
2022-11-16 10:28:14 +01:00
|
|
|
:kind 'vc)
|
|
|
|
(file-name-as-directory pkg-dir))))
|
2022-10-12 16:09:25 +02:00
|
|
|
|
2022-11-03 23:15:12 +01:00
|
|
|
;;;###autoload
|
2022-11-13 00:59:35 +01:00
|
|
|
(defun package-vc-rebuild (pkg-desc)
|
|
|
|
"Rebuild the installation for package given by PKG-DESC.
|
|
|
|
Rebuilding an installation means scraping for new autoload
|
|
|
|
cookies, re-compiling Emacs Lisp files, building and installing
|
|
|
|
any documentation, downloading any missing dependencies. This
|
|
|
|
command does not fetch new revisions from a remote server. That
|
2023-04-24 02:00:54 +03:00
|
|
|
is the responsibility of `package-vc-upgrade'. Interactively,
|
2022-11-13 00:59:35 +01:00
|
|
|
prompt for the name of the package to rebuild."
|
|
|
|
(interactive (list (package-vc--read-package-desc "Rebuild package: " t)))
|
2022-11-03 19:38:34 +01:00
|
|
|
(package-vc--unpack-1 pkg-desc (package-desc-dir pkg-desc)))
|
2022-10-12 21:21:38 +02:00
|
|
|
|
2022-10-08 18:22:03 +02:00
|
|
|
;;;###autoload
|
2022-11-13 17:05:20 +01:00
|
|
|
(defun package-vc-prepare-patch (pkg-desc subject revisions)
|
2023-08-18 21:59:10 +02:00
|
|
|
"Email patches for REVISIONS to maintainer of package PKG-DESC using SUBJECT.
|
|
|
|
|
|
|
|
PKG-DESC is a package descriptor and SUBJECT is the subject of
|
|
|
|
the message.
|
|
|
|
|
2022-11-13 17:05:20 +01:00
|
|
|
Interactively, prompt for PKG-DESC, SUBJECT, and REVISIONS. When
|
|
|
|
invoked with a numerical prefix argument, use the last N
|
|
|
|
revisions. When invoked interactively in a Log View buffer with
|
2023-08-18 21:59:10 +02:00
|
|
|
marked revisions, use those.
|
|
|
|
|
|
|
|
See also `vc-prepare-patch'."
|
2022-10-07 18:57:00 +02:00
|
|
|
(interactive
|
2022-11-06 10:24:56 +01:00
|
|
|
(list (package-vc--read-package-desc "Package to prepare a patch for: " t)
|
2022-10-07 18:57:00 +02:00
|
|
|
(and (not vc-prepare-patches-separately)
|
|
|
|
(read-string "Subject: " "[PATCH] " nil nil t))
|
2022-11-13 17:05:20 +01:00
|
|
|
(vc-prepare-patch-prompt-revisions)))
|
2022-11-16 10:46:43 +01:00
|
|
|
(let ((default-directory (package-desc-dir pkg-desc)))
|
|
|
|
(vc-prepare-patch (package-maintainers pkg-desc t)
|
|
|
|
subject revisions)))
|
2022-10-07 18:57:00 +02:00
|
|
|
|
2024-06-09 12:39:47 +02:00
|
|
|
(defun package-vc-log-incoming (pkg-desc)
|
|
|
|
"Call `vc-log-incoming' for the package PKG-DESC."
|
|
|
|
(interactive
|
|
|
|
(list (package-vc--read-package-desc "Incoming log for package: " t)))
|
|
|
|
(let ((default-directory (package-desc-dir pkg-desc)))
|
|
|
|
(call-interactively #'vc-log-incoming)))
|
|
|
|
|
2022-07-31 21:32:38 +02:00
|
|
|
(provide 'package-vc)
|
|
|
|
;;; package-vc.el ends here
|