fast-export: Avoid dropping files from commits
commitebeec7dbc564cb83edd8faee87890c47b6f0da43
authorElijah Newren <newren@gmail.com>
Wed, 25 Mar 2009 23:53:23 +0000 (25 17:53 -0600)
committerJunio C Hamano <gitster@pobox.com>
Thu, 26 Mar 2009 05:53:45 +0000 (25 22:53 -0700)
tree986ed08fb1a44f558826a0e7a8efbcb55b68220d
parent4fa535a179e771cd5a16d5ab05e97e7bb52739ef
fast-export: Avoid dropping files from commits

When exporting a subset of commits on a branch that do not go back to a
root commit (e.g. master~2..master), we still want each exported commit to
have the same files in the exported tree as in the original tree.

Previously, when given such a range, we would omit master~2 as a parent of
master~1, but we would still diff against master~2 when selecting the list
of files to include in master~1.  This would result in only files that
had changed in the given range showing up in the resulting export.  In such
cases, we should diff master~1 against the root instead (i.e. use
diff_root_tree_sha1 instead of diff_tree_sha1).

There's a special case to consider here: incremental exports (i.e. exports
where the --import-marks flag is specified).  If master~2 is an imported
mark, then we still want to diff master~1 against master~2 when selecting
the list of files to include.

We can handle all cases, including the special case, by just checking
whether master~2 corresponds to a known object mark when deciding what to
diff against.

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