public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
       [not found]   ` <68946bf6-4b2f-b8f3-20b3-5cf3f2fd611c@moene.org>
@ 2022-01-11 15:50     ` Martin Liška
  2022-01-11 15:56       ` Jakub Jelinek
  2022-01-11 18:00       ` [PATCH] Mass rename of C++ .c files to .cc suffix Harald Anlauf
  0 siblings, 2 replies; 16+ messages in thread
From: Martin Liška @ 2022-01-11 15:50 UTC (permalink / raw)
  To: Toon Moene, Martin Jambor, GCC Mailing List; +Cc: GCC Patches, gfortran

On 1/11/22 16:48, Toon Moene wrote:
> On 1/11/22 13:56, Martin Liška wrote:
> 
>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>> Plus it survives build of all FEs (--enable-languages=all) on x86_64-linux-gnu
>> and I've built all cross compilers.
> 
> Does this also rename .c files in the fortran and libgfortran directories ?

Hello.

Yes, it does the first one.

> 
> I would recommend to send this message to the fortran@gcc.gnu.org list too, then.
> 
> Not everyone reads the gcc and gcc-patches lists ...

CCing the list now.

Thanks,
Martin

> 
> Kind regards,
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 15:50     ` [PATCH] Mass rename of C++ .c files to .cc suffix Martin Liška
@ 2022-01-11 15:56       ` Jakub Jelinek
  2022-01-11 16:03         ` Martin Liška
  2022-01-11 18:00       ` [PATCH] Mass rename of C++ .c files to .cc suffix Harald Anlauf
  1 sibling, 1 reply; 16+ messages in thread
From: Jakub Jelinek @ 2022-01-11 15:56 UTC (permalink / raw)
  To: Martin Liška
  Cc: Toon Moene, Martin Jambor, GCC Mailing List, GCC Patches, gfortran

On Tue, Jan 11, 2022 at 04:50:02PM +0100, Martin Liška wrote:
> On 1/11/22 16:48, Toon Moene wrote:
> > On 1/11/22 13:56, Martin Liška wrote:
> > 
> > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> > > Plus it survives build of all FEs (--enable-languages=all) on x86_64-linux-gnu
> > > and I've built all cross compilers.
> > 
> > Does this also rename .c files in the fortran and libgfortran directories ?
> 
> Hello.
> 
> Yes, it does the first one.

And it shouldn't in libgfortran - libgfortran, libgcc, libgomp, libquadmath are all
written in C, not C++.
While e.g. libcpp or gcc are in C++.

	Jakub


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 15:56       ` Jakub Jelinek
@ 2022-01-11 16:03         ` Martin Liška
  2022-01-11 16:16           ` Jakub Jelinek
  0 siblings, 1 reply; 16+ messages in thread
From: Martin Liška @ 2022-01-11 16:03 UTC (permalink / raw)
  To: Jakub Jelinek
  Cc: Toon Moene, Martin Jambor, GCC Mailing List, GCC Patches, gfortran

On 1/11/22 16:56, Jakub Jelinek wrote:
> While e.g. libcpp or gcc are in C++.

Which means I should rename .c files under libcpp, right?
Is there any other folder from gcc/ and libcpp/ that would need that as well?

Martin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 16:03         ` Martin Liška
@ 2022-01-11 16:16           ` Jakub Jelinek
  2022-01-12  8:58             ` Martin Liška
  0 siblings, 1 reply; 16+ messages in thread
From: Jakub Jelinek @ 2022-01-11 16:16 UTC (permalink / raw)
  To: Martin Liška
  Cc: Toon Moene, Martin Jambor, GCC Mailing List, GCC Patches, gfortran

On Tue, Jan 11, 2022 at 05:03:34PM +0100, Martin Liška wrote:
> On 1/11/22 16:56, Jakub Jelinek wrote:
> > While e.g. libcpp or gcc are in C++.
> 
> Which means I should rename .c files under libcpp, right?
> Is there any other folder from gcc/ and libcpp/ that would need that as well?

From the directories that use .c files for C++, I think that is all.
c++tools/, libcody/, libitm/, libsanitizer/, libstdc++-v3/ already
use .cc or .cpp.

	Jakub


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 15:50     ` [PATCH] Mass rename of C++ .c files to .cc suffix Martin Liška
  2022-01-11 15:56       ` Jakub Jelinek
@ 2022-01-11 18:00       ` Harald Anlauf
  2022-01-11 18:00         ` Harald Anlauf
  2022-01-11 18:23         ` Jonathan Wakely
  1 sibling, 2 replies; 16+ messages in thread
From: Harald Anlauf @ 2022-01-11 18:00 UTC (permalink / raw)
  To: Martin Liška, Toon Moene, Martin Jambor, GCC Mailing List
  Cc: GCC Patches, gfortran

Am 11.01.22 um 16:50 schrieb Martin Liška:
> On 1/11/22 16:48, Toon Moene wrote:
>> On 1/11/22 13:56, Martin Liška wrote:
>>
>>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>>> Plus it survives build of all FEs (--enable-languages=all) on
>>> x86_64-linux-gnu
>>> and I've built all cross compilers.
>>
>> Does this also rename .c files in the fortran and libgfortran
>> directories ?
>
> Hello.
>
> Yes, it does the first one.

Regarding fortran: can we have a vote on this one?

Some developers (including myself) are not really familiar with C++,
and in the past preference has been expressed on the fortran ML in
favor of not using too much C++.

I would also not really be in a position to review real C++ code.

Thanks,
Harald

>>
>> I would recommend to send this message to the fortran@gcc.gnu.org list
>> too, then.
>>
>> Not everyone reads the gcc and gcc-patches lists ...
>
> CCing the list now.
>
> Thanks,
> Martin
>
>>
>> Kind regards,
>>
>
>


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 18:00       ` [PATCH] Mass rename of C++ .c files to .cc suffix Harald Anlauf
@ 2022-01-11 18:00         ` Harald Anlauf
  2022-01-11 18:23         ` Jonathan Wakely
  1 sibling, 0 replies; 16+ messages in thread
From: Harald Anlauf @ 2022-01-11 18:00 UTC (permalink / raw)
  To: fortran; +Cc: gcc, gcc-patches

Am 11.01.22 um 16:50 schrieb Martin Liška:
> On 1/11/22 16:48, Toon Moene wrote:
>> On 1/11/22 13:56, Martin Liška wrote:
>>
>>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>>> Plus it survives build of all FEs (--enable-languages=all) on 
>>> x86_64-linux-gnu
>>> and I've built all cross compilers.
>>
>> Does this also rename .c files in the fortran and libgfortran 
>> directories ?
> 
> Hello.
> 
> Yes, it does the first one.

Regarding fortran: can we have a vote on this one?

Some developers (including myself) are not really familiar with C++,
and in the past preference has been expressed on the fortran ML in
favor of not using too much C++.

I would also not really be in a position to review real C++ code.

Thanks,
Harald

>>
>> I would recommend to send this message to the fortran@gcc.gnu.org list 
>> too, then.
>>
>> Not everyone reads the gcc and gcc-patches lists ...
> 
> CCing the list now.
> 
> Thanks,
> Martin
> 
>>
>> Kind regards,
>>
> 
> 



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 18:00       ` [PATCH] Mass rename of C++ .c files to .cc suffix Harald Anlauf
  2022-01-11 18:00         ` Harald Anlauf
@ 2022-01-11 18:23         ` Jonathan Wakely
  2022-01-11 18:36           ` Jakub Jelinek
  1 sibling, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2022-01-11 18:23 UTC (permalink / raw)
  To: Harald Anlauf
  Cc: Martin Liška, Toon Moene, Martin Jambor, GCC Mailing List,
	GCC Patches, gfortran

On Tue, 11 Jan 2022 at 18:02, Harald Anlauf via Gcc <gcc@gcc.gnu.org> wrote:
>
> Am 11.01.22 um 16:50 schrieb Martin Liška:
> > On 1/11/22 16:48, Toon Moene wrote:
> >> On 1/11/22 13:56, Martin Liška wrote:
> >>
> >>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> >>> Plus it survives build of all FEs (--enable-languages=all) on
> >>> x86_64-linux-gnu
> >>> and I've built all cross compilers.
> >>
> >> Does this also rename .c files in the fortran and libgfortran
> >> directories ?
> >
> > Hello.
> >
> > Yes, it does the first one.
>
> Regarding fortran: can we have a vote on this one?
>
> Some developers (including myself) are not really familiar with C++,
> and in the past preference has been expressed on the fortran ML in
> favor of not using too much C++.
>
> I would also not really be in a position to review real C++ code.

The discussion is purely about renaming files that are *already* C++
source files but have the misleading .c file extension.

Nobody is suggesting using C++ where it isn't already being used.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 18:23         ` Jonathan Wakely
@ 2022-01-11 18:36           ` Jakub Jelinek
  0 siblings, 0 replies; 16+ messages in thread
From: Jakub Jelinek @ 2022-01-11 18:36 UTC (permalink / raw)
  To: Jonathan Wakely; +Cc: Harald Anlauf, GCC Mailing List, gfortran, GCC Patches

On Tue, Jan 11, 2022 at 06:23:51PM +0000, Jonathan Wakely via Gcc-patches wrote:
> > Regarding fortran: can we have a vote on this one?
> >
> > Some developers (including myself) are not really familiar with C++,
> > and in the past preference has been expressed on the fortran ML in
> > favor of not using too much C++.
> >
> > I would also not really be in a position to review real C++ code.
> 
> The discussion is purely about renaming files that are *already* C++
> source files but have the misleading .c file extension.
> 
> Nobody is suggesting using C++ where it isn't already being used.

And even gcc/fortran/ is written in C++, the gcc/ headers it uses are C++
only, they use templates etc., so gcc/fortran/ that uses those headers
has to be C++ too.  That doesn't mean you need to use C++ idioms everywhere
in your code, those files can stay to be mostly C-like with C++ headers and
use C++-only constructs only where it brings sufficient advantages.
Many of the gcc/*.c sources that Martin wants to rename are also written
like that.
The renaming will just match the reality, clang++ will stop warning that
support for .c extension for C++ is deprecated when building gcc, sites like
openhub.net (if they twice a year manage to build stats for gcc, dunno what
they are doing wrong or if it is because of the limiting of anonymous git
on sourceware) will not claim most of GCC is written in C etc.

	Jakub


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] Mass rename of C++ .c files to .cc suffix
  2022-01-11 16:16           ` Jakub Jelinek
@ 2022-01-12  8:58             ` Martin Liška
  2022-01-12 15:54               ` [PATCH] git-backport: support renamed .cc files in commit message Martin Liška
  0 siblings, 1 reply; 16+ messages in thread
From: Martin Liška @ 2022-01-12  8:58 UTC (permalink / raw)
  To: Jakub Jelinek
  Cc: Toon Moene, Martin Jambor, GCC Mailing List, GCC Patches, gfortran

On 1/11/22 17:16, Jakub Jelinek wrote:
> On Tue, Jan 11, 2022 at 05:03:34PM +0100, Martin Liška wrote:
>> On 1/11/22 16:56, Jakub Jelinek wrote:
>>> While e.g. libcpp or gcc are in C++.
>>
>> Which means I should rename .c files under libcpp, right?
>> Is there any other folder from gcc/ and libcpp/ that would need that as well?
> 
>  From the directories that use .c files for C++, I think that is all.
> c++tools/, libcody/, libitm/, libsanitizer/, libstdc++-v3/ already
> use .cc or .cpp.

All right, I've included libcpp folder in the renaming effort.

Please take a look at V2 of the series here:
https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;a=log;h=refs/users/marxin/heads/cc-renaming

Now I filled up complete ChangeLog entries and I'm asking for a patchset approval.

Cheers,
Martin

> 
> 	Jakub
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-12  8:58             ` Martin Liška
@ 2022-01-12 15:54               ` Martin Liška
  2022-01-14  7:44                 ` Bernhard Reutner-Fischer
  2022-01-17 21:26                 ` Martin Liška
  0 siblings, 2 replies; 16+ messages in thread
From: Martin Liška @ 2022-01-12 15:54 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: GCC Mailing List, Martin Jambor, GCC Patches, gfortran

[-- Attachment #1: Type: text/plain, Size: 1231 bytes --]

Hi.

There's a patch that enhances git-backport so that it updates commit
messages for files which name ends now with .cc and is still .c on a branch.

Example usage:

$ git show test
commit 8ed4b2cb9aa158c0ef418fd1ac66271664904604 (test)
Author: Martin Liska <mliska@suse.cz>
Date:   Wed Jan 12 16:08:13 2022 +0100

     Fix file.
     
     gcc/ChangeLog:
     
             * ipa-icf.cc: Test me.
     
     gcc/ada/ChangeLog:
     
             * cal.c: aaa.
     
     libcpp/ChangeLog:
     
             * expr.cc: aaa.

$ git gcc-backport test
Auto-merging gcc/ada/cal.c
Auto-merging gcc/ipa-icf.c
Auto-merging libcpp/expr.c
[test2 ee40feb077e] Fix file.
  Date: Wed Jan 12 16:08:13 2022 +0100
  3 files changed, 3 insertions(+)
Commit message updated: 2 .cc file(s) changed.

$ git show test2
commit f59a1e736c1b68f07d83388a994df8d043e8aa6e (test2)
Author: Martin Liska <mliska@suse.cz>
Date:   Wed Jan 12 16:08:13 2022 +0100

     Fix file.
     
     gcc/ChangeLog:
     
             * ipa-icf.c: Test me.
     
     gcc/ada/ChangeLog:
     
             * cal.c: aaa.
     
     libcpp/ChangeLog:
     
             * expr.c: aaa.
     
     (cherry picked from commit 8ed4b2cb9aa158c0ef418fd1ac66271664904604)

Martin

[-- Attachment #2: 0001-git-backport-support-renamed-.cc-files-in-commit-mes.patch --]
[-- Type: text/x-patch, Size: 2987 bytes --]

From 647a6dbaf8cde4ee07b95c4530a03f7774500914 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Wed, 12 Jan 2022 16:35:41 +0100
Subject: [PATCH] git-backport: support renamed .cc files in commit message.

The change can automatically update names for *.cc files that
are part of a backport.

contrib/ChangeLog:

	* git-backport.py: Support renaming of .cc files.
---
 contrib/git-backport.py | 50 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/contrib/git-backport.py b/contrib/git-backport.py
index 2b8e4686719..627bbd9ee66 100755
--- a/contrib/git-backport.py
+++ b/contrib/git-backport.py
@@ -20,7 +20,32 @@
 # Boston, MA 02110-1301, USA.
 
 import argparse
+import os
 import subprocess
+import sys
+import tempfile
+
+script_folder = os.path.dirname(os.path.abspath(__file__))
+verify_script = os.path.join(script_folder,
+                             'gcc-changelog/git_check_commit.py')
+
+
+def replace_file_in_changelog(lines, filename):
+    if not filename.endswith('.cc'):
+        return
+
+    # consider all componenets of a path: gcc/ipa-icf.cc
+    while filename:
+        for i, line in enumerate(lines):
+            if filename in line:
+                line = line.replace(filename, filename[:-1])
+                lines[i] = line
+                return
+        parts = filename.split('/')
+        if len(parts) == 1:
+            return
+        filename = '/'.join(parts[1:])
+
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Backport a git revision and '
@@ -63,3 +88,28 @@ if __name__ == '__main__':
             subprocess.check_output(cmd, shell=True)
         else:
             print('Please resolve all remaining file conflicts.')
+            sys.exit(1)
+
+    # Update commit message if change for a .cc file was taken
+    r = subprocess.run(f'{verify_script} HEAD', shell=True, encoding='utf8',
+                       stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    if r.returncode != 0:
+        lines = r.stdout.splitlines()
+        cmd = 'git show -s --format=%B'
+        commit_message = subprocess.check_output(cmd, shell=True,
+                                                 encoding='utf8').strip()
+        commit_message = commit_message.splitlines()
+
+        todo = [line for line in lines if 'unchanged file mentioned' in line]
+        for item in todo:
+            filename = item.split()[-1].strip('"')
+            replace_file_in_changelog(commit_message, filename)
+
+        with tempfile.NamedTemporaryFile('w', encoding='utf8',
+                                         delete=False) as w:
+            w.write('\n'.join(commit_message))
+            w.close()
+            subprocess.check_output(f'git commit --amend -F {w.name}',
+                                    shell=True, encoding='utf8')
+            os.unlink(w.name)
+            print(f'Commit message updated: {len(todo)} .cc file(s) changed.')
-- 
2.34.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-12 15:54               ` [PATCH] git-backport: support renamed .cc files in commit message Martin Liška
@ 2022-01-14  7:44                 ` Bernhard Reutner-Fischer
  2022-01-14 15:26                   ` Martin Liška
  2022-01-17 21:26                 ` Martin Liška
  1 sibling, 1 reply; 16+ messages in thread
From: Bernhard Reutner-Fischer @ 2022-01-14  7:44 UTC (permalink / raw)
  To: Martin Liška
  Cc: rep.dot.nop, Jakub Jelinek, GCC Mailing List, Martin Jambor,
	GCC Patches, gfortran

On Wed, 12 Jan 2022 16:54:46 +0100
Martin Liška <mliska@suse.cz> wrote:

> +def replace_file_in_changelog(lines, filename):
> +    if not filename.endswith('.cc'):
> +        return
> +
> +    # consider all componenets of a path: gcc/ipa-icf.cc
> +    while filename:
> +        for i, line in enumerate(lines):
> +            if filename in line:
> +                line = line.replace(filename, filename[:-1])
> +                lines[i] = line
> +                return
> +        parts = filename.split('/')
> +        if len(parts) == 1:
> +            return
> +        filename = '/'.join(parts[1:])
> +

I think you mean os.sep instead of the hardcoded slash.
But i'd use os.path.split and os.path.join

thanks,

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-14  7:44                 ` Bernhard Reutner-Fischer
@ 2022-01-14 15:26                   ` Martin Liška
  0 siblings, 0 replies; 16+ messages in thread
From: Martin Liška @ 2022-01-14 15:26 UTC (permalink / raw)
  To: Bernhard Reutner-Fischer
  Cc: Jakub Jelinek, GCC Mailing List, Martin Jambor, GCC Patches, gfortran

On 1/14/22 08:44, Bernhard Reutner-Fischer wrote:
> On Wed, 12 Jan 2022 16:54:46 +0100
> Martin Liška <mliska@suse.cz> wrote:
> 
>> +def replace_file_in_changelog(lines, filename):
>> +    if not filename.endswith('.cc'):
>> +        return
>> +
>> +    # consider all componenets of a path: gcc/ipa-icf.cc
>> +    while filename:
>> +        for i, line in enumerate(lines):
>> +            if filename in line:
>> +                line = line.replace(filename, filename[:-1])
>> +                lines[i] = line
>> +                return
>> +        parts = filename.split('/')
>> +        if len(parts) == 1:
>> +            return
>> +        filename = '/'.join(parts[1:])
>> +
> 
> I think you mean os.sep instead of the hardcoded slash.
> But i'd use os.path.split and os.path.join

Hello.

Well, these are all paths from a git commit message. And we require unix-style
of paths for all ChangeLog entries. So it should be correct.

Martin

> 
> thanks,


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-12 15:54               ` [PATCH] git-backport: support renamed .cc files in commit message Martin Liška
  2022-01-14  7:44                 ` Bernhard Reutner-Fischer
@ 2022-01-17 21:26                 ` Martin Liška
  2022-01-18 19:10                   ` Harald Anlauf
  1 sibling, 1 reply; 16+ messages in thread
From: Martin Liška @ 2022-01-17 21:26 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: GCC Mailing List, GCC Patches, gfortran

On 1/12/22 16:54, Martin Liška wrote:
> 
> There's a patch that enhances git-backport so that it updates commit
> messages for files which name ends now with .cc and is still .c on a branch.

The patch has been installed as I've made the renaming now.

Cheers,
Martin

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-17 21:26                 ` Martin Liška
@ 2022-01-18 19:10                   ` Harald Anlauf
  2022-01-18 19:10                     ` Harald Anlauf
  2022-01-19  8:07                     ` Martin Liška
  0 siblings, 2 replies; 16+ messages in thread
From: Harald Anlauf @ 2022-01-18 19:10 UTC (permalink / raw)
  To: Martin Liška, Jakub Jelinek; +Cc: GCC Mailing List, GCC Patches, gfortran

Am 17.01.22 um 22:26 schrieb Martin Liška:
> On 1/12/22 16:54, Martin Liška wrote:
>>
>> There's a patch that enhances git-backport so that it updates commit
>> messages for files which name ends now with .cc and is still .c on a branch.
>>
>
> The patch has been installed as I've made the renaming now.
>
> Cheers,
> Martin
>

I just made a "git rebase" and had to manually fix the filenames
in the commit message.  Otherwise gcc-verify would complain.

Would it make sense to have something that is clever enough for
rebase to do similar things as git-backport?

Thanks,
Harald

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-18 19:10                   ` Harald Anlauf
@ 2022-01-18 19:10                     ` Harald Anlauf
  2022-01-19  8:07                     ` Martin Liška
  1 sibling, 0 replies; 16+ messages in thread
From: Harald Anlauf @ 2022-01-18 19:10 UTC (permalink / raw)
  To: fortran; +Cc: gcc, gcc-patches

Am 17.01.22 um 22:26 schrieb Martin Liška:
> On 1/12/22 16:54, Martin Liška wrote:
>>
>> There's a patch that enhances git-backport so that it updates commit
>> messages for files which name ends now with .cc and is still .c on a branch. 
>>
> 
> The patch has been installed as I've made the renaming now.
> 
> Cheers,
> Martin
> 

I just made a "git rebase" and had to manually fix the filenames
in the commit message.  Otherwise gcc-verify would complain.

Would it make sense to have something that is clever enough for
rebase to do similar things as git-backport?

Thanks,
Harald


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] git-backport: support renamed .cc files in commit message.
  2022-01-18 19:10                   ` Harald Anlauf
  2022-01-18 19:10                     ` Harald Anlauf
@ 2022-01-19  8:07                     ` Martin Liška
  1 sibling, 0 replies; 16+ messages in thread
From: Martin Liška @ 2022-01-19  8:07 UTC (permalink / raw)
  To: Harald Anlauf, fortran; +Cc: gcc, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1031 bytes --]

On 1/18/22 20:10, Harald Anlauf via Fortran wrote:
> Am 17.01.22 um 22:26 schrieb Martin Liška:
>> On 1/12/22 16:54, Martin Liška wrote:
>>>
>>> There's a patch that enhances git-backport so that it updates commit
>>> messages for files which name ends now with .cc and is still .c on a branch.
>>
>> The patch has been installed as I've made the renaming now.
>>
>> Cheers,
>> Martin
>>
> 
> I just made a "git rebase" and had to manually fix the filenames
> in the commit message.  Otherwise gcc-verify would complain.

Sure and I'm adding a new script that basically follows all the 'did you mean'
in gcc-verify and fixes that:

ERR: unchanged file mentioned in a ChangeLog (did you mean "contrib/gcc-git-customization.sh"?): "contrib/gcc2-git-customization.sh"
...

> 
> Would it make sense to have something that is clever enough for
> rebase to do similar things as git-backport?

Yes, a new git alias 'gcc-fix-changelog' is going to be available with the patch.

Martin

> 
> Thanks,
> Harald
> 

[-- Attachment #2: 0001-Come-up-with-git-fix-changelog.py-script.patch --]
[-- Type: text/x-patch, Size: 7804 bytes --]

From 4f502745c8e2562ae192181bf2585bad42414d45 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Wed, 19 Jan 2022 07:57:05 +0100
Subject: [PATCH] Come up with git-fix-changelog.py script.

contrib/ChangeLog:

	* git-backport.py: Use it.
	* git-fix-changelog.py: New file.
	* gcc-git-customization.sh: Add new alias git gcc-fix-changelog.
---
 contrib/gcc-git-customization.sh |  1 +
 contrib/git-backport.py          | 47 +---------------
 contrib/git-fix-changelog.py     | 92 ++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 45 deletions(-)
 create mode 100755 contrib/git-fix-changelog.py

diff --git a/contrib/gcc-git-customization.sh b/contrib/gcc-git-customization.sh
index aca61b781ff..2eec17937af 100755
--- a/contrib/gcc-git-customization.sh
+++ b/contrib/gcc-git-customization.sh
@@ -27,6 +27,7 @@ git config alias.gcc-undescr \!"f() { o=\$(git config --get gcc-config.upstream)
 
 git config alias.gcc-verify '!f() { "`git rev-parse --show-toplevel`/contrib/gcc-changelog/git_check_commit.py" $@; } ; f'
 git config alias.gcc-backport '!f() { "`git rev-parse --show-toplevel`/contrib/git-backport.py" $@; } ; f'
+git config alias.gcc-fix-changelog '!f() { "`git rev-parse --show-toplevel`/contrib/git-fix-changelog.py" $@; } ; f'
 git config alias.gcc-mklog '!f() { "`git rev-parse --show-toplevel`/contrib/mklog.py" $@; } ; f'
 git config alias.gcc-commit-mklog '!f() { "`git rev-parse --show-toplevel`/contrib/git-commit-mklog.py" "$@"; }; f'
 
diff --git a/contrib/git-backport.py b/contrib/git-backport.py
index 83189a2b5c7..fc369d97754 100755
--- a/contrib/git-backport.py
+++ b/contrib/git-backport.py
@@ -22,29 +22,9 @@
 import argparse
 import os
 import subprocess
-import tempfile
 
 script_folder = os.path.dirname(os.path.abspath(__file__))
-verify_script = os.path.join(script_folder,
-                             'gcc-changelog/git_check_commit.py')
-
-
-def replace_file_in_changelog(lines, filename):
-    if not filename.endswith('.cc'):
-        return
-
-    # consider all componenets of a path: gcc/ipa-icf.cc
-    while filename:
-        for i, line in enumerate(lines):
-            if filename in line:
-                line = line.replace(filename, filename[:-1])
-                lines[i] = line
-                return
-        parts = filename.split('/')
-        if len(parts) == 1:
-            return
-        filename = '/'.join(parts[1:])
-
+fixup_script = os.path.join(script_folder, 'git-fix-changelog.py')
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Backport a git revision.')
@@ -52,27 +32,4 @@ if __name__ == '__main__':
     args = parser.parse_args()
 
     subprocess.run('git cherry-pick -x %s' % args.revision, shell=True)
-
-    # Update commit message if change for a .cc file was taken
-    r = subprocess.run(f'{verify_script} HEAD', shell=True, encoding='utf8',
-                       stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    if r.returncode != 0:
-        lines = r.stdout.splitlines()
-        cmd = 'git show -s --format=%B'
-        commit_message = subprocess.check_output(cmd, shell=True,
-                                                 encoding='utf8').strip()
-        commit_message = commit_message.splitlines()
-
-        todo = [line for line in lines if 'unchanged file mentioned' in line]
-        for item in todo:
-            filename = item.split()[-1].strip('"')
-            replace_file_in_changelog(commit_message, filename)
-
-        with tempfile.NamedTemporaryFile('w', encoding='utf8',
-                                         delete=False) as w:
-            w.write('\n'.join(commit_message))
-            w.close()
-            subprocess.check_output(f'git commit --amend -F {w.name}',
-                                    shell=True, encoding='utf8')
-            os.unlink(w.name)
-            print(f'Commit message updated: {len(todo)} .cc file(s) changed.')
+    subprocess.run(fixup_script, shell=True)
diff --git a/contrib/git-fix-changelog.py b/contrib/git-fix-changelog.py
new file mode 100755
index 00000000000..c15e45c11fa
--- /dev/null
+++ b/contrib/git-fix-changelog.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2020 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+# The script tries to fix commit message where ChangeLog entries
+# can point to .cc renamed files.
+
+import argparse
+import os
+import subprocess
+import tempfile
+
+DESCRIPTION = 'Fix up ChangeLog of the current commit.'
+
+script_folder = os.path.dirname(os.path.abspath(__file__))
+verify_script = os.path.join(script_folder,
+                             'gcc-changelog/git_check_commit.py')
+
+
+def replace_file_in_changelog(lines, filename, fixed):
+    # consider all componenets of a path: gcc/ipa-icf.cc
+    while filename:
+        for i, line in enumerate(lines):
+            if filename in line:
+                lines[i] = line.replace(filename, fixed)
+                return
+
+        parts = filename.split('/')
+        if len(parts) == 1:
+            return
+        filename = '/'.join(parts[1:])
+        fixed = '/'.join(fixed.split('/')[1:])
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=DESCRIPTION)
+    args = parser.parse_args()
+
+    # Update commit message if change for a .cc file was taken
+    r = subprocess.run(f'{verify_script} HEAD', shell=True, encoding='utf8',
+                       stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    if r.returncode != 0:
+        lines = r.stdout.splitlines()
+        cmd = 'git show -s --format=%B'
+        commit_message = subprocess.check_output(cmd, shell=True,
+                                                 encoding='utf8').strip()
+        commit_message = commit_message.splitlines()
+
+        # Parse the following lines:
+        # ERR: unchanged file mentioned in a ChangeLog \
+        # (did you mean "gcc/ipa-icf.cc"?): "gcc/ipa-icf.c"
+        replaced = 0
+        for line in lines:
+            if ('unchanged file mentioned' in line and
+                    'did you mean' in line):
+                filename = line.split()[-1].strip('"')
+                fixed = line[line.index('did you mean'):]
+                fixed = fixed[fixed.index('"') + 1:]
+                fixed = fixed[:fixed.index('"')]
+
+                if filename.count('/') == fixed.count('/'):
+                    replace_file_in_changelog(commit_message, filename, fixed)
+                    replaced += 1
+
+        if replaced:
+            with tempfile.NamedTemporaryFile('w', encoding='utf8',
+                                             delete=False) as w:
+                w.write('\n'.join(commit_message))
+                w.close()
+                subprocess.check_output(f'git commit --amend -F {w.name}',
+                                        shell=True, encoding='utf8')
+                os.unlink(w.name)
+                print(f'Commit message updated: {replaced} file(s) renamed.')
+        else:
+            print('Commit message has not been updated.')
-- 
2.34.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2022-01-19  8:07 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <ri6mtk7vo41.fsf@suse.cz>
     [not found] ` <57564370-7184-ef62-039e-60b150058fd8@suse.cz>
     [not found]   ` <68946bf6-4b2f-b8f3-20b3-5cf3f2fd611c@moene.org>
2022-01-11 15:50     ` [PATCH] Mass rename of C++ .c files to .cc suffix Martin Liška
2022-01-11 15:56       ` Jakub Jelinek
2022-01-11 16:03         ` Martin Liška
2022-01-11 16:16           ` Jakub Jelinek
2022-01-12  8:58             ` Martin Liška
2022-01-12 15:54               ` [PATCH] git-backport: support renamed .cc files in commit message Martin Liška
2022-01-14  7:44                 ` Bernhard Reutner-Fischer
2022-01-14 15:26                   ` Martin Liška
2022-01-17 21:26                 ` Martin Liška
2022-01-18 19:10                   ` Harald Anlauf
2022-01-18 19:10                     ` Harald Anlauf
2022-01-19  8:07                     ` Martin Liška
2022-01-11 18:00       ` [PATCH] Mass rename of C++ .c files to .cc suffix Harald Anlauf
2022-01-11 18:00         ` Harald Anlauf
2022-01-11 18:23         ` Jonathan Wakely
2022-01-11 18:36           ` Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).