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...")))))