From 04260a3aa487aacbe73446c789b40ebd20a713af Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Tue, 11 Sep 2018 16:37:54 -0700 Subject: [PATCH] filter-repo: parse `fast-export --reference-excluded-parents` output Signed-off-by: Elijah Newren --- git-filter-repo | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/git-filter-repo b/git-filter-repo index c6fcda1..6643294 100755 --- a/git-filter-repo +++ b/git-filter-repo @@ -465,9 +465,11 @@ class Commit(_GitElementWithId): file_.write('\n') file_.write('data %d\n%s' % (len(self.message), self.message)) if self.from_commit: - file_.write('from :%s\n' % self.from_commit) + mark = ':' if isinstance(self.from_commit, int) else '' + file_.write('from {}{}\n'.format(mark, self.from_commit)) for ref in self.merge_commits: - file_.write('merge :%s\n' % ref) + mark = ':' if isinstance(ref, int) else '' + file_.write('merge {}{}\n'.format(mark, ref)) for change in self.file_changes: change.dump(file_) file_.write('\n') @@ -529,7 +531,8 @@ class Tag(_GitElement): self.dumped = 1 file_.write('tag %s\n' % self.ref) - file_.write('from :%d\n' % self.from_ref) + mark = ':' if isinstance(self.from_ref, int) else '' + file_.write('from {}{}\n'.format(mark, self.from_ref)) file_.write('tagger %s <%s> ' % (self.tagger_name, self.tagger_email)) _write_date(file_, self.tagger_date) file_.write('\n') @@ -693,6 +696,11 @@ class FastExportFilter(object): # our mark namespace baseref = _IDS.translate( int(matches.group(1))+self._id_offset ) self._advance_currentline() + else: + matches = re.match('%s ([0-9a-f]{40})\n' % refname, self._currentline) + if matches: + baseref = matches.group(1) + self._advance_currentline() return baseref def _parse_optional_filechange(self):