diff options
author | Patrick Wendell <pwendell@gmail.com> | 2014-04-06 21:04:45 -0700 |
---|---|---|
committer | Patrick Wendell <pwendell@gmail.com> | 2014-04-06 21:04:45 -0700 |
commit | 87d0928a3301835705652c24a26096546597e156 (patch) | |
tree | baa8fd7ab659c053e837ae4ed47830e68152f8a2 | |
parent | 1440154c27ca48b5a75103eccc9057286d3f6ca8 (diff) | |
download | spark-87d0928a3301835705652c24a26096546597e156.tar.gz spark-87d0928a3301835705652c24a26096546597e156.tar.bz2 spark-87d0928a3301835705652c24a26096546597e156.zip |
SPARK-1431: Allow merging conflicting pull requests
Sometimes if there is a small conflict it's nice to be able to just
manually fix it up rather than have another RTT with the contributor.
Author: Patrick Wendell <pwendell@gmail.com>
Closes #342 from pwendell/merge-conflicts and squashes the following commits:
cdce61a [Patrick Wendell] SPARK-1431: Allow merging conflicting pull requests
-rwxr-xr-x | dev/merge_spark_pr.py | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/dev/merge_spark_pr.py b/dev/merge_spark_pr.py index e8f78fc5f2..7a61943e94 100755 --- a/dev/merge_spark_pr.py +++ b/dev/merge_spark_pr.py @@ -87,11 +87,20 @@ def merge_pr(pr_num, target_ref): run_cmd("git fetch %s %s:%s" % (PUSH_REMOTE_NAME, target_ref, target_branch_name)) run_cmd("git checkout %s" % target_branch_name) - run_cmd(['git', 'merge', pr_branch_name, '--squash']) + had_conflicts = False + try: + run_cmd(['git', 'merge', pr_branch_name, '--squash']) + except Exception as e: + msg = "Error merging: %s\nWould you like to manually fix-up this merge?" % e + continue_maybe(msg) + msg = "Okay, please fix any conflicts and 'git add' conflicting files... Finished?" + continue_maybe(msg) + had_conflicts = True commit_authors = run_cmd(['git', 'log', 'HEAD..%s' % pr_branch_name, '--pretty=format:%an <%ae>']).split("\n") - distinct_authors = sorted(set(commit_authors), key=lambda x: commit_authors.count(x), reverse=True) + distinct_authors = sorted(set(commit_authors), key=lambda x: commit_authors.count(x), + reverse=True) primary_author = distinct_authors[0] commits = run_cmd(['git', 'log', 'HEAD..%s' % pr_branch_name, '--pretty=format:%h [%an] %s']).split("\n\n") @@ -105,6 +114,13 @@ def merge_pr(pr_num, target_ref): merge_message_flags += ["-m", authors] + if had_conflicts: + committer_name = run_cmd("git config --get user.name").strip() + committer_email = run_cmd("git config --get user.email").strip() + message = "This patch had conflicts when merged, resolved by\nCommitter: %s <%s>" % ( + committer_name, committer_email) + merge_message_flags += ["-m", message] + # The string "Closes #%s" string is required for GitHub to correctly close the PR merge_message_flags += ["-m", "Closes #%s from %s and squashes the following commits:" % (pr_num, pr_repo_desc)] @@ -186,8 +202,10 @@ if pr["merged"] == True: maybe_cherry_pick(pr_num, merge_hash, latest_branch) sys.exit(0) -if bool(pr["mergeable"]) == False: - fail("Pull request %s is not mergeable in its current form" % pr_num) +if not bool(pr["mergeable"]): + msg = "Pull request %s is not mergeable in its current form.\n" % pr_num + \ + "Continue? (experts only!)" + continue_maybe(msg) print ("\n=== Pull Request #%s ===" % pr_num) print("title\t%s\nsource\t%s\ntarget\t%s\nurl\t%s" % ( |