From: Bhaskar Chowdhury <unixbhaskar@gmail.com>
To: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Andy Whitcroft <apw@canonical.com>,
LKML <linux-kernel@vger.kernel.org>,
"kernel-mentors@selenic.com" <kernel-mentors@selenic.com>,
kernelnewbies <kernelnewbies@kernelnewbies.org>
Subject: Re: external tool to remove embedded filenames
Date: Fri, 2 Oct 2020 20:19:36 +0530 [thread overview]
Message-ID: <20201002144936.GA17987@Gentoo> (raw)
In-Reply-To: <bab3ecae932cb41106834156abbd27159d937e67.camel@perches.com>
[-- Attachment #1: Type: text/plain, Size: 4192 bytes --]
On 11:47 Thu 01 Oct 2020, Joe Perches wrote:
>It's rather unnecessary for files to contain their
>path/filename in source code comments.
>
>Here's a trivial little script that can remove
>embedded filenames in c90 style comments from files.
>
>This requires git.
>
>It does the following types of removals:
>
>remove individual lines like /* filename */ completely
>remove filename from /* filename -- comment */, leave /* comment */
>remove filename and any trailing ' *\n' from /* filename, leave /*
>remove filename from /* filename, leave /*
>remove filename from continuation ' * filename -- comment' leave ' * comment'
>remove filename and any trailing ' *\n' from continuation ' * filename\n *\n'
>
>It seems to work well enough.
>
>It does not handle c99 comments.
>No // filename variants are removed.
>
>Running it on today's -next gives:
>
>$ perl remove_embedded_filenames.pl
>$ git diff --shortstat
> 2310 files changed, 354 insertions(+), 4239 deletions(-)
>
>It's also possible to give any filename or path
>as an argument to the script
>
>For instance:
>
>$ perl remove_embedded_filenames.pl drivers/net
>
>#!/usr/bin/perl -w
>
># script to remove * <filename> comments;
># use: perl remove_embedded_filenames.pl <paths|files>
># e.g.: perl remove_embedded_filenames.pl drivers/net/ethernet/intel
>
>use strict;
>
>my $P = $0;
>my $modified = 0;
>my $quiet = 0;
>
>sub expand_tabs {
> my ($str) = @_;
>
> my $res = '';
> my $n = 0;
> for my $c (split(//, $str)) {
> if ($c eq "\t") {
> $res .= ' ';
> $n++;
> for (; ($n % 8) != 0; $n++) {
> $res .= ' ';
> }
> next;
> }
> $res .= $c;
> $n++;
> }
>
> return $res;
>}
>
>my $args = join(" ", @ARGV);
>my $output = `git ls-files -- $args`;
>my @files = split("\n", $output);
>
>foreach my $file (@files) {
> my $f;
> my $cvt = 0;
> my $text;
>
># read the file
>
> next if ((-d $file));
>
> open($f, '<', $file)
> or die "$P: Can't open $file for read\n";
> $text = do { local($/) ; <$f> };
> close($f);
>
> next if ($text eq "");
>
># Remove the embedded filenames
>
> # remove individual lines like /* filename */ completely
> $cvt += $text =~ s@/\*[ \t]+(?:linux\/)?\Q$file\E[ \t]*\*/[ \t]*\n@@g;
> pos($text) = 0;
> # remove filenamee from /* filename -- comment */, leave /* comment */
> $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*[:-]+[ \t]*@/*$1@g;
> pos($text) = 0;
> # remove filename and any trailing ' *\n' from /* filename, leave /*
> $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*\n([ \t]*\*[ \t]*\n)*(?:[ \t]*\*)?@/*@g;
> pos($text) = 0;
> # remove filename from /* filename, leave /*
> $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*\n@/*@g;
> pos($text) = 0;
> # remove filename from continuation ' * filename -- comment'
> # leave ' * comment'
> $cvt += $text =~ s/([ \t]+)\*([ \t]*)(?:linux\/)?\Q$file\E[ \t]*[:-]+[ \t]*/$1*$2/g;
> pos($text) = 0;
> # remove filename and any trailing ' *\n' from
> # continuation ' * filename\n *\n'
> $cvt += $text =~ s/([ \t]*)\*([ \t]*)(?:linux\/)?\Q$file\E[ \t]*\n([ \t]*\*[ \t]*\n)*//g;
> pos($text) = 0;
>
># write the file if something was changed
>
> if ($cvt > 0) {
> $modified = 1;
> print("$file\n");
> open($f, '>', $file)
> or die "$P: Can't open $file for write\n";
> print $f $text;
> close($f);
> }
>}
>
>if ($modified && !$quiet) {
> print <<EOT;
>
>Warning: these changes may not be correct.
>
>These changes should be carefully reviewed manually and not combined with
>any functional changes.
>
>Compile, build and test your changes.
>
>You should understand and be responsible for all object changes.
>
>Make sure you read Documentation/SubmittingPatches before sending
>any changes to reviewers, maintainers or mailing lists.
>EOT
>}
Joe,
Suggestion.... please take those damn EOT lines out of it ..absolutely not
required...or did you put for your own purpose?? As I believe it not the final
product. Anyway, it would be good if those not there.
Yup, I do like the "individual option" stuff ...so, you can only mess around
single thing than the whole lot.
~Bhaskar
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2020-10-02 14:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-01 18:28 [PATCH] checkpatch: Emit a warning on embedded filenames Joe Perches
2020-10-01 18:47 ` external tool to remove " Joe Perches
2020-10-02 14:49 ` Bhaskar Chowdhury [this message]
2020-10-02 15:13 ` Joe Perches
2020-10-02 22:18 ` [PATCH] checkpatch: Emit a warning on " Andrew Morton
2020-10-02 23:35 ` Joe Perches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201002144936.GA17987@Gentoo \
--to=unixbhaskar@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=apw@canonical.com \
--cc=joe@perches.com \
--cc=kernel-mentors@selenic.com \
--cc=kernelnewbies@kernelnewbies.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox