diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2009-01-16 13:52:53 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-01-17 22:01:37 -0800 |
commit | f0298cf1c6a7b5cc8b79d84a03b0ce07df2d9e6b (patch) | |
tree | 175e8320de176634d0eb695c56c6e8ebf056d50a | |
parent | bf474e2402e51843e8230c064da6ccfdf3a8ff54 (diff) | |
download | git-f0298cf1c6a7b5cc8b79d84a03b0ce07df2d9e6b.tar.gz git-f0298cf1c6a7b5cc8b79d84a03b0ce07df2d9e6b.tar.xz |
revision walker: include a detached HEAD in --all
When HEAD is detached, --all should list it, too, logically, as a
detached HEAD is by definition a temporary, unnamed branch.
It is especially necessary to list it when garbage collecting, as
the detached HEAD would be trashed.
Noticed by Thomas Rast.
Note that this affects creating bundles with --all; I contend that it
is a good change to add the HEAD, so that cloning from such a bundle
will give you a current branch. However, I had to fix t5701 as it
assumed that --all does not imply HEAD.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | revision.c | 1 | ||||
-rwxr-xr-x | t/t5701-clone-local.sh | 4 | ||||
-rwxr-xr-x | t/t6014-rev-list-all.sh | 38 |
3 files changed, 41 insertions, 2 deletions
diff --git a/revision.c b/revision.c index 45fd7a366..f6ccb973a 100644 --- a/revision.c +++ b/revision.c @@ -1223,6 +1223,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch if (!strcmp(arg, "--all")) { handle_refs(revs, flags, for_each_ref); + handle_refs(revs, flags, head_ref); continue; } if (!strcmp(arg, "--branches")) { diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh index 8dfaaa456..14413f851 100755 --- a/t/t5701-clone-local.sh +++ b/t/t5701-clone-local.sh @@ -11,8 +11,8 @@ test_expect_success 'preparing origin repository' ' git clone --bare . x && test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true && test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true - git bundle create b1.bundle --all HEAD && - git bundle create b2.bundle --all && + git bundle create b1.bundle master HEAD && + git bundle create b2.bundle master && mkdir dir && cp b1.bundle dir/b3 cp b1.bundle b4 diff --git a/t/t6014-rev-list-all.sh b/t/t6014-rev-list-all.sh new file mode 100755 index 000000000..991ab4a65 --- /dev/null +++ b/t/t6014-rev-list-all.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +test_description='--all includes detached HEADs' + +. ./test-lib.sh + + +commit () { + test_tick && + echo $1 > foo && + git add foo && + git commit -m "$1" +} + +test_expect_success 'setup' ' + + commit one && + commit two && + git checkout HEAD^ && + commit detached + +' + +test_expect_success 'rev-list --all lists detached HEAD' ' + + test 3 = $(git rev-list --all | wc -l) + +' + +test_expect_success 'repack does not lose detached HEAD' ' + + git gc && + git prune --expire=now && + git show HEAD + +' + +test_done |