fast-export: fix exporting a tag and nothing else
commitaf2abd870bfe4e95ccac20c721d5edaaa098d7ef
authorElijah Newren <newren@gmail.com>
Wed, 25 Sep 2019 01:39:58 +0000 (24 18:39 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 28 Sep 2019 09:54:40 +0000 (28 18:54 +0900)
tree30573cebd6e42192893c8fb7d4974565128f76c5
parent4c86140027f4a0d2caaa3ab4bd8bfc5ce3c11c8a
fast-export: fix exporting a tag and nothing else

fast-export allows specifying revision ranges, which can be used to
export a tag without exporting the commit it tags.  fast-export handled
this rather poorly: it would emit a "from :0" directive.  Since marks
start at 1 and increase, this means it refers to an unknown commit and
fast-import will choke on the input.

When we are unable to look up a mark for the object being tagged, use a
"from $HASH" directive instead to fix this problem.

Note that this is quite similar to the behavior fast-export exhibits
with commits and parents when --reference-excluded-parents is passed
along with an excluded commit range.  For tags of excluded commits we do
not require the --reference-excluded-parents flag because we always have
to tag something.  By contrast, when dealing with commits, pruning a
parent is always a viable option, so we need the flag to specify that
parent pruning is not wanted.  (It is slightly weird that
--reference-excluded-parents isn't the default with a separate
--prune-excluded-parents flag, but backward compatibility concerns
resulted in the current defaults.)

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fast-export.c
t/t9350-fast-export.sh