Show number of commits being rebased interactively
A message that is not in the archive (sent off-list or not yet received): md5:H/n6RCGs7zvP8Sp7z7ElnQ==
PATCH 1/1 Show number of commits being rebased interactively
Hi again,
oops, I realized that my MUA mangled the patch, even though it shouldn't. Here it is again, with a bit more description.
---
During 'rebase -i', one wrong edit in a long rebase session might inadvertently drop commits. This change shows the total number of commits in the comments below the commit list. After the rebase edit, the number can be quickly compared to the line number of the last commit - by scrolling to the last entry in the rebase TODO list. This gives peace of mind that no commits have been lost in the edit.
--- git-rebase--interactive.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
git-rebase--interactive.sh +3 -1
@@ -1031,9 +1031,11 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" +commitcount=$(git stripspace --strip-comments <"$todo" | wc -l) + cat >>"$todo" <<EOF -$comment_char Rebase $shortrevisions onto $shortonto +$comment_char Rebase $shortrevisions onto $shortonto ($commitcount commit(s)) EOF append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF
Signature · 1 line
2.2.0.rc1.1.gbab0d06
I see nobody commented on this, which probably fell into cracks. Even though I am personally not very interested, I obviously am not the only user of Git, and there may be others who are interested in a change like this.
Quoted 5 lines · Onno Kortmann
Hi again,
oops, I realized that my MUA mangled the patch, even though it shouldn't. Here it is again, with a bit more description.
---
These lines above "---" will become the only log message text, which is probably not what you intended. Use "-- >8 --" marker instead (that is a perforation line with a pair of scissors on it)?
Quoted 18 lines
During 'rebase -i', one wrong edit in a long rebase session might inadvertently drop commits. This change shows the total number of commits in the comments below the commit list. After the rebase edit, the number can be quickly compared to the line number of the last commit - by scrolling to the last entry in the rebase TODO list. This gives peace of mind that no commits have been lost in the edit.
Signed-off-by Onno Kortmann <[email protected]>--- git-rebase--interactive.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)git-rebase--interactive.sh +0
-0
git-rebase--interactive.sh test -s "$todo" || echo noop >> "$todo" · line 1034
Quoted 4 lines
git-rebase--interactive.sh +1
-0@@ -1031,9 +1031,11 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" +commitcount=$(git stripspace --strip-comments <"$todo" | wc -l)
Does this count the number of commits? I suspect it at least needs to filter "x|exec" out.
Quoted 7 lines
git-rebase--interactive.sh +1
-1cat >>"$todo" <<EOF -$comment_char Rebase $shortrevisions onto $shortonto +$comment_char Rebase $shortrevisions onto $shortonto ($commitcount commit(s)) EOF append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF
Hi,
Quoted 3 lines
These lines above "---" will become the only log message text, which is probably not what you intended. Use "-- >8 --" marker instead (that is a perforation line with a pair of scissors on it)?
Thanks, hopefully fixed below.
Quoted 4 lines
Quoted 1 line
+commitcount=$(git stripspace --strip-comments <"$todo" | wc -l)
Does this count the number of commits? I suspect it at least needs to filter "x|exec" out.
Very true - after reading this, I learned about the '-x' option to git-rebase -i :-)
I changed the patch so it now properly looks for '^pick ' patterns. I hope this should do the trick under all circumstances? In the case of having 'exec' lines interspersed, the $commitcount becomes a lot less useful (no comparison to editor line numbers), though.
Cheers,
Onno
8< 8< 8< 8< 8< 8< 8< 8< 8<
Subject: [PATCH] Show number of commits being rebased interactively
During 'rebase -i', one wrong edit in a long rebase session might inadvertently drop commits. This change shows the total number of commits in the comments below the commit list. After the rebase edit, the number can be quickly compared to the line number of the last commit - by scrolling to the last entry in the rebase TODO list. This gives peace of mind that no commits have been lost in the edit.
--- git-rebase--interactive.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
git-rebase--interactive.sh +5 -1
@@ -1031,9 +1031,13 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" +commitcount=$(git stripspace --strip-comments <"$todo" | \ + sane_grep "^pick " | \ + wc -l) + cat >>"$todo" <<EOF -$comment_char Rebase $shortrevisions onto $shortonto +$comment_char Rebase $shortrevisions onto $shortonto ($commitcount commit(s)) EOF append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF
Signature · 1 line
2.2.0.rc0.18.g1c09766
Quoted 7 lines · Onno Kortmann
Hi,
Quoted 3 lines
These lines above "---" will become the only log message text, which is probably not what you intended. Use "-- >8 --" marker instead (that is a perforation line with a pair of scissors on it)?
Thanks, hopefully fixed below.
Quoted 7 lines
Quoted 4 lines
Quoted 1 line
+commitcount=$(git stripspace --strip-comments <"$todo" | wc -l)
Does this count the number of commits? I suspect it at least needs to filter "x|exec" out.
Very true - after reading this, I learned about the '-x' option to git-rebase -i :-)
I changed the patch so it now properly looks for '^pick ' patterns. I
Hmm, is looking only for pick the right thing?
Stepping back a bit, I have to wonder what we want to count. The number of commits after the rebase is done, or the number of commits in the input of the rebase operation?
The generation loop that reads from rev-list may add only "pick", but then rearrange_squash will munge some into squash and fixup. We may even have some more automated editing of the insn sheet in the future, just like add_exec_commands were added, so I think it is more prudent to go from the full list of possible insn sheet commands (that is, pick, reword, edit, squash, fixup and exec) and count them, not just relying on "we know the rev-list loop happens to add only pick commands".
Quoted 3 lines
In the case of having 'exec' lines interspersed, the $commitcount becomes a lot less useful (no comparison to editor line numbers), though.
Hmph, interesting. Then perhaps not filtering at all and instead labelling this new piece of information not "commit(s)" a better solution? You are counting the number of instructions in the insn sheet, so perhaps something like "($count todo items(s))" or something?
Quoted 2 lines
Onno
8< 8< 8< 8< 8< 8< 8< 8< 8<
That is not a scissors line, I suspect.
I didn't try running "git am" on this message, though. Did you?
Quoted 20 lines
Subject: [PATCH] Show number of commits being rebased interactively
During 'rebase -i', one wrong edit in a long rebase session might inadvertently drop commits. This change shows the total number of commits in the comments below the commit list. After the rebase edit, the number can be quickly compared to the line number of the last commit - by scrolling to the last entry in the rebase TODO list. This gives peace of mind that no commits have been lost in the edit.
Signed-off-by Onno Kortmann <[email protected]>--- git-rebase--interactive.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)git-rebase--interactive.sh +0
-0
git-rebase--interactive.sh test -s "$todo" || echo noop >> "$todo" · line 1036
Quoted 6 lines
git-rebase--interactive.sh +3
-0@@ -1031,9 +1031,13 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" +commitcount=$(git stripspace --strip-comments <"$todo" | \ + sane_grep "^pick " | \ + wc -l)
Just a scripting tip. When a line ends with a vertical bar (pipe), the shell parser knows that you haven't finished speaking, so there is no need to have "\" there.
Quoted 7 lines
git-rebase--interactive.sh +1
-1cat >>"$todo" <<EOF -$comment_char Rebase $shortrevisions onto $shortonto +$comment_char Rebase $shortrevisions onto $shortonto ($commitcount commit(s)) EOF append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF
Hi,
Quoted 9 lines
Quoted 3 lines
In the case of having 'exec' lines interspersed, the $commitcount becomes a lot less useful (no comparison to editor line numbers), though.
Hmph, interesting. Then perhaps not filtering at all and instead labelling this new piece of information not "commit(s)" a better solution? You are counting the number of instructions in the insn sheet, so perhaps something like "($count todo items(s))" or something?
Yes that sounds good. Though I lack the experience to say what would be the typical workflow for someone who uses rebase-i a lot with execs interspersed(?)
In all cases, simply counting and noting '#todo item(s)' would always be a correct labelling and simple to understand, albeit not necessarily a very helpful value. But at least for pure picks/edit/squash lists, it will allow a quick sanity check.
Also, I noted that filtering for ^pick will not be good in case one uses '--autosquash'.
Quoted 5 lines
Quoted 1 line
8< 8< 8< 8< 8< 8< 8< 8< 8<
That is not a scissors line, I suspect.
I didn't try running "git am" on this message, though. Did you?
Yes, I RTFMed on git-mailinfo and to be sure I tested this before sending the last mail out :)
Below is the patch, changed to say 'TODO items', and with updated commit message.
Cheers,
Onno
8< 8< 8< 8< 8< 8< 8< 8< 8<
Subject: [PATCH] Show number of TODO items for interactive rebase
During 'rebase -i', one wrong edit in a long rebase session might inadvertently drop commits/items. This change shows the total number of TODO items in the comments after the list. After performing the rebase edit, total item counts can be compared to make sure that no changes have been lost in the edit.
--- git-rebase--interactive.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
git-rebase--interactive.sh +3 -1
@@ -1031,9 +1031,11 @@ test -s "$todo" || echo noop >> "$todo" test -n "$autosquash" && rearrange_squash "$todo" test -n "$cmd" && add_exec_commands "$todo" +todocount=$(git stripspace --strip-comments <"$todo" | wc -l) + cat >>"$todo" <<EOF -$comment_char Rebase $shortrevisions onto $shortonto +$comment_char Rebase $shortrevisions onto $shortonto ($todocount TODO item(s)) EOF append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF
--
2.2.0.34.gb8f29bf