Thread (3 messages) flat view 3 messages, 2 authors, 2016-06-15

Re: [PATCH] reachable.c: add HEAD to reachability starting commits

From: Jeff King <hidden>
Date: 2016-06-15 23:02:24

On Sat, Aug 30, 2014 at 11:58:35PM +0300, Max Kirillov wrote:
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.
Eek, you're right. I think nobody noticed because the HEAD reflog
usually picks it up (and you do not usually detach HEAD on a bare repo).
But I agree we should include it to cover this case.
quoted hunk ↗ jump to hunk
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);
Looks obviously correct.
quoted hunk ↗ jump to hunk
diff --git a/t/t5312-prune-detached.sh b/t/t5312-prune-detached.sh
new file mode 100755
index 0000000..fac93e1
--- /dev/null
+++ b/t/t5312-prune-detached.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+test_description='no prune detached head without reflog'
+. ./test-lib.sh
+
+test_expect_success 'make repo' '
+	git config core.logAllRefUpdates false
+	git commit --allow-empty -m commit1 &&
+	git commit --allow-empty -m commit2 &&
+	git checkout  --detach master &&
+	git commit --allow-empty -m commit3
+'
+
+test_expect_success 'prune does not delete anything' '
+	git prune -n >prune_actual &&
+	: >prune_expected &&
+	test_cmp prune_expected prune_actual'
+
+test_done
Your test looks reasonable, but is there any reason it cannot go in
t5304 with the other prune tests?

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help