]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reachable.c: add HEAD to reachability starting commits
authorMax Kirillov <max@max630.net>
Wed, 3 Sep 2014 16:14:10 +0000 (19:14 +0300)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Sep 2014 17:47:44 +0000 (10:47 -0700)
HEAD is not explicitly used as a starting commit for
calculating reachability, so if it's detached and reflogs
are disabled it may be pruned.

Add tests which demonstrate it. Test 'prune: prune former HEAD after checking
out branch' also reverts changes to repository.

Signed-off-by: Max Kirillov <max@max630.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reachable.c
t/t5304-prune.sh

index 654a8c58d689daf43f2ba4c40e4fe54d31c7826a..6f6835bf27481299a0374bc1c7746bad750cdd12 100644 (file)
@@ -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);
index 377d3d3899737fec47f34f0db28ac876eb146af8..01c6a3fc1dc3ef028cfdaad749e9e68955f00226 100755 (executable)
@@ -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 &&