From 9b88f3f0945d9566961eae5ed20e3cfdf8ed533b Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Sat, 10 Nov 2018 14:13:22 -0800 Subject: [PATCH] filter-repo: ensure we parse all merge parents, even if some became pruned Signed-off-by: Elijah Newren --- git-filter-repo | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/git-filter-repo b/git-filter-repo index d74d10f..50bf7ca 100755 --- a/git-filter-repo +++ b/git-filter-repo @@ -993,12 +993,19 @@ class FastExportFilter(object): self._translate_commit_hash, commit_msg) - parents = [] - parents.append(self._parse_optional_parent_ref('from')) - merge_ref = self._parse_optional_parent_ref('merge') - while merge_ref: - parents.append(merge_ref) - merge_ref = self._parse_optional_parent_ref('merge') + parents = [self._parse_optional_parent_ref('from')] + # Due to empty pruning, we can have real 'from' and 'merge' lines that + # due to commit rewriting map to a parent of None. We need to record + # 'from' if its non-None, and we need to parse all 'merge' lines. + while self._currentline.startswith('merge '): + parents.append(self._parse_optional_parent_ref('merge')) + # Since we may have added several 'None' parents due to empty pruning, + # get rid of all the non-existent parents + parents = [x for x in parents if x is not None] + # However, the splitting below into from_commit and merge_commits means + # we'd rather a parentless commit be represented as one None entry + if not parents: + parents.append(None) was_merge = len(parents) > 1 # Remove redundant parents (if both sides of history are empty commits,