[Python-checkins] bpo-44074: let patchcheck infer the base branch name (GH-25991)

miss-islington webhook-mailer at python.org
Mon May 10 14:58:50 EDT 2021


https://github.com/python/cpython/commit/fbd9b9939cffda4936a986bc729833c69b61f4cb
commit: fbd9b9939cffda4936a986bc729833c69b61f4cb
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2021-05-10T11:58:45-07:00
summary:

bpo-44074: let patchcheck infer the base branch name (GH-25991)

(cherry picked from commit 21fbbb98bac8bfe56f8b931258c36750e84f9285)

Co-authored-by: Leonardo Lai <leonardo.lai at live.com>

files:
A Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst
M Tools/scripts/patchcheck.py

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 00000000000000..8bccb080a54186
--- /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 8a8480a0c22b37..d9cceb5d5acdfd 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
 
 



More information about the Python-checkins mailing list