prune: check SEEN flag for reachability
commitc2bf473d0d60f44a22a724871ada7981e51606f9
authorJeff King <peff@peff.net>
Thu, 14 Feb 2019 04:38:21 +0000 (13 23:38 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Feb 2019 23:25:33 +0000 (14 15:25 -0800)
treef2db168a970bec0559a13545af1b71c44d3650fd
parentfde67d68966e2acc4f2790d0a69991ab1f89a042
prune: check SEEN flag for reachability

The git-prune command checks reachability by doing a traversal, and then
checking whether a given object exists in the global object hash. This
can yield false positives if any other part of the code had to create an
object struct for some reason. It's not clear whether this is even
possible, but it's more robust to rely on something a little more
concrete: the SEEN flag set by our traversal.

Note that there is a slight possibility of regression here, as we're
relying on mark_reachable_objects() to consistently set the flag.
However, it has always done so, and we're already relying on that fact
in prune_shallow(), which is called as part of git-prune. So this is
making these two parts of the prune operation more consistent.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/prune.c