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. > 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. > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html