Function: package-vc--clone
package-vc--clone is a byte-compiled function defined in
package-vc.el.gz.
Signature
(package-vc--clone PKG-DESC PKG-SPEC DIR REV)
Documentation
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.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/package-vc.el.gz
(defun package-vc--clone (pkg-desc pkg-spec dir rev)
"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."
(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)
(vc-guess-url-backend url)
(plist-get (alist-get (package-desc-archive pkg-desc)
package-vc--archive-data-alist
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))))
(when package-vc-register-as-project
(let ((default-directory dir))
(require 'project)
(project-remember-projects-under dir)))
;; Check out the latest release if requested
(when (eq rev :last-release)
(if-let* ((release-rev (package-vc--release-rev pkg-desc)))
(vc-retrieve-tag dir release-rev)
(message "No release revision was found, continuing...")))))