diff options
author | Leonardo Lai <leonardo.lai@live.com> | 2021-05-10 18:34:27 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-10 18:34:27 (GMT) |
commit | 21fbbb98bac8bfe56f8b931258c36750e84f9285 (patch) | |
tree | e1d380e0a056046625f56f17460b84ecabb6f7b6 /Tools/scripts | |
parent | 2a031723eefcf6f1d678bbb4f6018610d43623c4 (diff) | |
download | cpython-21fbbb98bac8bfe56f8b931258c36750e84f9285.zip cpython-21fbbb98bac8bfe56f8b931258c36750e84f9285.tar.gz cpython-21fbbb98bac8bfe56f8b931258c36750e84f9285.tar.bz2 |
bpo-44074: let patchcheck infer the base branch name (GH-25991)
Diffstat (limited to 'Tools/scripts')
-rwxr-xr-x | Tools/scripts/patchcheck.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index 8a8480a..d9cceb5 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -50,7 +50,8 @@ def get_git_branch(): try: return subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return None @@ -64,28 +65,49 @@ def get_git_upstream_remote(): try: subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return "origin" return "upstream" +def get_git_remote_default_branch(remote_name): + """Get the name of the default branch for the given remote + + It is typically called 'main', but may differ + """ + cmd = "git remote show {}".format(remote_name).split() + try: + remote_info = subprocess.check_output(cmd, + stderr=subprocess.DEVNULL, + cwd=SRCDIR, + encoding='UTF-8') + except subprocess.CalledProcessError: + return None + for line in remote_info.splitlines(): + if "HEAD branch:" in line: + base_branch = line.split(":")[1].strip() + return base_branch + return None + + @status("Getting base branch for PR", info=lambda x: x if x is not None else "not a PR branch") def get_base_branch(): if not os.path.exists(os.path.join(SRCDIR, '.git')): # Not a git checkout, so there's no base branch return None + upstream_remote = get_git_upstream_remote() version = sys.version_info if version.releaselevel == 'alpha': - base_branch = "master" + base_branch = get_git_remote_default_branch(upstream_remote) else: base_branch = "{0.major}.{0.minor}".format(version) this_branch = get_git_branch() if this_branch is None or this_branch == base_branch: # Not on a git PR branch, so there's no base branch return None - upstream_remote = get_git_upstream_remote() return upstream_remote + "/" + base_branch |