mklog: support renaming of files

Message ID 5ac665ab-5d18-ca05-04fc-8add9f6ced32@suse.cz
State New
Headers show
Series
  • mklog: support renaming of files
Related show

Commit Message

Martin Liška May 27, 2020, 6:15 p.m.
Hi.

There's a patch that utilizes newly added functionality in unidiff 0.6.0.
It newly generates:


$ ./contrib/mklog.py 0001-test.patch
gcc/ChangeLog:

	* ipa-icf.c: Moved to...
	* ipa-icf2.c: ...here.


The support is optional and detected during run-time.

Thoughts?
Martin

Comments

Martin Liška May 28, 2020, 8:27 a.m. | #1
On 5/27/20 8:15 PM, Martin Liška wrote:
> The support is optional and detected during run-time.

> 

> Thoughts?


Pushed as eb78da45ab8.

Martin

Patch

From 8d970b9a57ee373cacbbd2aa29cdbe1c29df4081 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Wed, 27 May 2020 20:03:50 +0200
Subject: [PATCH] mklog: support renaming of files

contrib/ChangeLog:

	* mklog.py: Support renaming of files.
	One needs unidiff 0.6.0+.
	* test_mklog.py: Test it.
---
 contrib/mklog.py      |  8 ++++++++
 contrib/test_mklog.py | 26 ++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/contrib/mklog.py b/contrib/mklog.py
index fb58661b5eb..243edbb15c5 100755
--- a/contrib/mklog.py
+++ b/contrib/mklog.py
@@ -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:
diff --git a/contrib/test_mklog.py b/contrib/test_mklog.py
index ef7f2b1a594..344b7a2c771 100755
--- a/contrib/test_mklog.py
+++ b/contrib/test_mklog.py
@@ -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
-- 
2.26.2