summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-10-15 22:43:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-10-15 22:43:42 (GMT)
commita394b39726f92c408fa494fa5357667b21466e93 (patch)
tree0c615e18e0406143ad9c3ad54408f2a0ca60ddfc
parent50a5e697b47a8625ed5b4d8a7f475a5741555566 (diff)
parent0eb8548f45cc51bff9b70f551f4c472af353a814 (diff)
downloadgit-a394b39726f92c408fa494fa5357667b21466e93.zip
git-a394b39726f92c408fa494fa5357667b21466e93.tar.gz
git-a394b39726f92c408fa494fa5357667b21466e93.tar.bz2
Merge branch 'mm/detach-at-HEAD-reflog'
After "git checkout --detach", "git status" reported a fairly useless "HEAD detached at HEAD", instead of saying at which exact commit. * mm/detach-at-HEAD-reflog: status: don't say 'HEAD detached at HEAD' t3203: test 'detached at' after checkout --detach
-rwxr-xr-xt/t3203-branch-output.sh13
-rw-r--r--wt-status.c6
2 files changed, 19 insertions, 0 deletions
diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh
index f1ae5ff..9454423 100755
--- a/t/t3203-branch-output.sh
+++ b/t/t3203-branch-output.sh
@@ -106,6 +106,19 @@ EOF
test_i18ncmp expect actual
'
+test_expect_success 'git branch shows detached HEAD properly after checkout --detach' '
+ git checkout master &&
+ cat >expect <<EOF &&
+* (HEAD detached at $(git rev-parse --short HEAD^0))
+ branch-one
+ branch-two
+ master
+EOF
+ git checkout --detach &&
+ git branch >actual &&
+ test_i18ncmp expect actual
+'
+
test_expect_success 'git branch shows detached HEAD properly after moving' '
cat >expect <<EOF &&
* (HEAD detached from $(git rev-parse --short HEAD))
diff --git a/wt-status.c b/wt-status.c
index c327fe8..3e3b8c0 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -1319,6 +1319,12 @@ static int grab_1st_switch(unsigned char *osha1, unsigned char *nsha1,
hashcpy(cb->nsha1, nsha1);
for (end = target; *end && *end != '\n'; end++)
;
+ if (!memcmp(target, "HEAD", end - target)) {
+ /* HEAD is relative. Resolve it to the right reflog entry. */
+ strbuf_addstr(&cb->buf,
+ find_unique_abbrev(nsha1, DEFAULT_ABBREV));
+ return 1;
+ }
strbuf_add(&cb->buf, target, end - target);
return 1;
}