Skip to content

Commit

Permalink
revision walker: include a detached HEAD in --all
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Jan 18, 2009
1 parent bf474e2 commit f0298cf
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
1 change: 1 addition & 0 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -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")) {
Expand Down
4 changes: 2 additions & 2 deletions t/t5701-clone-local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
38 changes: 38 additions & 0 deletions t/t6014-rev-list-all.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit f0298cf

Please sign in to comment.