[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 2624d1e: * admin/archive-contents.el: Use `git worktree` f
From: |
Stefan Monnier |
Subject: |
[elpa] master 2624d1e: * admin/archive-contents.el: Use `git worktree` for externals |
Date: |
Sun, 23 Apr 2017 14:04:19 -0400 (EDT) |
branch: master
commit 2624d1e30fd3744d30ef928343f557f6a898fb2b
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
* admin/archive-contents.el: Use `git worktree` for externals
* admin/archive-contents.el (archive--use-worktree): New var.
(archive--use-worktree-p): New function.
(archive--external-package-sync): Use it to use `git worktree`
when available.
(archive--external-package-sync): Don't `git fetch` if this is a worktree.
Shorten the output when it's a single line.
---
admin/archive-contents.el | 40 +++++++++++++++++++++++++++++++---------
1 file changed, 31 insertions(+), 9 deletions(-)
diff --git a/admin/archive-contents.el b/admin/archive-contents.el
index af156b9..322eef9 100644
--- a/admin/archive-contents.el
+++ b/admin/archive-contents.el
@@ -607,9 +607,19 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
(defun archive--pull (dirname)
(let ((default-directory (archive--dirname dirname)))
(with-temp-buffer
- (message "Running git pull in %S" default-directory)
- (archive-call t "git" "pull")
- (message "Updated %s:\n%s" dirname (buffer-string)))))
+ (cond
+ ((file-directory-p ".git")
+ (message "Running git pull in %S" default-directory)
+ (archive-call t "git" "pull"))
+ ((file-exists-p ".git")
+ (message "Updating worktree in %S" default-directory)
+ (archive-call t "git" "merge"))
+ (t (error "No .git in %S" default-directory)))
+ (message "Updated %s:%s%s" dirname
+ (if (and (eobp) (bolp)
+ (eq (line-beginning-position 0) (point-min)))
+ " " "\n")
+ (buffer-string)))))
;;; Maintain external packages.
@@ -688,6 +698,15 @@ If WITH-CORE is non-nil, it means we manage :core packages
as well."
;; (delete-directory dir 'recursive t))))
)))))
+(defvar archive--use-worktree nil)
+(defun archive--use-worktree-p ()
+ (unless archive--use-worktree
+ (setq archive--use-worktree
+ (list
+ (ignore-errors
+ (zerop (call-process "git" nil nil nil "worktree" "--help"))))))
+ (car archive--use-worktree))
+
(defun archive--external-package-sync (name)
"Sync external package named NAME."
(let ((default-directory (expand-file-name "packages/")))
@@ -695,14 +714,17 @@ If WITH-CORE is non-nil, it means we manage :core
packages as well."
(let* ((branch (concat "externals/" name))
(output
(with-temp-buffer
- ;; FIXME: Use `git worktree'!
- (archive-call t "git" "clone"
- "--reference" ".." "--single-branch"
- "--branch" branch
- archive--elpa-git-url name)
+ (if (archive--use-worktree-p)
+ (archive-call t "git" "worktree" "add"
+ "-b" branch
+ name (concat "origin/" branch))
+ (archive-call t "git" "clone"
+ "--reference" ".." "--single-branch"
+ "--branch" branch
+ archive--elpa-git-url name))
(buffer-string))))
(message "Cloning branch %s:\n%s" name output)))
- ((not (file-directory-p (concat name "/.git")))
+ ((not (file-exists-p (concat name "/.git")))
(message "%s is in the way of an external, please remove!" name))
(t (archive--pull name)))))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] master 2624d1e: * admin/archive-contents.el: Use `git worktree` for externals,
Stefan Monnier <=