Use git's path stripping when upstreaming patches.

This commit is contained in:
Josh Matthews 2017-06-19 19:14:28 -04:00 committed by Ms2ger
parent 578498ba24
commit d9baadd3df
2 changed files with 8 additions and 24 deletions

View file

@ -69,7 +69,7 @@ class GitTree(wptupdate.tree.GitTree):
data = self.git("log", *args) data = self.git("log", *args)
return [self.commit_cls(self, sha1) for sha1 in data.split("\0") if sha1] return [self.commit_cls(self, sha1) for sha1 in data.split("\0") if sha1]
def import_patch(self, patch): def import_patch(self, patch, strip_count):
"""Import a patch file into the tree and commit it """Import a patch file into the tree and commit it
:param patch: a Patch object containing the patch to import :param patch: a Patch object containing the patch to import
@ -79,7 +79,7 @@ class GitTree(wptupdate.tree.GitTree):
f.write(patch.diff) f.write(patch.diff)
f.flush() f.flush()
f.seek(0) f.seek(0)
self.git("apply", "--index", f.name) self.git("apply", "--index", f.name, "-p", str(strip_count))
self.git("commit", "-m", patch.message.text, "--author=%s" % patch.full_author) self.git("commit", "-m", patch.message.text, "--author=%s" % patch.full_author)
def rebase(self, ref, continue_rebase=False): def rebase(self, ref, continue_rebase=False):

View file

@ -14,32 +14,13 @@ from .github import GitHub
def rewrite_patch(patch, strip_dir): def rewrite_patch(patch, strip_dir):
"""Take a Patch and convert to a different repository by stripping a prefix from the """Take a Patch and rewrite the message to remove the bug number and reviewer, but add
file paths. Also rewrite the message to remove the bug number and reviewer, but add
a bugzilla link in the summary. a bugzilla link in the summary.
:param patch: the Patch to convert :param patch: the Patch to convert
:param strip_dir: the path prefix to remove
""" """
if not strip_dir.startswith("/"): return Patch(patch.author, patch.email, rewrite_message(patch), None, patch.diff)
strip_dir = "/%s"% strip_dir
new_diff = []
line_starts = ["diff ", "+++ ", "--- "]
for line in patch.diff.split("\n"):
for start in line_starts:
if line.startswith(start):
new_diff.append(line.replace(strip_dir, "").encode("utf8"))
break
else:
new_diff.append(line)
new_diff = "\n".join(new_diff)
assert new_diff != patch
return Patch(patch.author, patch.email, rewrite_message(patch), None, new_diff)
def rewrite_message(patch): def rewrite_message(patch):
if patch.merge_message and patch.merge_message.bug: if patch.merge_message and patch.merge_message.bug:
@ -223,8 +204,11 @@ class MovePatches(Step):
self.logger.info("Moving commit %i: %s" % (i, commit.message.full_summary)) self.logger.info("Moving commit %i: %s" % (i, commit.message.full_summary))
patch = commit.export_patch(state.tests_path) patch = commit.export_patch(state.tests_path)
stripped_patch = rewrite_patch(patch, strip_path) stripped_patch = rewrite_patch(patch, strip_path)
strip_count = strip_path.count('/')
if strip_path[-1] != '/':
strip_count += 1
try: try:
state.sync_tree.import_patch(stripped_patch) state.sync_tree.import_patch(stripped_patch, 1 + strip_count)
except: except:
print patch.diff print patch.diff
raise raise