]> granicus.if.org Git - python/commitdiff
Issue #24031: make patchcheck now supports git checkouts, too.
authorChristian Heimes <christian@python.org>
Thu, 23 Apr 2015 09:24:14 +0000 (11:24 +0200)
committerChristian Heimes <christian@python.org>
Thu, 23 Apr 2015 09:24:14 +0000 (11:24 +0200)
Misc/NEWS
Tools/scripts/patchcheck.py

index 24b515f1b2d0abc21177bbd6d83b609c26a26a53..3d2e09f1bd73edb58348c118aaa69fb311acff0b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -225,6 +225,10 @@ Documentation
 
 - Issue #24029: Document the name binding behavior for submodule imports.
 
+Tools/Demos
+-----------
+
+- Issue #24031: make patchcheck now supports git checkouts, too.
 
 What's New in Python 3.4.3?
 ===========================
index 1b515201a8d0d802a14ada2d05401691ed5d7d12..58b081a9c53ff5f17c9bb321299b5e1a376b1850 100755 (executable)
@@ -49,15 +49,31 @@ def mq_patches_applied():
 @status("Getting the list of files that have been added/changed",
         info=lambda x: n_files_str(len(x)))
 def changed_files():
-    """Get the list of changed or added files from Mercurial."""
-    if not os.path.isdir(os.path.join(SRCDIR, '.hg')):
-        sys.exit('need a checkout to get modified files')
-
-    cmd = 'hg status --added --modified --no-status'
-    if mq_patches_applied():
-        cmd += ' --rev qparent'
-    with subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) as st:
-        return [x.decode().rstrip() for x in st.stdout]
+    """Get the list of changed or added files from Mercurial or git."""
+    if os.path.isdir(os.path.join(SRCDIR, '.hg')):
+        cmd = 'hg status --added --modified --no-status'
+        if mq_patches_applied():
+            cmd += ' --rev qparent'
+        with subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) as st:
+            return [x.decode().rstrip() for x in st.stdout]
+    elif os.path.isdir(os.path.join(SRCDIR, '.git')):
+        cmd = 'git status --porcelain'
+        filenames = []
+        with subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) as st:
+            for line in st.stdout:
+                line = line.decode().rstrip()
+                status = set(line[:2])
+                # modified, added or unmerged files
+                if not status.intersection('MAU'):
+                    continue
+                filename = line[3:]
+                if ' -> ' in filename:
+                    # file is renamed
+                    filename = filename.split(' -> ', 2)[1].strip()
+                filenames.append(filename)
+        return filenames
+    else:
+        sys.exit('need a Mercurial or git checkout to get modified files')
 
 
 def report_modified_files(file_paths):