branch: elpa/git-commit
commit fbb32ee30fbfbf9dc081187aab9931cfcf55f5d5
Author: Kyle Meyer <[email protected]>
Commit: Kyle Meyer <[email protected]>
magit-insert-am-sequence: Account for already applied patches
magit-insert-am-sequence inserts a section for all patches in
$GIT_DIR/rebase-apply/ and then displays ORIG_HEAD through HEAD via
magit-sequence-insert-sequence. If the 'git am' call fails to apply a
patch, this leads to repeated sections for successfully applied
patches because Git leaves the patch files around after successfully
applying a patch.
Avoid the repeated sections by explicitly inserting a section only for
$GIT_DIR/rebase-apply/ patches that have not been applied, leaving the
rest to the magit-sequence-insert-sequence call.
Closes #5024.
---
docs/RelNotes/4.0.0.org | 4 ++++
lisp/magit-sequence.el | 27 +++++++++++++++++----------
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/docs/RelNotes/4.0.0.org b/docs/RelNotes/4.0.0.org
index 3ba3e65032..2af6261f64 100644
--- a/docs/RelNotes/4.0.0.org
+++ b/docs/RelNotes/4.0.0.org
@@ -223,6 +223,10 @@ f9ae2a6306 #4620 magit-blame--make-highlight-overlay: Add
only to intended line
mode change and point is on the file or the mode change section.
#4623
+- If applying a patch series with ~git am~ failed, the status buffer
+ incorrectly repeated already applied patches in the list of
+ remaining patches. #5024
+
10b5407131 magit-diff-highlight-list: Ensure delayed highlighting takes place
b32521d543 magit-ediff-read-files: Handle renames in one-file logs
94aca04dc8 magit-module-section: Use correct keymap
diff --git a/lisp/magit-sequence.el b/lisp/magit-sequence.el
index 2b210a5716..5a8b66b4d3 100644
--- a/lisp/magit-sequence.el
+++ b/lisp/magit-sequence.el
@@ -914,24 +914,31 @@ If no such sequence is in progress, do nothing."
(when (magit-am-in-progress-p)
(magit-insert-section (rebase-sequence)
(magit-insert-heading "Applying patches")
- (let ((patches (nreverse (magit-rebase-patches)))
- patch commit)
- (while patches
+ (let* ((patches (nreverse (magit-rebase-patches)))
+ (dir (expand-file-name "rebase-apply" (magit-gitdir)))
+ (i (string-to-number
+ (magit-file-line (expand-file-name "last" dir))))
+ (cur (string-to-number
+ (magit-file-line (expand-file-name "next" dir))))
+ patch commit)
+ (while (and patches (>= i cur))
(setq patch (pop patches))
(setq commit (magit-commit-p
(cadr (split-string (magit-file-line patch)))))
- (cond ((and commit patches)
+ (cond ((and commit (= i cur))
(magit-sequence-insert-commit
- "pick" commit 'magit-sequence-pick))
- (patches
+ "stop" commit 'magit-sequence-stop))
+ ((= i cur)
(magit-sequence-insert-am-patch
- "pick" patch 'magit-sequence-pick))
+ "stop" patch 'magit-sequence-stop))
(commit
- (magit-sequence-insert-sequence commit "ORIG_HEAD"))
+ (magit-sequence-insert-commit
+ "pick" commit 'magit-sequence-pick))
(t
(magit-sequence-insert-am-patch
- "stop" patch 'magit-sequence-stop)
- (magit-sequence-insert-sequence nil "ORIG_HEAD")))))
+ "pick" patch 'magit-sequence-pick)))
+ (cl-decf i)))
+ (magit-sequence-insert-sequence nil "ORIG_HEAD")
(insert ?\n))))
(defun magit-sequence-insert-am-patch (type patch face)