branch: elpa/magit
commit 50555dbc17990b6fdbad50cac3648ce271aff2ab
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>
magit-read-worktree-directory-offsite: New function
---
lisp/magit-worktree.el | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/lisp/magit-worktree.el b/lisp/magit-worktree.el
index 88ebcf6bb2c..0ea53920b0f 100644
--- a/lisp/magit-worktree.el
+++ b/lisp/magit-worktree.el
@@ -41,8 +41,18 @@ second argument."
:type `(radio (function-item ,#'magit-read-worktree-directory)
(function-item ,#'magit-read-worktree-directory-nested)
(function-item ,#'magit-read-worktree-directory-sibling)
+ (function-item ,#'magit-read-worktree-directory-offsite)
function))
+(defcustom magit-read-worktree-offsite-directory
+ (expand-file-name "wtrees/" (or (getenv "XDG_DATA_HOME") "~/.local/share"))
+ "Base directory used by `magit-read-worktree-directory-offsite'.
+That function is suitable as `magit-read-worktree-directory-function',
+but is not used by default."
+ :package-version '(magit . "4.3.9")
+ :group 'magit-commands
+ :type 'directory)
+
(defvar magit-worktree-read-directory-name-function nil
"Like `magit-read-worktree-directory-function' but takes only one argument.")
(make-obsolete-variable 'magit-worktree-read-directory-name-function
@@ -80,6 +90,31 @@ just \"PREFIX_\". Always forward PROMPT as-is."
"_"
(and branch (string-replace "/" "-" branch))))))
+(defun magit-read-worktree-directory-offsite (prompt branch)
+ "Call `read-directory-name' in a directory shared by all repositories.
+
+Option `magit-read-worktree-offsite-directory' specifies that shared
+base directory.
+
+For `read-directory-name's INITIAL argument use a string based on the
+name of the current worktree and BRANCH. Use \"PREFIX_BRANCH\" where
+PREFIX is the name of the current worktree, up to the first underscore,
+and slashes in BRANCH are replaced with dashes. If BRANCH is nil use
+just \"PREFIX_\". Always forward PROMPT as-is."
+ (mkdir magit-read-worktree-offsite-directory t)
+ (read-directory-name
+ prompt magit-read-worktree-offsite-directory nil nil
+ (let* ((name (file-name-nondirectory (directory-file-name
default-directory)))
+ (name (if (string-match "_" name)
+ (substring name 0 (match-beginning 0))
+ name))
+ (name (concat name "_")))
+ (if branch
+ (concat name (string-replace "/" "-" branch))
+ (file-name-nondirectory
+ (make-temp-name
+ (expand-file-name name magit-read-worktree-offsite-directory)))))))
+
(defun magit--read-worktree-directory (rev branchp)
(let ((default-directory (magit-toplevel))
(prompt (format "Checkout %s in new worktree: " rev)))