From: "Luis R. Rodriguez" <lrodriguez@atheros.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Luis Rodriguez <Luis.Rodriguez@atheros.com>,
"joe@perches.com" <joe@perches.com>,
"torvalds@linux-foundation.org" <torvalds@linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"mcgrof@gmail.com" <mcgrof@gmail.com>
Subject: Re: [PATCH 3/3] checkincludes.pl: add option to remove duplicates in place
Date: Wed, 5 Aug 2009 19:10:28 -0700 [thread overview]
Message-ID: <20090806021028.GJ4727@mosca> (raw)
In-Reply-To: <20090805185945.1ece6088.akpm@linux-foundation.org>
On Wed, Aug 05, 2009 at 06:59:45PM -0700, Andrew Morton wrote:
> On Wed, 5 Aug 2009 17:51:12 -0700 "Luis R. Rodriguez" <lrodriguez@Atheros.com> wrote:
>
> > checkincludes.pl is more useful if it actually removed
> > the lines. This adds support for that with -r.
> >
>
> hm, spose so. It can't do any harm.
>
> Plus it's about time we edited that file - it hasn't been changed since
> we started the bk tree.
Hehe yeah.. Anno Domini
> > ---
> > scripts/checkincludes.pl | 57 +++++++++++++++++++++++++++++++++++++++++-----
> > 1 files changed, 51 insertions(+), 6 deletions(-)
> >
> > diff --git a/scripts/checkincludes.pl b/scripts/checkincludes.pl
> > index 4bff139..5a53407 100755
> > --- a/scripts/checkincludes.pl
> > +++ b/scripts/checkincludes.pl
> > @@ -2,32 +2,77 @@
> > #
> > # checkincludes: Find files included more than once in (other) files.
> > # Copyright abandoned, 2000, Niels Kristian Bech Jensen <nkbj@image.dk>.
> > +# Copyright abandoned, 2009, Luis R. Rodriguez <mcgrof@gmail.com>
> >
> > sub usage {
> > - print "Usage: checkincludes.pl <file list>\n";
> > + print "Usage: checkincludes.pl [-r]\n";
> > + print "By default we just warn of duplicates\n";
> > + print "To remove files in place use -r\n";
>
> I'm not sure I like the wording here - I don't _want_ my files removed!
>
> This?
>
> --- a/scripts/checkincludes.pl~checkincludespl-add-option-to-remove-duplicates-in-place-fix
> +++ a/scripts/checkincludes.pl
> @@ -7,7 +7,7 @@
> sub usage {
> print "Usage: checkincludes.pl [-r]\n";
> print "By default we just warn of duplicates\n";
> - print "To remove files in place use -r\n";
> + print "To remove duplicated includes in place use -r\n";
> exit 1;
> }
Sure, attached new v2
From: Luis R. Rodriguez <lrodriguez@atheros.com>
Subject: [PATCH v2] checkincludes.pl: add option to remove duplicates in place
checkincludes.pl is more useful if it actually removed
the lines. This adds support for that with -r.
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
Now with Andrew's change in place and some sort of documentation added.
scripts/checkincludes.pl | 66 +++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/scripts/checkincludes.pl b/scripts/checkincludes.pl
index 4bff139..676ddc0 100755
--- a/scripts/checkincludes.pl
+++ b/scripts/checkincludes.pl
@@ -1,33 +1,85 @@
#!/usr/bin/perl
#
-# checkincludes: Find files included more than once in (other) files.
+# checkincludes: find/remove files included more than once
+#
# Copyright abandoned, 2000, Niels Kristian Bech Jensen <nkbj@image.dk>.
+# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
+#
+# This script checks for duplicate includes. It also has support
+# to remove them in place. Note that this will not take into
+# consideration macros so you should run this only if you know
+# you do have real dups and do not have them under #ifdef's. You
+# could also just review the results.
sub usage {
- print "Usage: checkincludes.pl <file list>\n";
+ print "Usage: checkincludes.pl [-r]\n";
+ print "By default we just warn of duplicates\n";
+ print "To remove duplicated includes in place use -r\n";
exit 1;
}
+my $remove = 0;
+
if ($#ARGV < 0) {
- usage();
+ usage();
+}
+
+if ($#ARGV >= 1) {
+ if ($ARGV[0] =~ /^-/) {
+ if ($ARGV[0] eq "-r") {
+ $remove = 1;
+ shift;
+ } else {
+ usage();
+ }
+ }
}
foreach $file (@ARGV) {
open(FILE, $file) or die "Cannot open $file: $!.\n";
my %includedfiles = ();
+ my @file_lines = ();
while (<FILE>) {
if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
++$includedfiles{$1};
}
+ push(@file_lines, $_);
}
close(FILE);
-
- foreach $filename (keys %includedfiles) {
- if ($includedfiles{$filename} > 1) {
- print "$file: $filename is included more than once.\n";
+
+ if (!$remove) {
+ foreach $filename (keys %includedfiles) {
+ if ($includedfiles{$filename} > 1) {
+ print "$file: $filename is included more than once.\n";
+ }
}
+ next;
}
+
+ open(FILE,">$file") || die("Cannot write to $file: $!");
+
+ my $dups = 0;
+ foreach (@file_lines) {
+ if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
+ foreach $filename (keys %includedfiles) {
+ if ($1 eq $filename) {
+ if ($includedfiles{$filename} > 1) {
+ $includedfiles{$filename}--;
+ $dups++;
+ } else {
+ print FILE $_;
+ }
+ }
+ }
+ } else {
+ print FILE $_;
+ }
+ }
+ if ($dups > 0) {
+ print "$file: removed $dups duplicate includes\n";
+ }
+ close(FILE);
}
--
1.6.3.3
next prev parent reply other threads:[~2009-08-06 2:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-06 0:51 [PATCH 0/3] checkincludes.pl: add removal option Luis R. Rodriguez
2009-08-06 0:51 ` [PATCH 1/3] checkincludes.pl: close file as soon as we're done with it Luis R. Rodriguez
2009-08-06 0:51 ` [PATCH 2/3] checkincludes.pl: provide usage helper Luis R. Rodriguez
2009-08-06 0:51 ` [PATCH 3/3] checkincludes.pl: add option to remove duplicates in place Luis R. Rodriguez
2009-08-06 1:59 ` Andrew Morton
2009-08-06 2:10 ` Luis R. Rodriguez [this message]
2009-08-06 19:17 ` Daniel K.
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=20090806021028.GJ4727@mosca \
--to=lrodriguez@atheros.com \
--cc=Luis.Rodriguez@atheros.com \
--cc=akpm@linux-foundation.org \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@gmail.com \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.