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>
This commit is contained in:

committed by
Junio C Hamano

parent
94c9fd268d
commit
30e215a65c
@ -3188,10 +3188,10 @@ static void checkpoint(void)
|
||||
checkpoint_requested = 0;
|
||||
if (object_count) {
|
||||
cycle_packfile();
|
||||
dump_branches();
|
||||
dump_tags();
|
||||
dump_marks();
|
||||
}
|
||||
dump_branches();
|
||||
dump_tags();
|
||||
dump_marks();
|
||||
}
|
||||
|
||||
static void parse_checkpoint(void)
|
||||
|
Reference in New Issue
Block a user