On Wed, Sep 27, 2017 at 10:07:41PM -0700, Eric Rannaud wrote: > 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@xxxxxxxxxxxxxxxx> > --- > fast-import.c | 6 +-- > t/t9300-fast-import.sh | 126 +++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 129 insertions(+), 3 deletions(-) > > > Updated to include Junio's latest remarks. > > Also adding the necessary PIPE prereq, as pointed out by Ramsay Jones. Cygwin doesn't have the PIPE prereq; I've just confirmed that the previous version of this patch has t9300 failing on Cygwin, but this version passes.