From: Junio C Hamano <gitster@pobox.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH 5/6] status: do not depend on flaky reflog messages
Date: Thu, 13 Jun 2013 11:07:10 -0700 [thread overview]
Message-ID: <7vvc5hubox.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <1371130349-30651-6-git-send-email-artagnon@gmail.com> (Ramkumar Ramachandra's message of "Thu, 13 Jun 2013 19:02:28 +0530")
Ramkumar Ramachandra <artagnon@gmail.com> writes:
> 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
> # HEAD is now detached
> $ 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 xxxx to yyyy". It then asserts that HEAD and
> "yyyy" are the same, and displays this message. When they aren't equal,
> it displays:
>
> $ git status
> # HEAD detached from fe11db.
>
> At this point, the utility of such a message is in question.
You can question, but I am not convinced the answer is an
unambiguous "not useful"
You were at 1.8.2 but no longer are, so in the following sequence:
$ git checkout v1.8.2
$ git status
$ git reset --hard HEAD^
$ git status
the former would say "detached at v1.8.2" while the latter should
*not*, because we are no longer at v1.8.2. "detached from v1.8.2"
is too subtle a way to express the state, and is confusing, but I
would not be surprised if people find it useful to be able to learn
"v1.8.2" even after you strayed away.
> Moreover,
> there are several tests in t/status-help that explicitly rely on rebase
> writing "checkout: " messages to the reflog. As evidenced by the
> failing tests in t/checkout-last, these messages are completely
> unintended and flaky.
The above only helps to convince me that "rebase should not affect
what the last checked-out branch was by letting 'checkout' it
internally calls to write reflog entries for it" With patches 6, 2,
and 3, I thought you fixed that issue.
So I am not convinced that is a good argument to justify to regress
"HEAD detached from" message to "Not on any branch".
At least, not just yet.
> This issue is not isolated to rebase at all. Several other scripts like
> bisect write (confusing) "checkout: " messages to the reflog. Fixing
> them is left as an exercise to other contributors.
Any scripted Porcelain that use "checkout", with patch 6, should be
able to do so with reflog-action environment variable, right? And 2
and 3 are examples of such fixes to two of them, which argues even
more strongly that 6 should be earier in the series, I think.
>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> t/t7512-status-help.sh | 24 +++++++++++-------------
> wt-status.c | 11 ++++-------
> 2 files changed, 15 insertions(+), 20 deletions(-)
>
> diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
> index bf08d4e..ed9d57c 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
> + # Not currently on any branch.
> # 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)
> @@ -246,11 +245,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" &&
> cat >expected <<-EOF &&
> - # HEAD detached from $TGT
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -280,7 +278,7 @@ test_expect_success 'status: (continue first edit) second edit' '
> git rebase -i HEAD~3 &&
> git rebase --continue &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -302,7 +300,7 @@ test_expect_success 'status: (continue first edit) second edit and split' '
> git rebase --continue &&
> git reset HEAD^ &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (Once your working directory is clean, run "git rebase --continue")
> #
> @@ -329,7 +327,7 @@ test_expect_success 'status: (continue first edit) second edit and amend' '
> git rebase --continue &&
> git commit --amend -m "foo" &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -351,7 +349,7 @@ test_expect_success 'status: (amend first edit) second edit' '
> git commit --amend -m "a" &&
> git rebase --continue &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -374,7 +372,7 @@ test_expect_success 'status: (amend first edit) second edit and split' '
> git rebase --continue &&
> git reset HEAD^ &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (Once your working directory is clean, run "git rebase --continue")
> #
> @@ -402,7 +400,7 @@ test_expect_success 'status: (amend first edit) second edit and amend' '
> git rebase --continue &&
> git commit --amend -m "d" &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -426,7 +424,7 @@ test_expect_success 'status: (split first edit) second edit' '
> git commit -m "e" &&
> git rebase --continue &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> @@ -451,7 +449,7 @@ test_expect_success 'status: (split first edit) second edit and split' '
> git rebase --continue &&
> git reset HEAD^ &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (Once your working directory is clean, run "git rebase --continue")
> #
> @@ -481,7 +479,7 @@ test_expect_success 'status: (split first edit) second edit and amend' '
> git rebase --continue &&
> git commit --amend -m "h" &&
> cat >expected <<-EOF &&
> - # HEAD detached from $ONTO
> + # Not currently on any branch.
> # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
> # (use "git commit --amend" to amend the current commit)
> # (use "git rebase --continue" once you are satisfied with your changes)
> diff --git a/wt-status.c b/wt-status.c
> index 2511270..f7d46a1 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -1173,15 +1173,12 @@ void wt_status_print(struct wt_status *s)
> if (!prefixcmp(branch_name, "refs/heads/"))
> branch_name += 11;
> else if (!strcmp(branch_name, "HEAD")) {
> + unsigned char sha1[20];
> branch_status_color = color(WT_STATUS_NOBRANCH, s);
> - if (state.detached_from) {
> - unsigned char sha1[20];
> + if (state.detached_from && !get_sha1("HEAD", sha1) &&
> + !hashcmp(sha1, state.detached_sha1)) {
> branch_name = state.detached_from;
> - if (!get_sha1("HEAD", sha1) &&
> - !hashcmp(sha1, state.detached_sha1))
> - on_what = _("HEAD detached at ");
> - else
> - on_what = _("HEAD detached from ");
> + on_what = _("HEAD detached at ");
> } else {
> branch_name = "";
> on_what = _("Not currently on any branch.");
next prev parent reply other threads:[~2013-06-13 18:07 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-13 13:32 [PATCH 0/6] Fix git checkout - with rebase Ramkumar Ramachandra
2013-06-13 13:32 ` [PATCH 1/6] t/checkout-last: checkout - doesn't work after rebase Ramkumar Ramachandra
2013-06-13 17:46 ` Junio C Hamano
2013-06-13 18:30 ` Ramkumar Ramachandra
2013-06-13 20:38 ` Junio C Hamano
2013-06-13 13:32 ` [PATCH 2/6] rebase: prepare to write reflog message for checkout Ramkumar Ramachandra
2013-06-13 17:51 ` Junio C Hamano
2013-06-13 18:05 ` Ramkumar Ramachandra
2013-06-13 13:32 ` [PATCH 3/6] rebase -i: " Ramkumar Ramachandra
2013-06-13 17:52 ` Junio C Hamano
2013-06-13 13:32 ` [PATCH 4/6] wt-status: remove unused field in grab_1st_switch_cbdata Ramkumar Ramachandra
2013-06-13 17:54 ` Junio C Hamano
2013-06-13 13:32 ` [PATCH 5/6] status: do not depend on flaky reflog messages Ramkumar Ramachandra
2013-06-13 18:07 ` Junio C Hamano [this message]
2013-06-13 18:15 ` Ramkumar Ramachandra
2013-06-13 18:48 ` Ramkumar Ramachandra
2013-06-13 21:02 ` Junio C Hamano
2013-06-14 6:27 ` Ramkumar Ramachandra
2013-06-14 13:52 ` Junio C Hamano
2013-06-14 14:01 ` Ramkumar Ramachandra
2013-06-14 14:52 ` Junio C Hamano
2013-06-14 15:08 ` Ramkumar Ramachandra
2013-06-14 16:31 ` Junio C Hamano
2013-06-14 21:36 ` Ramkumar Ramachandra
2013-06-14 22:16 ` Junio C Hamano
2013-06-14 22:36 ` Junio C Hamano
2013-06-14 23:07 ` Junio C Hamano
2013-06-15 8:02 ` Ramkumar Ramachandra
2013-06-15 9:58 ` Junio C Hamano
2013-06-15 12:13 ` Ramkumar Ramachandra
2013-06-15 8:44 ` Ramkumar Ramachandra
2013-06-15 9:51 ` Junio C Hamano
2013-06-15 12:08 ` Ramkumar Ramachandra
2013-06-16 5:57 ` Junio C Hamano
2013-06-16 6:07 ` Ramkumar Ramachandra
2013-06-15 10:26 ` Junio C Hamano
2013-06-13 13:32 ` [PATCH 6/6] checkout: respect GIT_REFLOG_ACTION Ramkumar Ramachandra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vvc5hubox.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).