* [PATCH v2] bash-prompt.sh: Show where rebase is at when interrupted by a merge conflict
@ 2013-04-25 9:28 Zoltan Klinger
2013-04-25 17:05 ` Junio C Hamano
0 siblings, 1 reply; 2+ messages in thread
From: Zoltan Klinger @ 2013-04-25 9:28 UTC (permalink / raw)
To: git; +Cc: felipe.contreras, szeder, Zoltan Klinger
When a rebase is interrupted by a merge conflict it could be useful to
know how far a rebase has progressed and how many commits in total this
rebase will apply. Teach the __git_ps1() command to display the number
of commits so far applied and the total number of commits to be applied.
Below is a sample output of the improved __git_ps1() command:
((3ec0a6a...)|REBASE 2/5)
In the example above the rebase has stopped at the second commit due to
a merge conflict and there are a total number of five commits to be
applied by this rebase.
This information can be already obtained from the following files which are
being generated during the rebase:
GIT_DIR/.git/rebase-merge/msgnum (git-rebase--merge.sh)
GIT_DIR/.git/rebase-merge/end (git-rebase--merge.sh)
GIT_DIR/.git/rebase-apply/next (git-am.sh)
GIT_DIR/.git/rebase-apply/last (git-am.sh)
1) Modify git-rebase--interactive.sh to also create
GIT_DIR/.git/rebase-merge/msgnum
GIT_DIR/.git/rebase-merge/end
files for the number of commits so far applied and the total number of
commits to be applied.
2) Modify git-prompt.sh to read and display info from the above files
3) Update test t9903-bash-prompt.sh to reflect changes introduced by
this patch.
Signed-off-by: Zoltan Klinger <zoltan.klinger@gmail.com>
---
Changes since previous patch:
* Fix typo in commit message
* Make prompt easier to read by replacing '|' character with space
* Modify test cases to have more than one commit to apply by the rebase
contrib/completion/git-prompt.sh | 21 ++++++++++++++++-----
git-rebase--interactive.sh | 5 +++++
t/t9903-bash-prompt.sh | 14 ++++++++++----
3 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 054c52e..eaf5c36 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -263,14 +263,21 @@ __git_ps1 ()
else
local r=""
local b=""
- if [ -f "$g/rebase-merge/interactive" ]; then
- r="|REBASE-i"
- b="$(cat "$g/rebase-merge/head-name")"
- elif [ -d "$g/rebase-merge" ]; then
- r="|REBASE-m"
+ local step=""
+ local total=""
+ if [ -d "$g/rebase-merge" ]; then
b="$(cat "$g/rebase-merge/head-name")"
+ step=$(cat "$g/rebase-merge/msgnum")
+ total=$(cat "$g/rebase-merge/end")
+ if [ -f "$g/rebase-merge/interactive" ]; then
+ r="|REBASE-i"
+ else
+ r="|REBASE-m"
+ fi
else
if [ -d "$g/rebase-apply" ]; then
+ step=$(cat "$g/rebase-apply/next")
+ total=$(cat "$g/rebase-apply/last")
if [ -f "$g/rebase-apply/rebasing" ]; then
r="|REBASE"
elif [ -f "$g/rebase-apply/applying" ]; then
@@ -308,6 +315,10 @@ __git_ps1 ()
}
fi
+ if [ -n "$step" ] && [ -n "$total" ]; then
+ r="$r $step/$total"
+ fi
+
local w=""
local i=""
local s=""
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 048a140..f76ff8f 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -57,6 +57,9 @@ rewritten="$state_dir"/rewritten
dropped="$state_dir"/dropped
+end="$state_dir"/end
+msgnum="$state_dir"/msgnum
+
# A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
# GIT_AUTHOR_DATE that will be used for the commit that is currently
# being rebased.
@@ -109,7 +112,9 @@ mark_action_done () {
sed -e 1d < "$todo" >> "$todo".new
mv -f "$todo".new "$todo"
new_count=$(git stripspace --strip-comments <"$done" | wc -l)
+ echo $new_count > $msgnum
total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l)))
+ echo $total > $end
if test "$last_count" != "$new_count"
then
last_count=$new_count
diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index e147a8d..083b319 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -28,6 +28,10 @@ test_expect_success 'setup for prompt tests' '
git checkout -b b2 master &&
echo 0 > file &&
git commit -m "second b2" file &&
+ echo 00 > file &&
+ git commit -m "another b2" file &&
+ echo 000 > file &&
+ git commit -m "yet another b2" file &&
git checkout master
'
@@ -243,10 +247,12 @@ test_expect_success 'prompt - inside bare repository' '
'
test_expect_success 'prompt - interactive rebase' '
- printf " (b1|REBASE-i)" > expected
+ printf " (b1|REBASE-i 2/3)" > expected
echo "#!$SHELL_PATH" >fake_editor.sh &&
cat >>fake_editor.sh <<\EOF &&
-echo "edit $(git log -1 --format="%h")" > "$1"
+echo "exec echo" > "$1"
+echo "edit $(git log -1 --format="%h")" >> "$1"
+echo "exec echo" >> "$1"
EOF
test_when_finished "rm -f fake_editor.sh" &&
chmod a+x fake_editor.sh &&
@@ -260,7 +266,7 @@ EOF
'
test_expect_success 'prompt - rebase merge' '
- printf " (b2|REBASE-m)" > expected &&
+ printf " (b2|REBASE-m 1/3)" > expected &&
git checkout b2 &&
test_when_finished "git checkout master" &&
test_must_fail git rebase --merge b1 b2 &&
@@ -270,7 +276,7 @@ test_expect_success 'prompt - rebase merge' '
'
test_expect_success 'prompt - rebase' '
- printf " ((t2)|REBASE)" > expected &&
+ printf " ((t2)|REBASE 1/3)" > expected &&
git checkout b2 &&
test_when_finished "git checkout master" &&
test_must_fail git rebase b1 b2 &&
--
1.7.9.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] bash-prompt.sh: Show where rebase is at when interrupted by a merge conflict
2013-04-25 9:28 [PATCH v2] bash-prompt.sh: Show where rebase is at when interrupted by a merge conflict Zoltan Klinger
@ 2013-04-25 17:05 ` Junio C Hamano
0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2013-04-25 17:05 UTC (permalink / raw)
To: Zoltan Klinger; +Cc: git, felipe.contreras, szeder
Zoltan Klinger <zoltan.klinger@gmail.com> writes:
> When a rebase is interrupted by a merge conflict it could be useful to
The command also stops when told to stop with "amend", etc. no? I
would phrase this way "When a rebase stops (e.g. interrupted ...),
it could be useful...".
> This information can be already obtained from the following files which are
> being generated during the rebase:
> GIT_DIR/.git/rebase-merge/msgnum (git-rebase--merge.sh)
> GIT_DIR/.git/rebase-merge/end (git-rebase--merge.sh)
> GIT_DIR/.git/rebase-apply/next (git-am.sh)
> GIT_DIR/.git/rebase-apply/last (git-am.sh)
Here, I would add:
But "git rebase -i" did not leave enough clues.
> 1) Modify git-rebase--interactive.sh to also create
> GIT_DIR/.git/rebase-merge/msgnum
> GIT_DIR/.git/rebase-merge/end
> files for the number of commits so far applied and the total number of
> commits to be applied.
> 2) Modify git-prompt.sh to read and display info from the above files
Missing full-stop at the end.
> 3) Update test t9903-bash-prompt.sh to reflect changes introduced by
> this patch.
>
> Signed-off-by: Zoltan Klinger <zoltan.klinger@gmail.com>
> ---
Thanks.
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index 048a140..f76ff8f 100644
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -57,6 +57,9 @@ rewritten="$state_dir"/rewritten
>
> dropped="$state_dir"/dropped
>
> +end="$state_dir"/end
> +msgnum="$state_dir"/msgnum
> +
> # A script to set the GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
> # GIT_AUTHOR_DATE that will be used for the commit that is currently
> # being rebased.
> @@ -109,7 +112,9 @@ mark_action_done () {
> sed -e 1d < "$todo" >> "$todo".new
> mv -f "$todo".new "$todo"
> new_count=$(git stripspace --strip-comments <"$done" | wc -l)
> + echo $new_count > $msgnum
> total=$(($new_count + $(git stripspace --strip-comments <"$todo" | wc -l)))
> + echo $total > $end
Write them like this:
echo foo >"$variable"
Having no SP between redirection operator and redirection target is
merely a style thing [*1*]. Having an unnecessary dq around a
variable name that is used as redirection target is to work around a
bug in certain versions of bash that issues useless warnings.
I'll locally squeeze the above suggestions in and queue the result.
Please check what will appear on 'pu' by the end of day.
Thanks.
[Footnote]
*1* But a style request is not optional ;-)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-04-25 17:05 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-25 9:28 [PATCH v2] bash-prompt.sh: Show where rebase is at when interrupted by a merge conflict Zoltan Klinger
2013-04-25 17:05 ` Junio C Hamano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).