public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] scripts: Make cleanfile/cleanpatch warn about long lines
@ 2007-05-26  0:58 H. Peter Anvin
  2007-05-26  5:41 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: H. Peter Anvin @ 2007-05-26  0:58 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Linux Kernel Mailing List, Auke Kok

Make the "cleanfile" and "cleanpatch" script warn about long lines,
by default lines whose visual width exceeds 79 characters.

Per suggestion from Auke Kok.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
---
 scripts/cleanfile  |   54 ++++++++++++++++++++++++++++++++++++++++++++++-
 scripts/cleanpatch |   58 +++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 107 insertions(+), 5 deletions(-)

diff --git a/scripts/cleanfile b/scripts/cleanfile
index f1ba8aa..cefd29e 100755
--- a/scripts/cleanfile
+++ b/scripts/cleanfile
@@ -7,7 +7,9 @@
 use bytes;
 use File::Basename;
 
-#
+# Default options
+$max_width = 79;
+
 # Clean up space-tab sequences, either by removing spaces or
 # replacing them with tabs.
 sub clean_space_tabs($)
@@ -48,9 +50,49 @@ sub clean_space_tabs($)
     return $lo;
 }
 
+# Compute the visual width of a string
+sub strwidth($) {
+    no bytes;			# Tab alignment depends on characters
+
+    my($li) = @_;
+    my($c, $i);
+    my $pos = 0;
+    my $mlen = 0;
+
+    for ($i = 0; $i < length($li); $i++) {
+	$c = substr($li,$i,1);
+	if ($c eq "\t") {
+	    $pos = ($pos+8) & ~7;
+	} elsif ($c eq "\n") {
+	    $mlen = $pos if ($pos > $mlen);
+	    $pos = 0;
+	} else {
+	    $pos++;
+	}
+    }
+
+    $mlen = $pos if ($pos > $mlen);
+    return $mlen;
+}
+
 $name = basename($0);
 
-foreach $f ( @ARGV ) {
+@files = ();
+
+while (defined($a = shift(@ARGV))) {
+    if ($a =~ /^-/) {
+	if ($a eq '-width' || $a eq '-w') {
+	    $max_width = shift(@ARGV)+0;
+	} else {
+	    print STDERR "Usage: $name [-width #] files...\n";
+	    exit 1;
+	}
+    } else {
+	push(@files, $a);
+    }
+}
+
+foreach $f ( @files ) {
     print STDERR "$name: $f\n";
 
     if (! -f $f) {
@@ -90,8 +132,10 @@ foreach $f ( @ARGV ) {
 
     @blanks = ();
     @lines  = ();
+    $lineno = 0;
 
     while ( defined($line = <FILE>) ) {
+	$lineno++;
 	$in_bytes += length($line);
 	$line =~ s/[ \t\r]*$//;		# Remove trailing spaces
 	$line = clean_space_tabs($line);
@@ -107,6 +151,12 @@ foreach $f ( @ARGV ) {
 	    @blanks = ();
 	    $blank_bytes = 0;
 	}
+
+	$l_width = strwidth($line);
+	if ($max_width && $l_width > $max_width) {
+	    print STDERR
+		"$f:$lineno: line exceeds $max_width characters ($l_width)\n";
+	}
     }
 
     # Any blanks at the end of the file are discarded
diff --git a/scripts/cleanpatch b/scripts/cleanpatch
index a53f987..9680d03 100755
--- a/scripts/cleanpatch
+++ b/scripts/cleanpatch
@@ -7,7 +7,9 @@
 use bytes;
 use File::Basename;
 
-#
+# Default options
+$max_width = 79;
+
 # Clean up space-tab sequences, either by removing spaces or
 # replacing them with tabs.
 sub clean_space_tabs($)
@@ -48,9 +50,49 @@ sub clean_space_tabs($)
     return $lo;
 }
 
+# Compute the visual width of a string
+sub strwidth($) {
+    no bytes;			# Tab alignment depends on characters
+
+    my($li) = @_;
+    my($c, $i);
+    my $pos = 0;
+    my $mlen = 0;
+
+    for ($i = 0; $i < length($li); $i++) {
+	$c = substr($li,$i,1);
+	if ($c eq "\t") {
+	    $pos = ($pos+8) & ~7;
+	} elsif ($c eq "\n") {
+	    $mlen = $pos if ($pos > $mlen);
+	    $pos = 0;
+	} else {
+	    $pos++;
+	}
+    }
+
+    $mlen = $pos if ($pos > $mlen);
+    return $mlen;
+}
+
 $name = basename($0);
 
-foreach $f ( @ARGV ) {
+@files = ();
+
+while (defined($a = shift(@ARGV))) {
+    if ($a =~ /^-/) {
+	if ($a eq '-width' || $a eq '-w') {
+	    $max_width = shift(@ARGV)+0;
+	} else {
+	    print STDERR "Usage: $name [-width #] files...\n";
+	    exit 1;
+	}
+    } else {
+	push(@files, $a);
+    }
+}
+
+foreach $f ( @files ) {
     print STDERR "$name: $f\n";
 
     if (! -f $f) {
@@ -86,6 +128,7 @@ foreach $f ( @ARGV ) {
 
     $in_bytes = 0;
     $out_bytes = 0;
+    $lineno = 0;
 
     @lines  = ();
 
@@ -93,10 +136,12 @@ foreach $f ( @ARGV ) {
     $err = 0;
 
     while ( defined($line = <FILE>) ) {
+	$lineno++;
 	$in_bytes += length($line);
 
 	if (!$in_hunk) {
-	    if ($line =~ /^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) {
+	    if ($line =~
+		/^\@\@\s+\-([0-9]+),([0-9]+)\s+\+([0-9]+),([0-9]+)\s\@\@/) {
 		$minus_lines = $2;
 		$plus_lines = $4;
 		if ($minus_lines || $plus_lines) {
@@ -117,6 +162,13 @@ foreach $f ( @ARGV ) {
 		$text =~ s/[ \t\r]*$//;		# Remove trailing spaces
 		$text = clean_space_tabs($text);
 
+		$l_width = strwidth($text);
+		if ($max_width && $l_width > $max_width) {
+		    print STDERR
+			"$f:$lineno: adds line exceeds $max_width ",
+			"characters ($l_width)\n";
+		}
+
 		push(@hunk_lines, '+'.$text);
 	    } elsif ($line =~ /^\-/) {
 		$minus_lines--;
-- 
1.5.2


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

* Re: [PATCH] scripts: Make cleanfile/cleanpatch warn about long lines
  2007-05-26  0:58 [PATCH] scripts: Make cleanfile/cleanpatch warn about long lines H. Peter Anvin
@ 2007-05-26  5:41 ` Andrew Morton
  2007-05-26  5:55   ` H. Peter Anvin
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2007-05-26  5:41 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Linux Kernel Mailing List, Auke Kok, Andy Whitcroft, Randy.Dunlap,
	Dave Jones

On Fri, 25 May 2007 17:58:26 -0700 "H. Peter Anvin" <hpa@zytor.com> wrote:

> Make the "cleanfile" and "cleanpatch" script warn about long lines,
> by default lines whose visual width exceeds 79 characters.
> 
> Per suggestion from Auke Kok.
> 
> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
> ---
>  scripts/cleanfile  |   54 ++++++++++++++++++++++++++++++++++++++++++++++-
>  scripts/cleanpatch |   58 +++++++++++++++++++++++++++++++++++++++++++++++++--

This functionality wholly duplicates the patch-sanity-checking script
which Andy, Randy and others are working on.

The plan is to merge that script into the tree and, once it's looking
reasonably accurate, we wire a copy of it up to the email lists so that it
autonags patch-senders over the usual trivial junk.  Think of it as an
akpm-over-SMTP server.

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

* Re: [PATCH] scripts: Make cleanfile/cleanpatch warn about long lines
  2007-05-26  5:41 ` Andrew Morton
@ 2007-05-26  5:55   ` H. Peter Anvin
  0 siblings, 0 replies; 3+ messages in thread
From: H. Peter Anvin @ 2007-05-26  5:55 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Linux Kernel Mailing List, Auke Kok, Andy Whitcroft, Randy.Dunlap,
	Dave Jones

Andrew Morton wrote:
> On Fri, 25 May 2007 17:58:26 -0700 "H. Peter Anvin" <hpa@zytor.com> wrote:
> 
>> Make the "cleanfile" and "cleanpatch" script warn about long lines,
>> by default lines whose visual width exceeds 79 characters.
>>
>> Per suggestion from Auke Kok.
>>
>> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
>> ---
>>  scripts/cleanfile  |   54 ++++++++++++++++++++++++++++++++++++++++++++++-
>>  scripts/cleanpatch |   58 +++++++++++++++++++++++++++++++++++++++++++++++++--
> 
> This functionality wholly duplicates the patch-sanity-checking script
> which Andy, Randy and others are working on.
> 
> The plan is to merge that script into the tree and, once it's looking
> reasonably accurate, we wire a copy of it up to the email lists so that it
> autonags patch-senders over the usual trivial junk.  Think of it as an
> akpm-over-SMTP server.

LOL.

	-hpa

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

end of thread, other threads:[~2007-05-26  5:56 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-26  0:58 [PATCH] scripts: Make cleanfile/cleanpatch warn about long lines H. Peter Anvin
2007-05-26  5:41 ` Andrew Morton
2007-05-26  5:55   ` H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox