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

Reply via email to