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 <m...@max630.net>
---
Inserted test into existing script.
 reachable.c      |  3 +++
 t/t5304-prune.sh | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/reachable.c b/reachable.c
index 654a8c5..6f6835b 100644
--- a/reachable.c
+++ b/reachable.c
@@ -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);
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index 377d3d3..77cf064 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -104,6 +104,27 @@ test_expect_success 'prune: prune unreachable heads' '
 
 '
 
+test_expect_success 'prune: do not prune detached HEAD with no reflog' '
+
+       git config core.logAllRefUpdates false &&
+       test ! -e .git/logs &&
+       git checkout --detach --quiet &&
+       git commit --allow-empty -m "detached commit" &&
+       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 -q "$head_sha1" prune_actual
+
+'
+
 test_expect_success 'prune: do not prune heads listed as an argument' '
 
        : > file2 &&
-- 
2.0.1.1697.g73c6810

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to