blob: 6a0e5c769564f468b71a8489210435a2a708563d [file] [log] [blame] [edit]
#!/usr/bin/env python
"""Make a pull request from HEAD"""
from __future__ import print_function
from argparse import ArgumentParser
from subprocess import check_call, check_output, Popen, PIPE, CalledProcessError
import sys
import re
import os
import yaml
import github3
CONFIG_PATH = "~/.config/hub"
OWNER = "rohanpm"
REPO = "more-executors"
def github_session():
with open(os.path.expanduser(CONFIG_PATH)) as f:
hub_config = yaml.load(f)
creds = hub_config.get("github.com", [])
if not creds:
raise RuntimeError("Login with 'hub' command first")
if len(creds) != 1:
raise RuntimeError("Unexpected content in %s" % CONFIG_PATH)
token = creds[0].get("oauth_token")
if not token:
raise RuntimeError("Missing token in %s" % CONFIG_PATH)
return github3.login(token=token)
def run(raw_args):
parser = ArgumentParser()
parser.add_argument("name", help="name for branch")
parser.add_argument(
"--remove-branch",
action="store_true",
help="remove branch if it already exists",
)
parser.add_argument(
"--skip-rebase", action="store_true", help="do not rebase on master before push"
)
parser.add_argument("-m", help="pull-request message")
args = parser.parse_args(raw_args)
if args.remove_branch:
try:
check_call(["git", "branch", "-D", args.name])
except CalledProcessError:
pass
check_call(["git", "checkout", "-b", args.name])
if not args.skip_rebase:
check_call(["git", "fetch", "origin"])
check_call(["git", "rebase", "-i", "origin/master"])
check_call(["git", "push", "-f", "--set-upstream", "origin", args.name])
pr_cmd = ["hub", "pull-request"]
if args.m:
pr_cmd.extend(["-m", args.m])
check_call(pr_cmd)
if __name__ == "__main__":
run(sys.argv[1:])