Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1506641 > unrolled thread

[PATCH 1/1] checkpatch: remove false warning for commit reference

Started byHeinrich Schuchardt <xypron.glpk@gmx.de>
First post2016-10-23 09:50 +0200
Last post2016-10-24 20:50 +0200
Articles 6 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 1/1] checkpatch: remove false warning for commit reference Heinrich Schuchardt <xypron.glpk@gmx.de> - 2016-10-23 09:50 +0200
    Re: [PATCH 1/1] checkpatch: remove false warning for commit  reference Joe Perches <joe@perches.com> - 2016-10-23 22:40 +0200
      Re: [PATCH 1/1] checkpatch: remove false warning for commit reference Heinrich Schuchardt <xypron.glpk@gmx.de> - 2016-10-24 19:30 +0200
        Re: [PATCH 1/1] checkpatch: remove false warning for commit reference Andy Whitcroft <apw@canonical.com> - 2016-10-24 20:50 +0200
          [PATCH] checkpatch: Don't check .pl files, improve absolute path commit log test Joe Perches <joe@perches.com> - 2016-10-24 22:20 +0200
        Re: [PATCH 1/1] checkpatch: remove false warning for commit  reference Joe Perches <joe@perches.com> - 2016-10-24 20:50 +0200

#1506641 — [PATCH 1/1] checkpatch: remove false warning for commit reference

FromHeinrich Schuchardt <xypron.glpk@gmx.de>
Date2016-10-23 09:50 +0200
Subject[PATCH 1/1] checkpatch: remove false warning for commit reference
Message-ID<svlHz-6sb-11@gated-at.bofh.it>
Checkpatch warns of an incorrect commit reference style
for any hexadecimal number of 12 digits and more.

Numbers of 12 digits are not necessarily commit ids.

For an example provoking the problem see
https://patchwork.kernel.org/patch/9170897/

Checkpatch should only warn if the number refers to an
existing commit.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 scripts/checkpatch.pl | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a8368d1..12e6a1f 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -848,6 +848,7 @@ sub git_commit_info {
 #		    echo "commit $(cut -c 1-12,41-)"
 #		done
 	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
+		$id = undef;
 	} else {
 		$id = substr($lines[0], 0, 12);
 		$desc = substr($lines[0], 41);
@@ -2577,7 +2578,9 @@ sub process {
 			($id, $description) = git_commit_info($orig_commit,
 							      $id, $orig_desc);
 
-			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
+			if ($id && ($short || $long || $space || $case
+				|| ($orig_desc ne $description)
+				|| !$hasparens)) {
 				ERROR("GIT_COMMIT_ID",
 				      "Please use git commit description style 'commit <12+ chars of sha1> (\"<title line>\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr);
 			}
-- 
2.1.4

[toc] | [next] | [standalone]


#1506758 — Re: [PATCH 1/1] checkpatch: remove false warning for commit reference

FromJoe Perches <joe@perches.com>
Date2016-10-23 22:40 +0200
SubjectRe: [PATCH 1/1] checkpatch: remove false warning for commit reference
Message-ID<svxIK-5Gc-19@gated-at.bofh.it>
In reply to#1506641
On Sun, 2016-10-23 at 09:34 +0200, Heinrich Schuchardt wrote:
> Checkpatch warns of an incorrect commit reference style
> for any hexadecimal number of 12 digits and more.
> 
> Numbers of 12 digits are not necessarily commit ids.
> 
> For an example provoking the problem see
> https://patchwork.kernel.org/patch/9170897/
> 
> Checkpatch should only warn if the number refers to an
> existing commit.

That seems sensible.

> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  scripts/checkpatch.pl | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
[]
> @@ -848,6 +848,7 @@ sub git_commit_info {
>  #		    echo "commit $(cut -c 1-12,41-)"
>  #		done
>  	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
> +		$id = undef;

OK

>  	} else {
>  		$id = substr($lines[0], 0, 12);
>  		$desc = substr($lines[0], 41);
> @@ -2577,7 +2578,9 @@ sub process {
>  			($id, $description) = git_commit_info($orig_commit,
>  							      $id, $orig_desc);
>  
> -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
> +			if ($id && ($short || $long || $space || $case
> +				|| ($orig_desc ne $description)
> +				|| !$hasparens)) {

I'd prefer
			if (defined($id) &&
			   ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {

and not wrap the tests.

Maybe ignore all the cases there git is not installed too.
Something like:
---
 scripts/checkpatch.pl | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a8368d1c4348..a46b6ebe067b 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -829,13 +829,16 @@ sub seed_camelcase_includes {
 sub git_commit_info {
 	my ($commit, $id, $desc) = @_;
 
-	return ($id, $desc) if ((which("git") eq "") || !(-e ".git"));
+	my $git_id = undef;
+	my $git_desc = undef;
+
+	return ($git_id, $git_desc) if ((which("git") eq "") || !(-e ".git"));
 
 	my $output = `git log --no-color --format='%H %s' -1 $commit 2>&1`;
 	$output =~ s/^\s*//gm;
 	my @lines = split("\n", $output);
 
-	return ($id, $desc) if ($#lines < 0);
+	return ($git_id, $git_desc) if ($#lines < 0);
 
 	if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) {
 # Maybe one day convert this block of bash into something that returns
@@ -849,11 +852,11 @@ sub git_commit_info {
 #		done
 	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
 	} else {
-		$id = substr($lines[0], 0, 12);
-		$desc = substr($lines[0], 41);
+		$git_id = substr($lines[0], 0, 12);
+		$git_desc = substr($lines[0], 41);
 	}
 
-	return ($id, $desc);
+	return ($git_id, $git_desc);
 }
 
 $chk_signoff = 0 if ($file);
@@ -2577,7 +2580,8 @@ sub process {
 			($id, $description) = git_commit_info($orig_commit,
 							      $id, $orig_desc);
 
-			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
+			if (defined($id) &&
+			    ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
 				ERROR("GIT_COMMIT_ID",
 				      "Please use git commit description style 'commit <12+ chars of sha1> (\"\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr);
 			}

[toc] | [prev] | [next] | [standalone]


#1507482

FromHeinrich Schuchardt <xypron.glpk@gmx.de>
Date2016-10-24 19:30 +0200
Message-ID<svRep-2gd-27@gated-at.bofh.it>
In reply to#1506758
On 10/23/2016 10:37 PM, Joe Perches wrote:
> On Sun, 2016-10-23 at 09:34 +0200, Heinrich Schuchardt wrote:
>> Checkpatch warns of an incorrect commit reference style
>> for any hexadecimal number of 12 digits and more.
>>
>> Numbers of 12 digits are not necessarily commit ids.
>>
>> For an example provoking the problem see
>> https://patchwork.kernel.org/patch/9170897/
>>
>> Checkpatch should only warn if the number refers to an
>> existing commit.
> 
> That seems sensible.
> 
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>  scripts/checkpatch.pl | 5 ++++-
>>  1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> []
>> @@ -848,6 +848,7 @@ sub git_commit_info {
>>  #		    echo "commit $(cut -c 1-12,41-)"
>>  #		done
>>  	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
>> +		$id = undef;
> 
> OK
> 
>>  	} else {
>>  		$id = substr($lines[0], 0, 12);
>>  		$desc = substr($lines[0], 41);
>> @@ -2577,7 +2578,9 @@ sub process {
>>  			($id, $description) = git_commit_info($orig_commit,
>>  							      $id, $orig_desc);
>>  
>> -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
>> +			if ($id && ($short || $long || $space || $case
>> +				|| ($orig_desc ne $description)
>> +				|| !$hasparens)) {
> 
> I'd prefer
> 			if (defined($id) &&
For $id = 0 or $id = "" this would make a difference.
Surely I can update the patch like this to make the test more readable.

> 			   ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
> 
> and not wrap the tests.

Putting defined($id) on a line of its own is fine.

Not wrapping the tests will produce a line of over 80 characters and
give a warning in scripts/checkpatch.pl.

The script should respect the standards it imposes on others.

> 
> Maybe ignore all the cases there git is not installed too.
> Something like:
> ---
>  scripts/checkpatch.pl | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index a8368d1c4348..a46b6ebe067b 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -829,13 +829,16 @@ sub seed_camelcase_includes {
>  sub git_commit_info {
>  	my ($commit, $id, $desc) = @_;
>  
> -	return ($id, $desc) if ((which("git") eq "") || !(-e ".git"));
> +	my $git_id = undef;
> +	my $git_desc = undef;
> +
> +	return ($git_id, $git_desc) if ((which("git") eq "") || !(-e ".git"));
Why not simply
return (undef, undef) if ((which("git") eq "") || !(-e ".git"));

Should we provide a warning: "git not found"?
>  
>  	my $output = `git log --no-color --format='%H %s' -1 $commit 2>&1`;
>  	$output =~ s/^\s*//gm;
>  	my @lines = split("\n", $output);
>  
> -	return ($id, $desc) if ($#lines < 0);
> +	return ($git_id, $git_desc) if ($#lines < 0);
>  
>  	if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) {
>  # Maybe one day convert this block of bash into something that returns
> @@ -849,11 +852,11 @@ sub git_commit_info {
>  #		done
>  	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
>  	} else {
> -		$id = substr($lines[0], 0, 12);
> -		$desc = substr($lines[0], 41);
> +		$git_id = substr($lines[0], 0, 12);
> +		$git_desc = substr($lines[0], 41);
>  	}
>  
> -	return ($id, $desc);
> +	return ($git_id, $git_desc);

This will change the program logic for
if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./)

>  }
>  
>  $chk_signoff = 0 if ($file);
> @@ -2577,7 +2580,8 @@ sub process {
>  			($id, $description) = git_commit_info($orig_commit,
>  							      $id, $orig_desc);
>  
> -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
> +			if (defined($id) &&
> +			    ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
This line is over 80 characters.
Which is not accepatble according to checkpatch.pl.

>  				ERROR("GIT_COMMIT_ID",
>  				      "Please use git commit description style 'commit <12+ chars of sha1> (\"\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr);
>  			}
> 
> 
> 

[toc] | [prev] | [next] | [standalone]


#1507575

FromAndy Whitcroft <apw@canonical.com>
Date2016-10-24 20:50 +0200
Message-ID<svStP-31f-9@gated-at.bofh.it>
In reply to#1507482
On Mon, Oct 24, 2016 at 11:39:45AM -0700, Joe Perches wrote:
> On Mon, 2016-10-24 at 19:22 +0200, Heinrich Schuchardt wrote:
> > On 10/23/2016 10:37 PM, Joe Perches wrote:
> > > On Sun, 2016-10-23 at 09:34 +0200, Heinrich Schuchardt wrote:
> > > > Checkpatch warns of an incorrect commit reference style
> > > > for any hexadecimal number of 12 digits and more.
> > > > 
> > > > Numbers of 12 digits are not necessarily commit ids.
> > > > 
> > > > For an example provoking the problem see
> > > > https://patchwork.kernel.org/patch/9170897/
> > > > 
> > > > Checkpatch should only warn if the number refers to an
> > > > existing commit.
> > > 
> > > That seems sensible.
> > > 
> > > > Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > > ---
> > > >  scripts/checkpatch.pl | 5 ++++-
> > > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> > > 
> > > []
> > > > @@ -848,6 +848,7 @@ sub git_commit_info {
> > > >  #		    echo "commit $(cut -c 1-12,41-)"
> > > >  #		done
> > > >  	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
> > > > +		$id = undef;
> > > 
> > > OK
> > > 
> > > >  	} else {
> > > >  		$id = substr($lines[0], 0, 12);
> > > >  		$desc = substr($lines[0], 41);
> > > > @@ -2577,7 +2578,9 @@ sub process {
> > > >  			($id, $description) = git_commit_info($orig_commit,
> > > >  							      $id, $orig_desc);
> > > >  
> > > > -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
> > > > +			if ($id && ($short || $long || $space || $case
> > > > +				|| ($orig_desc ne $description)
> > > > +				|| !$hasparens)) {
> > > 
> > > I'd prefer
> > > 			if (defined($id) &&
> > 
> > For $id = 0 or $id = "" this would make a difference.
> > Surely I can update the patch like this to make the test more readable.
> > 
> > > 			   ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
> > > 
> > > and not wrap the tests.
> > 
> > Putting defined($id) on a line of its own is fine.
> > 
> > Not wrapping the tests will produce a line of over 80 characters and
> > give a warning in scripts/checkpatch.pl.
> > 
> > The script should respect the standards it imposes on others.
> 
> Nope.
> 
> I never bother using checkpatch on checkpatch.
> perl is unreadable enough with having to wrap long and
> complex regexes on 80 columns.

More specifically checkpatch is primarily checking C language construction
to keep the style of the Linux kernel consistent.  The rules were never
really intended to apply to perl or other languages.  We have long leant
towards longer lines in checkpatch for some kind of readability, as much
as you can have in "systactic sugar overload" language.

-apw

[toc] | [prev] | [next] | [standalone]


#1507689 — [PATCH] checkpatch: Don't check .pl files, improve absolute path commit log test

FromJoe Perches <joe@perches.com>
Date2016-10-24 22:20 +0200
Subject[PATCH] checkpatch: Don't check .pl files, improve absolute path commit log test
Message-ID<svTSW-43c-13@gated-at.bofh.it>
In reply to#1507575
perl files (*.pl) are mostly inappropriate to check coding styles so
exempt them from long line checks and various .[ch] file type tests.

And as well, only scan absolute paths in the commit log, not in the patch.

Signed-off-by: Joe Perches <joe@perches.com>
---
 scripts/checkpatch.pl | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a8368d1c4348..2fc154bd81c0 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2601,20 +2601,6 @@ sub process {
 				$herecurr) if (!$emitted_corrupt++);
 		}
 
-# Check for absolute kernel paths.
-		if ($tree) {
-			while ($line =~ m{(?:^|\s)(/\S*)}g) {
-				my $file = $1;
-
-				if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
-				    check_absolute_file($1, $herecurr)) {
-					#
-				} else {
-					check_absolute_file($file, $herecurr);
-				}
-			}
-		}
-
 # UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
 		if (($realfile =~ /^$/ || $line =~ /^\+/) &&
 		    $rawline !~ m/^$UTF8*$/) {
@@ -2652,6 +2638,20 @@ sub process {
 			    "8-bit UTF-8 used in possible commit log\n" . $herecurr);
 		}
 
+# Check for absolute kernel paths in commit message
+		if ($tree && $in_commit_log) {
+			while ($line =~ m{(?:^|\s)(/\S*)}g) {
+				my $file = $1;
+
+				if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
+				    check_absolute_file($1, $herecurr)) {
+					#
+				} else {
+					check_absolute_file($file, $herecurr);
+				}
+			}
+		}
+
 # Check for various typo / spelling mistakes
 		if (defined($misspellings) &&
 		    ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
@@ -2805,7 +2805,7 @@ sub process {
 		}
 
 # check we are in a valid source file if not then ignore this hunk
-		next if ($realfile !~ /\.(h|c|s|S|pl|sh|dtsi|dts)$/);
+		next if ($realfile !~ /\.(h|c|s|S|sh|dtsi|dts)$/);
 
 # line length limit (with some exclusions)
 #
-- 
2.10.0.rc2.1.g053435c

[toc] | [prev] | [next] | [standalone]


#1507579 — Re: [PATCH 1/1] checkpatch: remove false warning for commit reference

FromJoe Perches <joe@perches.com>
Date2016-10-24 20:50 +0200
SubjectRe: [PATCH 1/1] checkpatch: remove false warning for commit reference
Message-ID<svStP-31f-11@gated-at.bofh.it>
In reply to#1507482
On Mon, 2016-10-24 at 19:22 +0200, Heinrich Schuchardt wrote:
> On 10/23/2016 10:37 PM, Joe Perches wrote:
> > On Sun, 2016-10-23 at 09:34 +0200, Heinrich Schuchardt wrote:
> > > Checkpatch warns of an incorrect commit reference style
> > > for any hexadecimal number of 12 digits and more.
> > > 
> > > Numbers of 12 digits are not necessarily commit ids.
> > > 
> > > For an example provoking the problem see
> > > https://patchwork.kernel.org/patch/9170897/
> > > 
> > > Checkpatch should only warn if the number refers to an
> > > existing commit.
> > 
> > That seems sensible.
> > 
> > > Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > ---
> > >  scripts/checkpatch.pl | 5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> > 
> > []
> > > @@ -848,6 +848,7 @@ sub git_commit_info {
> > >  #		    echo "commit $(cut -c 1-12,41-)"
> > >  #		done
> > >  	} elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
> > > +		$id = undef;
> > 
> > OK
> > 
> > >  	} else {
> > >  		$id = substr($lines[0], 0, 12);
> > >  		$desc = substr($lines[0], 41);
> > > @@ -2577,7 +2578,9 @@ sub process {
> > >  			($id, $description) = git_commit_info($orig_commit,
> > >  							      $id, $orig_desc);
> > >  
> > > -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
> > > +			if ($id && ($short || $long || $space || $case
> > > +				|| ($orig_desc ne $description)
> > > +				|| !$hasparens)) {
> > 
> > I'd prefer
> > 			if (defined($id) &&
> 
> For $id = 0 or $id = "" this would make a difference.
> Surely I can update the patch like this to make the test more readable.
> 
> > 			   ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
> > 
> > and not wrap the tests.
> 
> Putting defined($id) on a line of its own is fine.
> 
> Not wrapping the tests will produce a line of over 80 characters and
> give a warning in scripts/checkpatch.pl.
> 
> The script should respect the standards it imposes on others.

Nope.

I never bother using checkpatch on checkpatch.
perl is unreadable enough with having to wrap long and
complex regexes on 80 columns.

> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
[]
> > @@ -829,13 +829,16 @@ sub seed_camelcase_includes {
> >  sub git_commit_info {
> >  	my ($commit, $id, $desc) = @_;
> >  
> > -	return ($id, $desc) if ((which("git") eq "") || !(-e ".git"));
> > +	my $git_id = undef;
> > +	my $git_desc = undef;
> > +
> > +	return ($git_id, $git_desc) if ((which("git") eq "") || !(-e ".git"));
> 
> Why not simply
> return (undef, undef) if ((which("git") eq "") || !(-e ".git"));

shrug.  coding taste or lack thereof.
Maybe mine.  No specific reason one is
better than the other.

> Should we provide a warning: "git not found"?

No. git isn't required.

> > @@ -2577,7 +2580,8 @@ sub process {
> >  			($id, $description) = git_commit_info($orig_commit,
> >  							      $id, $orig_desc);
> >  
> > -			if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) {
> > +			if (defined($id) &&  
> > +			    ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens)) {
> 
> This line is over 80 characters.

And I specifically don't care.

> Which is not accepatble according to checkpatch.pl.

see above

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web