mklog: support renaming of files
authorMartin Liska <mliska@suse.cz>
Wed, 27 May 2020 18:03:50 +0000 (20:03 +0200)
committerMartin Liska <mliska@suse.cz>
Thu, 28 May 2020 08:27:09 +0000 (10:27 +0200)
contrib/ChangeLog:

* mklog.py: Support renaming of files.
One needs unidiff 0.6.0+.
* test_mklog.py: Test it.

contrib/mklog.py
contrib/test_mklog.py

index fb58661b5ebb94521fd99dc59c47ccca5e2e00b8..243edbb15c522169709902b27a8558c6e0755107 100755 (executable)
@@ -173,6 +173,14 @@ def generate_changelog(data, no_functions=False, fill_pr_titles=False):
                 out += '\t* %s: %s.\n' % (relative_path, msg)
             elif file.is_removed_file:
                 out += '\t* %s: Removed.\n' % (relative_path)
+            elif hasattr(file, 'is_rename') and file.is_rename:
+                out += '\t* %s: Moved to...\n' % (relative_path)
+                new_path = file.target_file[2:]
+                # A file can be theoretically moved to a location that
+                # belongs to a different ChangeLog.  Let user fix it.
+                if new_path.startswith(changelog):
+                    new_path = new_path[len(changelog):].lstrip('/')
+                out += '\t* %s: ...here.\n' % (new_path)
             else:
                 if not no_functions:
                     for hunk in file:
index ef7f2b1a59428065895c7bb76919ea3b2646b320..344b7a2c77167c03f5c65a4fb436100c6d9fdda4 100755 (executable)
@@ -30,6 +30,11 @@ import unittest
 
 from mklog import generate_changelog
 
+import unidiff
+
+unidiff_supports_renaming = hasattr(unidiff.PatchedFile(), 'is_rename')
+
+
 PATCH1 = '''\
 diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h
 index 567c23380fe..e6209ede9d6 100644
@@ -379,6 +384,21 @@ gcc/testsuite/ChangeLog:
 
 '''
 
+PATCH8 = '''\
+diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf2.c
+similarity index 100%
+rename from gcc/ipa-icf.c
+rename to gcc/ipa-icf2.c
+'''
+
+EXPECTED8 = '''\
+gcc/ChangeLog:
+
+       * ipa-icf.c: Moved to...
+       * ipa-icf2.c: ...here.
+
+'''
+
 class TestMklog(unittest.TestCase):
     def test_macro_definition(self):
         changelog = generate_changelog(PATCH1)
@@ -411,3 +431,9 @@ class TestMklog(unittest.TestCase):
     def test_dr_detection_in_test_case(self):
         changelog = generate_changelog(PATCH7)
         assert changelog == EXPECTED7
+
+    @unittest.skipIf(not unidiff_supports_renaming,
+                     'Newer version of unidiff is needed (0.6.0+)')
+    def test_renaming(self):
+        changelog = generate_changelog(PATCH8)
+        assert changelog == EXPECTED8