youtubebeat/vendor/github.com/elastic/beats/dev-tools/merge_pr

63 lines
2.4 KiB
Python
Executable file

#!/usr/bin/env python
import sys
import argparse
from subprocess import check_call, call, check_output
def main():
parser = argparse.ArgumentParser(
description="Creates a PR for merging two branches")
parser.add_argument("from_branch",
help="From branch (e.g 1.1)")
parser.add_argument("to_branch",
help="To branch (e.g master)")
parser.add_argument("--yes", action="store_true",
help="Assume yes. Warning: discards local changes.")
parser.add_argument("--continue", action="store_true",
help="Continue after fixing merging errors.")
args = parser.parse_args()
tmp_branch = "automatic_merge_from_{}_to_{}_branch".format(
args.from_branch, args.to_branch)
if not vars(args)["continue"]:
if not args.yes and raw_input("This will destroy all local changes. " +
"Continue? [y/n]: ") != "y":
return 1
check_call("git reset --hard", shell=True)
check_call("git clean -df", shell=True)
check_call("git fetch", shell=True)
check_call("git checkout {}".format(args.from_branch), shell=True)
check_call("git pull", shell=True)
check_call("git checkout {}".format(args.to_branch), shell=True)
check_call("git pull", shell=True)
call("git branch -D {} > /dev/null".format(tmp_branch), shell=True)
check_call("git checkout -b {}".format(tmp_branch), shell=True)
if call("git merge {}".format(args.from_branch), shell=True) != 0:
print("Looks like you have merge errors.")
print("Fix them, commit, then run: {} --continue"
.format(" ".join(sys.argv)))
return 1
if len(check_output("git status -s", shell=True).strip()) > 0:
print("Looks like you have uncommitted changes")
return 1
if len(check_output("git log HEAD...{}".format(args.to_branch),
shell=True).strip()) == 0:
print("No commit to push")
return 1
print("Ready to push branch.")
remote = raw_input("To which remote should I push? (your fork): ")
call("git push {} :{} > /dev/null".format(remote, tmp_branch),
shell=True)
check_call("git push --set-upstream {} {}"
.format(remote, tmp_branch), shell=True)
print("Done. Go to Github and open the PR")
if __name__ == "__main__":
sys.exit(main())