summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-05-10 11:58:45 -0700
committerGitHub <noreply@github.com>2021-05-10 11:58:45 -0700
commitfbd9b9939cffda4936a986bc729833c69b61f4cb (patch)
treef771ddf823c088b83f6987fe7b50545c1a7b9bdc
parentbpo-43558: Add note about base class initialization to dataclasses doc (GH-25... (diff)
downloadcpython-fbd9b9939cffda4936a986bc729833c69b61f4cb.tar.gz
cpython-fbd9b9939cffda4936a986bc729833c69b61f4cb.tar.bz2
cpython-fbd9b9939cffda4936a986bc729833c69b61f4cb.zip
bpo-44074: let patchcheck infer the base branch name (GH-25991)
(cherry picked from commit 21fbbb98bac8bfe56f8b931258c36750e84f9285) Co-authored-by: Leonardo Lai <leonardo.lai@live.com>
-rw-r--r--Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst1
-rwxr-xr-xTools/scripts/patchcheck.py30
2 files changed, 27 insertions, 4 deletions
diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst
new file mode 100644
index 00000000000..8bccb080a54
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst
@@ -0,0 +1 @@
+Make patchcheck automatically detect the correct base branch name (previously it was hardcoded to 'master') \ No newline at end of file
diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py
index 8a8480a0c22..d9cceb5d5ac 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