]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] patchcheck: use URL paths to identify upstream remote (GH-135806) (#135809)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 23 Jun 2025 09:57:03 +0000 (11:57 +0200)
committerGitHub <noreply@github.com>
Mon, 23 Jun 2025 09:57:03 +0000 (12:57 +0300)
Co-authored-by: Kattni <kattni@kattni.com>
Misc/ACKS
Tools/patchcheck/patchcheck.py

index 3adb168f33c40a63de93c2124919cf05e51c976d..d2fdeb8f3178fefa93203d6a47d0f93a221301c7 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -931,6 +931,7 @@ Anton Kasyanov
 Lou Kates
 Makoto Kato
 Irit Katriel
+Kattni
 Hiroaki Kawai
 Dmitry Kazakov
 Brian Kearns
index af1f0584bb54035e8221ce805aa63a1f096bcbdc..22a8059f1670a02492b1734c099fd648c808ceca 100755 (executable)
@@ -65,19 +65,43 @@ def get_git_branch():
 
 
 def get_git_upstream_remote():
-    """Get the remote name to use for upstream branches
+    """
+    Get the remote name to use for upstream branches
 
-    Uses "upstream" if it exists, "origin" otherwise
+    Check for presence of "https://github.com/python/cpython" remote URL.
+    If only one is found, return that remote name. If multiple are found,
+    check for and return "upstream", "origin", or "python", in that
+    order. Raise an error if no valid matches are found.
     """
-    cmd = "git remote get-url upstream".split()
-    try:
-        subprocess.check_output(cmd,
-                                stderr=subprocess.DEVNULL,
-                                cwd=SRCDIR,
-                                encoding='UTF-8')
-    except subprocess.CalledProcessError:
-        return "origin"
-    return "upstream"
+    cmd = "git remote -v".split()
+    output = subprocess.check_output(
+        cmd,
+        stderr=subprocess.DEVNULL,
+        cwd=SRCDIR,
+        encoding="UTF-8"
+    )
+    # Filter to desired remotes, accounting for potential uppercasing
+    filtered_remotes = {
+        remote.split("\t")[0].lower() for remote in output.split('\n')
+        if "python/cpython" in remote.lower() and remote.endswith("(fetch)")
+    }
+    if len(filtered_remotes) == 1:
+        [remote] = filtered_remotes
+        return remote
+    for remote_name in ["upstream", "origin", "python"]:
+        if remote_name in filtered_remotes:
+            return remote_name
+    remotes_found = "\n".join(
+        {remote for remote in output.split('\n') if remote.endswith("(fetch)")}
+    )
+    raise ValueError(
+        f"Patchcheck was unable to find an unambiguous upstream remote, "
+        f"with URL matching 'https://github.com/python/cpython'. "
+        f"For help creating an upstream remote, see Dev Guide: "
+        f"https://devguide.python.org/getting-started/"
+        f"git-boot-camp/#cloning-a-forked-cpython-repository "
+        f"\nRemotes found: \n{remotes_found}"
+        )
 
 
 def get_git_remote_default_branch(remote_name):