Re: [PATCH v2 5/6] status: do not depend on rebase reflog messages

2013-06-17 Thread Junio C Hamano
Ramkumar Ramachandra  writes:

> diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
> index bf08d4e..739624e 100755
> --- a/t/t7512-status-help.sh
> +++ b/t/t7512-status-help.sh
> @@ -188,10 +188,9 @@ test_expect_success 'status when rebasing -i in edit 
> mode' '
>   export FAKE_LINES &&
>   test_when_finished "git rebase --abort" &&
>   ONTO=$(git rev-parse --short HEAD~2) &&
> - TGT=$(git rev-parse --short two_rebase_i) &&
>   git rebase -i HEAD~2 &&
>   cat >expected <<-EOF &&
> - # HEAD detached from $TGT
> + # rebase in progress; onto $ONTO
>   # You are currently editing a commit while rebasing branch 
> '\''rebase_i_edit'\'' on '\''$ONTO'\''.
>   #   (use "git commit --amend" to amend the current commit)
>   #   (use "git rebase --continue" once you are satisfied with your 
> changes)

This hunk (and others that used to use $TGT) shows that the original
test was depending too much on the implementation detail (i.e. that
rebase/rebase-i internally uses checkout to affect the reflog, making
the info shown as "detached from/at" not useful during "rebase").
This step may have started as a workaround against the fallout from 6/6,
but I think this is a good change by itself independent of "checkut -"
fix, which is the main topic of this series.

> diff --git a/wt-status.c b/wt-status.c
> index 2511270..85a00f1 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -1174,7 +1174,10 @@ void wt_status_print(struct wt_status *s)
>   branch_name += 11;
>   else if (!strcmp(branch_name, "HEAD")) {
>   branch_status_color = color(WT_STATUS_NOBRANCH, s);
> - if (state.detached_from) {
> + if (state.rebase_in_progress || 
> state.rebase_interactive_in_progress) {
> + on_what = _("rebase in progress; onto ");
> + branch_name = state.onto;

The part after "||" is what I missed in the "how about an approach
along this line" patch.

Good job.

> + } else if (state.detached_from) {
>   unsigned char sha1[20];
>   branch_name = state.detached_from;
>   if (!get_sha1("HEAD", sha1) &&
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 5/6] status: do not depend on rebase reflog messages

2013-06-16 Thread Ramkumar Ramachandra
b397ea4 (status: show more info than "currently not on any branch",
2013-03-13) made the output of 'git status' richer in the case of a
detached HEAD.  Before this patch, with a detached HEAD:

  $ git status
  # Not currently on any branch.

After the patch:

  $ git checkout v1.8.2
  $ git status
  # HEAD detached at v1.8.2.

It works by digging the reflog for the most recent message of the form
"checkout: moving from  to ".  It then asserts that HEAD and
"" are the same, and displays this message.  When they aren't equal,
it displays:

  $ git status
  # HEAD detached from fe11db.

In case of a rebase [-i] operation in progress, this message depends on
the implementation of rebase writing "checkout: " messages to the
reflog.  To remove this dependency so that rebase can be updated to
write better reflog messages, replace this "HEAD detached from" message
with the constant:

  # rebase in progress; onto $ONTO

The issue is not isolated to rebase at all.  Several other scripts like
bisect write "checkout: " messages to the reflog, and the tests in
t/status-help depend on them.  Fixing them is left as an exercise to
other contributors.

Signed-off-by: Ramkumar Ramachandra 
---
 t/t7512-status-help.sh | 37 +
 wt-status.c|  5 -
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
index bf08d4e..739624e 100755
--- a/t/t7512-status-help.sh
+++ b/t/t7512-status-help.sh
@@ -77,7 +77,7 @@ test_expect_success 'status when rebase in progress before 
resolving conflicts'
ONTO=$(git rev-parse --short HEAD^^) &&
test_must_fail git rebase HEAD^ --onto HEAD^^ &&
cat >expected <<-EOF &&
-   # HEAD detached at $ONTO
+   # rebase in progress; onto $ONTO
# You are currently rebasing branch '\''rebase_conflicts'\'' on 
'\''$ONTO'\''.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
@@ -104,7 +104,7 @@ test_expect_success 'status when rebase in progress before 
rebase --continue' '
echo three >main.txt &&
git add main.txt &&
cat >expected <<-EOF &&
-   # HEAD detached at $ONTO
+   # rebase in progress; onto $ONTO
# You are currently rebasing branch '\''rebase_conflicts'\'' on 
'\''$ONTO'\''.
#   (all conflicts fixed: run "git rebase --continue")
#
@@ -136,7 +136,7 @@ test_expect_success 'status during rebase -i when conflicts 
unresolved' '
ONTO=$(git rev-parse --short rebase_i_conflicts) &&
test_must_fail git rebase -i rebase_i_conflicts &&
cat >expected <<-EOF &&
-   # HEAD detached at $ONTO
+   # rebase in progress; onto $ONTO
# You are currently rebasing branch '\''rebase_i_conflicts_second'\'' 
on '\''$ONTO'\''.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
@@ -162,7 +162,7 @@ test_expect_success 'status during rebase -i after 
resolving conflicts' '
test_must_fail git rebase -i rebase_i_conflicts &&
git add main.txt &&
cat >expected <<-EOF &&
-   # HEAD detached at $ONTO
+   # rebase in progress; onto $ONTO
# You are currently rebasing branch '\''rebase_i_conflicts_second'\'' 
on '\''$ONTO'\''.
#   (all conflicts fixed: run "git rebase --continue")
#
@@ -188,10 +188,9 @@ test_expect_success 'status when rebasing -i in edit mode' 
'
export FAKE_LINES &&
test_when_finished "git rebase --abort" &&
ONTO=$(git rev-parse --short HEAD~2) &&
-   TGT=$(git rev-parse --short two_rebase_i) &&
git rebase -i HEAD~2 &&
cat >expected <<-EOF &&
-   # HEAD detached from $TGT
+   # rebase in progress; onto $ONTO
# You are currently editing a commit while rebasing branch 
'\''rebase_i_edit'\'' on '\''$ONTO'\''.
#   (use "git commit --amend" to amend the current commit)
#   (use "git rebase --continue" once you are satisfied with your 
changes)
@@ -216,9 +215,8 @@ test_expect_success 'status when splitting a commit' '
ONTO=$(git rev-parse --short HEAD~3) &&
git rebase -i HEAD~3 &&
git reset HEAD^ &&
-   TGT=$(git rev-parse --short HEAD) &&
cat >expected <<-EOF &&
-   # HEAD detached at $TGT
+   # rebase in progress; onto $ONTO
# You are currently splitting a commit while rebasing branch 
'\''split_commit'\'' on '\''$ONTO'\''.
#   (Once your working directory is clean, run "git rebase --continue")
#
@@ -246,11 +244,10 @@ test_expect_success 'status after editing the last commit 
with --amend during a
export FAKE_LINES &&
test_when_finished "git rebase --abort" &&
ONTO=$(git rev-parse --short HEAD~3) &&
-   TGT=$(git rev-parse --short three_amend) &&
git rebase -i HEAD~3 &&
git commit --amend -m "foo