gcc-changelog: fix parse_git_name_status for renames.
authorMartin Liska <mliska@suse.cz>
Wed, 10 Jun 2020 14:07:10 +0000 (16:07 +0200)
committerMartin Liska <mliska@suse.cz>
Wed, 10 Jun 2020 14:07:10 +0000 (16:07 +0200)
Renamed files are listed in the following format:

M gcc/ada/Makefile.rtl
M gcc/ada/impunit.adb
R097 gcc/ada/libgnat/s-atopar.adb gcc/ada/libgnat/s-aoinar.adb
R095 gcc/ada/libgnat/s-atopar.ads gcc/ada/libgnat/s-aoinar.ads
A gcc/ada/libgnat/s-aomoar.adb
A gcc/ada/libgnat/s-aomoar.ads

So 'R' is followed by a percentage number.

contrib/ChangeLog:

* gcc-changelog/git_commit.py: Fix renamed files in
parse_git_name_status.
* gcc-changelog/test_email.py: Add test for it.

contrib/gcc-changelog/git_commit.py
contrib/gcc-changelog/test_email.py

index eac648870532dc4ec275d2da822f64264abe176d..e868e02822505896a9f4e3da5039ae01220b2514 100755 (executable)
@@ -322,7 +322,7 @@ class GitCommit:
             t = parts[0]
             if t == 'A' or t == 'D' or t == 'M':
                 modified_files.append((parts[1], t))
-            elif t == 'R':
+            elif t.startswith('R'):
                 modified_files.append((parts[1], 'D'))
                 modified_files.append((parts[2], 'A'))
         return modified_files
index c50687bc331c505e5e0ce25786c28a8b98e26c86..a185b85e8380c3b6dc6869c89e344a8bb2e60491 100755 (executable)
@@ -20,6 +20,8 @@ import os
 import tempfile
 import unittest
 
+from git_commit import GitCommit
+
 from git_email import GitEmail
 
 import unidiff
@@ -29,6 +31,12 @@ script_path = os.path.dirname(os.path.realpath(__file__))
 unidiff_supports_renaming = hasattr(unidiff.PatchedFile(), 'is_rename')
 
 
+NAME_STATUS1 = """
+M      gcc/ada/impunit.adb'
+R097   gcc/ada/libgnat/s-atopar.adb    gcc/ada/libgnat/s-aoinar.adb
+"""
+
+
 class TestGccChangelog(unittest.TestCase):
     def setUp(self):
         self.patches = {}
@@ -337,3 +345,9 @@ class TestGccChangelog(unittest.TestCase):
         email = self.from_patch_glob('0001-configure.patch')
         assert not email.errors
         assert len(email.changelog_entries) == 2
+
+    def test_parse_git_name_status(self):
+        modified_files = GitCommit.parse_git_name_status(NAME_STATUS1)
+        assert len(modified_files) == 3
+        assert modified_files[1] == ('gcc/ada/libgnat/s-atopar.adb', 'D')
+        assert modified_files[2] == ('gcc/ada/libgnat/s-aoinar.adb', 'A')