fast-import: checkpoint: dump branches/tags/marks even if object_count==0
authorEric Rannaud <e@nanocritical.com>
Fri, 29 Sep 2017 03:09:36 +0000 (20:09 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 29 Sep 2017 09:35:42 +0000 (18:35 +0900)
commit30e215a65c9f75e0f2a72c9f695389179bc30f72
tree340faf7137f02ac1f09a426f76a9b963fc7d7cff
parent94c9fd268d4287f6fbfef84793288479905a7e48
fast-import: checkpoint: dump branches/tags/marks even if object_count==0

The checkpoint command cycles packfiles if object_count != 0, a sensible
test or there would be no pack files to write. Since 820b931012, the
command also dumps branches, tags and marks, but still conditionally.
However, it is possible for a command stream to modify refs or create
marks without creating any new objects.

For example, reset a branch (and keep fast-import running):

$ git fast-import
reset refs/heads/master
from refs/heads/master^

checkpoint

but refs/heads/master remains unchanged.

Other example: a commit command that re-creates an object that already
exists in the object database.

The man page also states that checkpoint "updates the refs" and that
"placing a progress command immediately after a checkpoint will inform
the reader when the checkpoint has been completed and it can safely
access the refs that fast-import updated". This wasn't always true
without this patch.

This fix unconditionally calls dump_{branches,tags,marks}() for all
checkpoint commands. dump_branches() and dump_tags() are cheap to call
in the case of a no-op.

Add tests to t9300 that observe the (non-packfiles) effects of
checkpoint.

Signed-off-by: Eric Rannaud <e@nanocritical.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fast-import.c
t/t9300-fast-import.sh