branch: elpa/git-commit
commit 2ddb7ca45e52ac43762ac769b4a50b92c67f9d21
Author: Jonas Bernoulli <jo...@bernoul.li>
Commit: Jonas Bernoulli <jo...@bernoul.li>

    Mark async branch and checkout commands for interactive use only
    
    Also fix `magit-stash-branch-here', which broke when we made these
    commands asynchronous in [1: 25dbf32d86].
    
    Closes #4945.
    
    1: 2023-04-24 25dbf32d86eaf1ccb7b652b2de392d749c4c2186
       Perform checkouts asynchronously
---
 docs/magit.org       | 11 ++++++-----
 docs/magit.texi      | 11 ++++++-----
 lisp/magit-branch.el | 25 ++++++++++++++++++++-----
 lisp/magit-extras.el |  2 +-
 lisp/magit-stash.el  | 15 +++++++++------
 5 files changed, 42 insertions(+), 22 deletions(-)

diff --git a/docs/magit.org b/docs/magit.org
index 0b172e5e06..d58d3a8fae 100644
--- a/docs/magit.org
+++ b/docs/magit.org
@@ -6372,14 +6372,15 @@ Also see [[man:git-stash]]
 
 - Key: z b (magit-stash-branch) ::
 
-  Create and checkout a new BRANCH from STASH.  The branch starts at
-  the commit that was current when the stash was created.
+  Create and checkout a new branch from an existing stash.  The new
+  branch starts at the commit that was current when the stash was
+  created.
 
 - Key: z B (magit-stash-branch-here) ::
 
-  Create and checkout a new BRANCH using ~magit-branch~ with the current
-  branch or ~HEAD~ as the starting-point.  Then apply STASH, dropping it
-  if it applies cleanly.
+  Create and checkout a new branch from an existing stash.  Use the
+  current branch or ~HEAD~ as the starting-point of the new branch.
+  Then apply the stash, dropping it if it applies cleanly.
 
 - Key: z f (magit-stash-format-patch) ::
 
diff --git a/docs/magit.texi b/docs/magit.texi
index a242f7ea01..f54b1a7af1 100644
--- a/docs/magit.texi
+++ b/docs/magit.texi
@@ -7851,15 +7851,16 @@ Show all diffs of a stash in a buffer.
 @item @kbd{z b} (@code{magit-stash-branch})
 @kindex z b
 @findex magit-stash-branch
-Create and checkout a new BRANCH from STASH@.  The branch starts at
-the commit that was current when the stash was created.
+Create and checkout a new branch from an existing stash.  The new
+branch starts at the commit that was current when the stash was
+created.
 
 @item @kbd{z B} (@code{magit-stash-branch-here})
 @kindex z B
 @findex magit-stash-branch-here
-Create and checkout a new BRANCH using @code{magit-branch} with the current
-branch or @code{HEAD} as the starting-point.  Then apply STASH, dropping it
-if it applies cleanly.
+Create and checkout a new branch from an existing stash.  Use the
+current branch or @code{HEAD} as the starting-point of the new branch.
+Then apply the stash, dropping it if it applies cleanly.
 
 @item @kbd{z f} (@code{magit-stash-format-patch})
 @kindex z f
diff --git a/lisp/magit-branch.el b/lisp/magit-branch.el
index 98b66e3647..27b819117d 100644
--- a/lisp/magit-branch.el
+++ b/lisp/magit-branch.el
@@ -254,15 +254,22 @@ branch.  If it is something else, then `HEAD' becomes 
detached.
 Checkout fails if the working tree or the staging area contain
 changes.
 \n(git checkout REVISION)."
+  (declare (interactive-only magit--checkout))
   (interactive (list (magit-read-other-branch-or-commit "Checkout")
                      (magit-branch-arguments)))
   (when (string-match "\\`heads/\\(.+\\)" revision)
     (setq revision (match-string 1 revision)))
   (magit-run-git-async "checkout" args revision))
 
+(defun magit--checkout (revision &optional args)
+  (when (string-match "\\`heads/\\(.+\\)" revision)
+    (setq revision (match-string 1 revision)))
+  (magit-call-git "checkout" args revision))
+
 ;;;###autoload
 (defun magit-branch-create (branch start-point)
   "Create BRANCH at branch or revision START-POINT."
+  (declare (interactive-only magit-call-git))
   (interactive (magit-branch-read-args "Create branch"))
   (magit-run-git-async "branch" branch start-point)
   (set-process-sentinel
@@ -275,6 +282,7 @@ changes.
 ;;;###autoload
 (defun magit-branch-and-checkout (branch start-point &optional args)
   "Create and checkout BRANCH at branch or revision START-POINT."
+  (declare (interactive-only magit-call-git))
   (interactive (append (magit-branch-read-args "Create and checkout branch")
                        (list (magit-branch-arguments))))
   (if (string-match-p "^stash@{[0-9]+}$" start-point)
@@ -299,6 +307,7 @@ Otherwise create and checkout a new branch using the input 
as
 its name.  Before doing so read the starting-point for the new
 branch.  This is similar to what `magit-branch-and-checkout'
 does."
+  (declare (interactive-only magit-call-git))
   (interactive
    (let ((arg (magit-read-other-branch-or-commit "Checkout")))
      (list arg
@@ -307,8 +316,10 @@ does."
   (when (string-match "\\`heads/\\(.+\\)" arg)
     (setq arg (match-string 1 arg)))
   (if start-point
-      (magit-branch-and-checkout arg start-point)
-    (magit-checkout arg)))
+      (with-suppressed-warnings ((interactive-only magit-branch-and-checkout))
+        (magit-branch-and-checkout arg start-point))
+    (magit--checkout arg)
+    (magit-refresh)))
 
 ;;;###autoload
 (defun magit-branch-checkout (branch &optional start-point)
@@ -334,6 +345,7 @@ In the latter two cases the upstream is also set.  Whether 
it is
 set to the chosen START-POINT or something else depends on the
 value of `magit-branch-adjust-remote-upstream-alist', just like
 when using `magit-branch-and-checkout'."
+  (declare (interactive-only magit-call-git))
   (interactive
    (let* ((current (magit-get-current-branch))
           (local   (magit-list-local-branch-names))
@@ -359,8 +371,11 @@ when using `magit-branch-and-checkout'."
             (list choice))
            (t
             (list choice (magit-read-starting-point "Create" choice))))))
-  (if (not start-point)
-      (magit-checkout branch (magit-branch-arguments))
+  (cond
+   ((not start-point)
+    (magit--checkout branch (magit-branch-arguments))
+    (magit-refresh))
+   (t
     (when (magit-anything-modified-p t)
       (user-error "Cannot checkout when there are uncommitted changes"))
     (magit-run-git-async "checkout" (magit-branch-arguments)
@@ -376,7 +391,7 @@ when using `magit-branch-and-checkout'."
              (when (and (equal branch remote-branch)
                         (not (equal remote (magit-get "remote.pushDefault"))))
                (magit-set remote "branch" branch "pushRemote"))))
-         (magit-process-sentinel process event))))))
+         (magit-process-sentinel process event)))))))
 
 (defun magit-branch-maybe-adjust-upstream (branch start-point)
   (--when-let
diff --git a/lisp/magit-extras.el b/lisp/magit-extras.el
index a879520954..2f938c81aa 100644
--- a/lisp/magit-extras.el
+++ b/lisp/magit-extras.el
@@ -468,7 +468,7 @@ points at it) otherwise."
         (if rebase
             (let ((magit--rebase-published-symbol 'edit-published))
               (magit-rebase-edit-commit rev (magit-rebase-arguments)))
-          (magit-checkout (or (magit-rev-branch rev) rev)))
+          (magit--checkout (or (magit-rev-branch rev) rev)))
         (unless (and buffer-file-name
                      (file-equal-p file buffer-file-name))
           (let ((blame-type (and magit-blame-mode magit-blame-type)))
diff --git a/lisp/magit-stash.el b/lisp/magit-stash.el
index f471e27f41..c3efef167a 100644
--- a/lisp/magit-stash.el
+++ b/lisp/magit-stash.el
@@ -282,20 +282,23 @@ When the region is active offer to drop all contained 
stashes."
 
 ;;;###autoload
 (defun magit-stash-branch (stash branch)
-  "Create and checkout a new BRANCH from STASH."
+  "Create and checkout a new BRANCH from an existing STASH.
+The new branch starts at the commit that was current when the
+stash was created.  If the stash applies cleanly, then drop it."
   (interactive (list (magit-read-stash "Branch stash")
                      (magit-read-string-ns "Branch name")))
   (magit-run-git "stash" "branch" branch stash))
 
 ;;;###autoload
 (defun magit-stash-branch-here (stash branch)
-  "Create and checkout a new BRANCH and apply STASH.
-The branch is created using `magit-branch-and-checkout', using the
-current branch or `HEAD' as the start-point."
+  "Create and checkout a new BRANCH from an existing STASH.
+Use the current branch or `HEAD' as the starting-point of BRANCH.
+Then apply STASH, dropping it if it applies cleanly."
   (interactive (list (magit-read-stash "Branch stash")
                      (magit-read-string-ns "Branch name")))
-  (let ((magit-inhibit-refresh t))
-    (magit-branch-and-checkout branch (or (magit-get-current-branch) "HEAD")))
+  (let ((start-point (or (magit-get-current-branch) "HEAD")))
+    (magit-call-git "checkout" "-b" branch start-point)
+    (magit-branch-maybe-adjust-upstream branch start-point))
   (magit-stash-apply stash))
 
 ;;;###autoload

Reply via email to