Browse Source

Merge branch 'mk/reachable-protect-detached-head' into maint

Reachability check (used in "git prune" and friends) did not add a
detached HEAD as a starting point to traverse objects still in use.

* mk/reachable-protect-detached-head:
  reachable.c: add HEAD to reachability starting commits
maint
Junio C Hamano 10 years ago
parent
commit
421ec4f8d1
  1. 3
      reachable.c
  2. 22
      t/t5304-prune.sh

3
reachable.c

@ -229,6 +229,9 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog, @@ -229,6 +229,9 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
/* Add all external refs */
for_each_ref(add_one_ref, revs);

/* detached HEAD is not included in the list above */
head_ref(add_one_ref, revs);

/* Add all reflog info */
if (mark_reflog)
for_each_reflog(add_one_reflog, revs);

22
t/t5304-prune.sh

@ -104,6 +104,28 @@ test_expect_success 'prune: prune unreachable heads' ' @@ -104,6 +104,28 @@ test_expect_success 'prune: prune unreachable heads' '

'

test_expect_success 'prune: do not prune detached HEAD with no reflog' '

git checkout --detach --quiet &&
git commit --allow-empty -m "detached commit" &&
# verify that there is no reflogs
# (should be removed and disabled by previous test)
test ! -e .git/logs &&
git prune -n >prune_actual &&
: >prune_expected &&
test_cmp prune_actual prune_expected

'

test_expect_success 'prune: prune former HEAD after checking out branch' '

head_sha1=$(git rev-parse HEAD) &&
git checkout --quiet master &&
git prune -v >prune_actual &&
grep "$head_sha1" prune_actual

'

test_expect_success 'prune: do not prune heads listed as an argument' '

: > file2 &&

Loading…
Cancel
Save