Skip to contentSkip to conversation

PATCH] patch to generate warning when signed-of line in patch in not proper

PATCH Superseded anish 7 participants 33 messages May 21, 2011 – May 28, 2011 8 messages not in the archive Checkpatch

lore
Share & tools
lore

anish

author
#0 lore raw

On Sat, May 21, 2011 at 9:33 PM, Joe Perches <[email protected]> wrote:

Quoted 14 lines · anish singh

Re-sending to get some comments on this.

On Thu, May 19, 2011 at 10:53 PM, anish <[email protected]> wrote:
From: anish kumar <[email protected]>

This patch generates warning when there is no space between the
patch submitter name and successive mail-id.

Quoted 3 lines

If you do this, why not do it for all signature types?

our $Valid_Signatures "(?:Signed-off-by:|Reviewed-by:|Acked-by:)"

Definitely.Please check below modified patch.

Quoted 10 lines
        Signed-off-by: anish kumar <[email protected]>
        ---
         scripts/checkpatch.pl |   10 ++++++++--
         1 files changed, 8 insertions(+), 2 deletions(-)

        diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
        index d867081..437c6d4 100755
        --- a/scripts/checkpatch.pl
        +++ b/scripts/checkpatch.pl
        @@ -1373,10 +1373,16 @@ sub process {
Quoted 26 lines
                                       WARN("Signed-off-by: is the
        preferred form\n" .
                                               $herecurr);
                               }
        -                       if ($line =~ /^\s*signed-off-by:\S/i)
        {
        -                               WARN("space required after
        Signed-off-by:\n" .
Quoted 16 lines
      if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {
              my $space_before = $1;
              my $sign_off = $2;
              my $space_after = $3;
              my $email = $4;
              if (defined $space_before && $space_before ne "") {
                      warning (no space before...)
              }
              if ($sign_off !~ /$Valid_Signature/) {
                      warning (signature case...)
              }
              if (!defined $space_after || $space_after ne " ") {
                      warning (need only one space after colon...)
              }
              if (!validate_email($4)) {
                      warning (bad email...)

Please check the below patch.

--------------------------------------------------------------------------

From: anish kumar <[email protected]>

This patch generates warning when there is no space betweenthe patch submitter name and successive mail-id.As suggested by
Joe Perches([email protected]) that we can do this for
all signature types.

---
 scripts/checkpatch.pl |   38 ++++++++++++++++++++++++--------------
 1 files changed, 24 insertions(+), 14 deletions(-)
scripts/checkpatch.pl +24 -14
index d867081..6d67a17 100755
@@ -29,6 +29,8 @@ my $summary_file = 0;
 my $root;
 my %debug;
 my $help = 0;
+my $sign;
+my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
 
 sub help {
 	my ($exitcode) = @_;
@@ -1365,20 +1367,27 @@ sub process {
 			}
 		}
 
-#check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
-			# This is a signoff, if ugly, so do not double report.
-			$signoff++;
-			if (!($line =~ /^\s*Signed-off-by:/)) {
-				WARN("Signed-off-by: is the preferred form\n" .
-					$herecurr);
-			}
-			if ($line =~ /^\s*signed-off-by:\S/i) {
-				WARN("space required after Signed-off-by:\n" .
-					$herecurr);
-			}
-		}
-
+#check the patch for a signoff/Reviewed/Acked/Tested:
+        foreach $sign (@signs) {
+                 if ($line =~ /^\s*$sign/i) {
+                        # This is a signoff, if ugly, so do not double report.
+                        $signoff++;
+                   if (!($line =~ /^\s*$sign/)) {
+                                WARN("$sign is the preferred form\n" .
+                                        $herecurr);
+                        }
+                     if ($line =~ /^\s*$sign(.*)/i) {
+                          if($1 !~ /^\s*(\s[a-zA-Z]*.*)/i) {
+                                WARN("Space required after $sign\n" .
+                                        $herecurr);
+                                  }
+                              if($1 !~ /[\sa-zA-Z]+\s<.*>/i) {
+                                   WARN("Space required b/w Full Name & Mail-id:\n" .
+                                        $herecurr);
+                                }
+                        }
+        }
+}
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .
@@ -2964,3 +2973,4 @@ sub process {
 
 	return $clean;
 }
+
Signature · 1 line
1.7.0.4
maintainer
#1 lore raw
Quoted 4 lines · anish
Quoted 2 lines · Joe Perches
Quoted 2 lines

If you do this, why not do it for all signature types? our $Valid_Signatures "(?:Signed-off-by:|Reviewed-by:|Acked-by:)"

Definitely.Please check below modified patch.

[]

Quoted 4 lines

This patch generates warning when there is no space betweenthe patch submitter name and successive mail-id.As suggested by
Joe Perches([email protected]) that we can do this for
all signature types.

Typos and spacing issues in commit message.

scripts/checkpatch.pl

Quoted 2 lines
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl my $summary_file = 0; · line 33

Quoted 2 lines
scripts/checkpatch.pl +2 -0
+my $sign;
+my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");

[]

scripts/checkpatch.pl sub process { · line 1371

Quoted 2 lines
scripts/checkpatch.pl +2 -0
+#check the patch for a signoff/Reviewed/Acked/Tested:
+        foreach $sign (@signs) {

It's inefficient to loop for this.
I think what I suggested is neater,
but what you're doing is OK.

Your email subject line should be more like:

[PATCH] checkpatch: More signature format verification

And when you revise patches, use some version number in the [PATCH] block like:

[PATCH v2] checkpatch: etc...

cheers, Joe

author
#2 lore raw

PATCH v2 1/1 checkpatch: Signature format verification

In reply to anish

From: anish kumar <[email protected]>

This patch generates warning when there is no space between the patch submitter and successive mail-id.

Modification:Suggested by Joe Perches([email protected]) that we can add this check for all signature types so added that change and added logic to remove the inefficent looping so that it can come out as soon as signature type is matched.

---
 scripts/checkpatch.pl |   30 +++++++++++++++++++++---------
 1 files changed, 21 insertions(+), 9 deletions(-)
scripts/checkpatch.pl +21 -9
index d867081..0622f41 100755
@@ -29,6 +29,8 @@ my $summary_file = 0;
 my $root;
 my %debug;
 my $help = 0;
+my ($sign,$loop_brk);
+my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
 
 sub help {
 	my ($exitcode) = @_;
@@ -1365,20 +1367,30 @@ sub process {
 			}
 		}
 
-#check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
-			# This is a signoff, if ugly, so do not double report.
-			$signoff++;
-			if (!($line =~ /^\s*Signed-off-by:/)) {
-				WARN("Signed-off-by: is the preferred form\n" .
+#check the patch for a signoff/Reviewed/Acked/Tested:
+foreach $sign (@signs) {
+	$loop_brk=0;
+	if ($line =~ /^\s*$sign/i) {
+		# This is a signoff, if ugly, so do not double report.
+		$signoff++;
+		$loop_brk++;
+		if (!($line =~ /^\s*$sign/)) {
+			WARN("$sign is the preferred form\n" .
+				$herecurr);
+		}
+		if ($line =~ /^\s*$sign(.*)/i) {
+			if($1 !~ /^\s*(\s[a-zA-Z]*.*)/i) {
+				WARN("Space required after $sign\n" .
 					$herecurr);
 			}
-			if ($line =~ /^\s*signed-off-by:\S/i) {
-				WARN("space required after Signed-off-by:\n" .
+			if($1 !~ /[\sa-zA-Z]+\s<.*>/i) {
+				WARN("Space required b/w Full Name & Mail-id:\n" .
 					$herecurr);
 			}
 		}
-
+	}
+last if ($loop_brk == 1);
+}
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .
Signature · 1 line
1.7.0.4
maintainer
#3 lore raw

Re: [patch v2] checkpatch: Signature format verification

Quoted 2 lines · anish

This patch generates warning when there is no space between the patch submitter and successive mail-id.

[]

Quoted 1 line

[]

scripts/checkpatch.pl my $summary_file = 0; · line 32

Quoted 9 lines
scripts/checkpatch.pl +1 -0
index d867081..0622f41 100755
@@ -29,6 +29,8 @@ my $summary_file = 0;
 my $root;
 my %debug;
 my $help = 0;
+my ($sign,$loop_brk);

These 2 variables don't need to be at this scope.

scripts/checkpatch.pl sub process {

Quoted 1 line
scripts/checkpatch.pl +0 -0
@@ -1365,20 +1367,30 @@ sub process {

[]

scripts/checkpatch.pl sub process { · line 1371

Quoted 2 lines
scripts/checkpatch.pl +2 -0
+#check the patch for a signoff/Reviewed/Acked/Tested:
+foreach $sign (@signs) {

Please use the appropriate indentation or add a new function.

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#5 lore raw

Re: [patch v2] checkpatch: Signature format verification

Quoted 7 lines · anish singh

On Sun, May 22, 2011 at 7:46 PM, Joe Perches <[email protected]> wrote:
On Sun, 2011-05-22 at 15:48 +0530, anish wrote:
> This patch generates warning when there is no space between > the patch submitter and successive mail-id.
[]
What does this mean?I checked in kernelnewbies archives and asked on IRC channel but couldn't get the meaning.Kindly let me know.

It means I didn't quote all of your original message.

#6 lore raw

Re: [patch v2] checkpatch: Signature format verification

Quoted 11 lines · Joe Perches
Quoted 7 lines · anish singh

On Sun, May 22, 2011 at 7:46 PM, Joe Perches <[email protected]> wrote:
On Sun, 2011-05-22 at 15:48 +0530, anish wrote:
> This patch generates warning when there is no space between > the patch submitter and successive mail-id.
[]
What does this mean?I checked in kernelnewbies archives and asked on IRC channel but couldn't get the meaning.Kindly let me know.

It means I didn't quote all of your original message.

Of course, we usually do "[...]" or "[..]". Without the dots, it just looks like some kind of uninitialized array.

-- Steve

maintainer
#7 lore raw

Re: [patch v2] checkpatch: Signature format verification

Quoted 8 lines · Steven Rostedt
Quoted 5 lines · Joe Perches
Quoted 3 lines · anish singh

On Sun, May 22, 2011 at 7:46 PM, Joe Perches <[email protected]> wrote:

        []

What does this mean?

It means I didn't quote all of your original message.

Of course, we usually do "[...]" or "[..]". Without the dots, it just looks like some kind of uninitialized array.

Email isn't C and I'm a trendsetter. (Either that or I'm alone again in right field...)

cheers, Joe

author
#8 lore raw

PATCH v3 1/1 checkpatch: Signature format verification

In reply to anish

From: anish kumar <[email protected]>

This patch generates warning when there is no space between the patch submitter and successive mail-id.

V2 Modification:Suggested by Joe Perches([email protected]) that we can add this check for all signature types so added that change and added logic to remove the inefficent looping so that it can come out as soon as signature type is matched.

V3 Modification:Moved the variable from global to local scope.

---
 scripts/checkpatch.pl |   36 ++++++++++++++++++++++++------------
 1 files changed, 24 insertions(+), 12 deletions(-)
scripts/checkpatch.pl +24 -12
index d867081..fbc0e62 100755
@@ -1365,20 +1365,32 @@ sub process {
 			}
 		}
 
-#check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
-			# This is a signoff, if ugly, so do not double report.
-			$signoff++;
-			if (!($line =~ /^\s*Signed-off-by:/)) {
-				WARN("Signed-off-by: is the preferred form\n" .
-					$herecurr);
-			}
-			if ($line =~ /^\s*signed-off-by:\S/i) {
-				WARN("space required after Signed-off-by:\n" .
-					$herecurr);
+#check the patch for a signoff/Reviewed/Acked/Tested:
+		my ($sign,$loop_brk);
+		my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
+		foreach $sign (@signs) {
+			$loop_brk=0;
+			if ($line =~ /^\s*$sign/i) {
+				# This is a signoff, if ugly, so do not double report.
+				$signoff++;
+				$loop_brk++;
+				if (!($line =~ /^\s*$sign/)) {
+					WARN("$sign is the preferred form\n" .
+						$herecurr);
+				}
+				if ($line =~ /^\s*$sign(.*)/i) {
+					if($1 !~ /^\s*(\s[a-zA-Z]*.*)/i) {
+						WARN("Space required after $sign\n" .
+							$herecurr);
+					}
+					if($1 !~ /[\sa-zA-Z]+\s<.*>/i) {
+						WARN("Space required b/w Full Name & Mail-id:\n" .
+							$herecurr);
+					}
+				}
 			}
+			last if ($loop_brk == 1);
 		}
-
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .
Signature · 1 line
1.7.0.4
maintainer
#9 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 3 lines · anish

From: anish kumar <[email protected]> This patch generates warning when there is no space between the patch submitter and successive mail-id.

[]

scripts/checkpatch.pl

Quoted 1 line
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 1377

Quoted 1 line
scripts/checkpatch.pl +1 -0
+				if (!($line =~ /^\s*$sign/)) {
				if  ($line !~ /etc...)

scripts/checkpatch.pl sub process { · line 1382

Quoted 5 lines
scripts/checkpatch.pl +5 -0
+					WARN("$sign is the preferred form\n" .
+						$herecurr);
+				}
+				if ($line =~ /^\s*$sign(.*)/i) {
+					if($1 !~ /^\s*(\s[a-zA-Z]*.*)/i) {

Email addresses may start with a quote (") or a digit.

Space between if and (

scripts/checkpatch.pl sub process { · line 1386

Quoted 4 lines
scripts/checkpatch.pl +4 -0
+						WARN("Space required after $sign\n" .
+							$herecurr);
+					}
+					if($1 !~ /[\sa-zA-Z]+\s<.*>/i) {

Space between if and (

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#11 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 7 lines · anish singh

\s[a-zA-Z]* => this is a regular expression for name & space b/w Last/First name
Ex: anish kumar
.* => It is used to grep whatever follows name...in our context mail-id
Ex: [email protected].
So, $1 will contain ...'anish kumar <[email protected]>'

Unless the email contains a quote or a period like:

#12 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 9 lines · On Mon, 23 May 2011 09:36:38 -0700 Joe Perches wrote:
Quoted 7 lines · anish singh

\s[a-zA-Z]* => this is a regular expression for name & space b/w Last/First name
Ex: anish kumar
.* => It is used to grep whatever follows name...in our context mail-id
Ex: [email protected].
So, $1 will contain ...'anish kumar <[email protected]>'

Quoted 3 lines

Unless the email contains a quote or a period like:

and quotes are not required (i.e., are optional) AFAIK.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

maintainer
#13 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 9 lines · Randy Dunlap
Quoted 8 lines · On Mon, 23 May 2011 09:36:38 -0700 Joe Perches wrote:
Quoted 7 lines · anish singh

\s[a-zA-Z]* => this is a regular expression for name & space b/w Last/First name
Ex: anish kumar
.* => It is used to grep whatever follows name...in our context mail-id
Ex: [email protected].
So, $1 will contain ...'anish kumar <[email protected]>'

Quoted 3 lines
Quoted 2 lines

Unless the email contains a quote or a period like:

and quotes are not required (i.e., are optional) AFAIK.

And still should be accepted.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#15 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 16 lines · On Mon, 23 May 2011 22:36:12 +0530 anish singh wrote:
Quoted 14 lines · Joe Perches
Quoted 12 lines · Randy Dunlap
Quoted 10 lines · On Mon, 23 May 2011 09:36:38 -0700 Joe Perches wrote:
Quoted 7 lines · anish singh

\s[a-zA-Z]* => this is a regular expression for name & space b/w Last/First name
Ex: anish kumar
.* => It is used to grep whatever follows name...in our context mail-id
Ex: [email protected].
So, $1 will contain ...'anish kumar <[email protected]>'

Unless the email contains a quote or a period like:

and quotes are not required (i.e., are optional) AFAIK.

Quoted 8 lines
Quoted 2 lines

And still should be accepted.

if ($1 !~ /^\s+([a-zA-Z\s\"]*.*)/i) {
WARN("Space required after $sign\n" . $herecurr);
}
if ($1 !~ /[\sa-zA-Z\"]*\s<.*>/i) { WARN("Space required b/w Full Name & Mail-id:\n" .

"b/w" is not a good abbreviation (for "between" ???).

Quoted 3 lines
                                                        $herecurr);
                                        }

Qoute has been taken care too now.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

maintainer
#16 lore raw

Re: [patch v3] checkpatch: Signature format verification

In reply to a message not in the archive
Quoted 5 lines · anish singh

if ($1 !~ /[\sa-zA-Z\"]*\s<.*>/i) { WARN("Space required b/w Full Name & Mail-id:\n" .

                                                        $herecurr);
                                        }

Quote has been taken care too now.

If you're going to try to validate email addresses, please do it reasonably correctly or not at all.

At a minimum you need to add digits, single quote, period, and comma.

Look at git-send-email.perl or scripts/get_maintainer.pl for email address validation samples.

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#18 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 6 lines · anish singh

On Mon, May 23, 2011 at 10:48 PM, Joe Perches <[email protected]> wrote:

Quoted 4 lines · anish singh
Quoted 4 lines

if ($1 !~ /[\sa-zA-Z\"]*\s<.*>/i) { WARN("Space required b/w Full Name & Mail-id:\n" .

      $herecurr);

Quote has been taken care too now.

Quoted 7 lines
Quoted 4 lines

If you're going to try to validate email addresses, please do it reasonably correctly or not at all. At a minimum you need to add digits, single quote, period, and comma.

I think there is a confusion.Let me state it once again. This patch is used to check space between "signs" & name/ name & mail-id.

I'm not confused.

You are only checking names with this form (without quotes) "First Last <[email protected]>", now quoted as well.

Names can have many forms.

8 bit chars, commas, quotes, apostrophes, all sorts of things.

for instance:

$ git log v2.6.36.. | grep -P "by:.*" | \
	grep -vP "by:[\sa-zA-Z\"]*\s<.*>" | \
	sort | uniq -c | sort -rn | head -20
   3421     Signed-off-by: David S. Miller <[email protected]>
   3137     Signed-off-by: Greg Kroah-Hartman <[email protected]>
   2232     Signed-off-by: John W. Linville <[email protected]>
    386     Signed-off-by: Wey-Yi Guy <[email protected]>
    292     Signed-off-by: Gustavo F. Padovan <[email protected]>
    257     Signed-off-by: Uwe Kleine-König <[email protected]>
    223     Signed-off-by: Rafael J. Wysocki <[email protected]>
    193     Signed-off-by: J. Bruce Fields <[email protected]>
    167     Signed-off-by: "Theodore Ts'o" <[email protected]>
    166     Signed-off-by: H. Peter Anvin <[email protected]>
    159     Signed-off-by: Paul E. McKenney <[email protected]>
    126     Signed-off-by: Jean-François Moine <[email protected]>
    121     Signed-off-by: Luis R. Rodriguez <[email protected]>
    107     Signed-off-by: Michał Mirosław <[email protected]>
    106     Acked-by: David S. Miller <[email protected]>
    103     Signed-off-by: Rafał Miłecki <[email protected]>
     76     Signed-off-by: Aneesh Kumar K.V <[email protected]>
     69     Signed-off-by: Lars-Peter Clausen <[email protected]>
     66     Signed-off-by: Stephen M. Cameron <[email protected]>
     63     Signed-off-by: Justin P. Mattock <[email protected]>

I still think what I suggested after your first patch attempt is simple and appropriate.

our $Valid_Signatures "(?:Signed-off-by:|Reviewed-by:|Acked-by:)"
...

        if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {
                my $space_before = $1;
                my $sign_off = $2;
                my $space_after = $3;
                my $email = $4;
                if (defined $space_before && $space_before ne "") {
                        warning (no space before...)
                }
                if ($sign_off !~ /$Valid_Signature/) {
                        warning (signature case...)
                }
                if (!defined $space_after || $space_after ne " ") {
                        warning (need only one space after colon...)
                }
                if (!validate_email($4)) {
                        warning (bad email...)
#19 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 1 line · Joe Perches

   167     Signed-off-by: "Theodore Ts'o" <[email protected]>

personally, i dont think those quotes should be there -mike

#20 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 4 lines · Mike Frysinger
Quoted 1 line · Joe Perches

   167     Signed-off-by: "Theodore Ts'o" <[email protected]>

personally, i dont think those quotes should be there

Although not strictly required by the ABNF of RFC822 and its successors, it's probably a wise thing to apply the double quotes in this case anyhow, due to the fairly high likelyhood that some software will choke on the ' character in Ted's last name if unquoted.

#21 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 10 lines · On Mon, May 23, 2011 at 21:24, <[email protected]> wrote:
Quoted 4 lines · Mike Frysinger
Quoted 1 line · Joe Perches

   167     Signed-off-by: "Theodore Ts'o" <[email protected]>

personally, i dont think those quotes should be there

Although not strictly required by the ABNF of RFC822 and its successors, it's probably a wise thing to apply the double quotes in this case anyhow, due to the fairly high likelyhood that some software will choke on the ' character in Ted's last name if unquoted.

then people will notice their software blows and they'll fix it

i dont have a problem with "over" quoting with the From/To/CC headers in say git format-patch or git send-email, but i dont think they make sense in s-o-b/related tags.
-mike

#22 lore raw

Re: [patch v3] checkpatch: Signature format verification

Quoted 12 lines · On Mon, 23 May 2011 21:31:29 -0400 Mike Frysinger wrote:
Quoted 10 lines · On Mon, May 23, 2011 at 21:24, <[email protected]> wrote:
Quoted 4 lines · Mike Frysinger
Quoted 1 line · Joe Perches

   167     Signed-off-by: "Theodore Ts'o" <[email protected]>

personally, i dont think those quotes should be there

Although not strictly required by the ABNF of RFC822 and its successors, it's probably a wise thing to apply the double quotes in this case anyhow, due to the fairly high likelyhood that some software will choke on the ' character in Ted's last name if unquoted.

Quoted 5 lines

then people will notice their software blows and they'll fix it

i dont have a problem with "over" quoting with the From/To/CC headers in say git format-patch or git send-email, but i dont think they make sense in s-o-b/related tags.

They certainly facilitate copy-and-paste at least.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

author
#23 lore raw

PATCH v4 1/1 checkpatch: Signature format verification

In reply to anish

From: anish kumar <[email protected]>

This patch generates warning when there is no space between the patch submitter and successive mail-id.

V2 Modification:Suggested by Joe Perches([email protected]) that we can add this check for all signature types so added that change and added logic to remove the inefficent looping so that it can come out as soon as signature type is matched.

V3 Modification:Moved the variable from global to local scope.

v4 Suggested by Joe Perches([email protected]) that names can have many forms.8 bit chars,commas,quotes,apostrphes,all sort of things.This is now taken care of.

---
 scripts/checkpatch.pl |   36 ++++++++++++++++++++++++------------
 1 files changed, 24 insertions(+), 12 deletions(-)
scripts/checkpatch.pl +24 -12
index d867081..bf724c9 100755
@@ -1365,20 +1365,32 @@ sub process {
 			}
 		}
 
-#check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
-			# This is a signoff, if ugly, so do not double report.
-			$signoff++;
-			if (!($line =~ /^\s*Signed-off-by:/)) {
-				WARN("Signed-off-by: is the preferred form\n" .
-					$herecurr);
-			}
-			if ($line =~ /^\s*signed-off-by:\S/i) {
-				WARN("space required after Signed-off-by:\n" .
-					$herecurr);
+#check the patch for a signoff/Reviewed/Acked/Tested:
+		my ($sign,$loop_brk);
+		my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
+		foreach $sign (@signs) {
+			$loop_brk=0;
+			if ($line =~ /^\s*$sign/i) {
+				# This is a signoff, if ugly, so do not double report.
+				$signoff++;
+				$loop_brk++;
+				if (!($line =~ /^\s*$sign/)) {
+					WARN("$sign is the preferred form\n" .
+						$herecurr);
+				}
+				if ($line =~ /^\s*$sign(.*)/i) {
+					if ($1 !~ /^\s+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {
+						WARN("Space required after $sign\n" .
+							$herecurr);
+					}
+					if ($1 !~ /([\sa-zA-Z\"\.\-\'\,]*)\s<.*>/i) {
+						WARN("Space required b/w Full Name & Mail-id:\n" .
+							$herecurr);
+					}
+				}
 			}
+			last if ($loop_brk == 1);
 		}
-
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .
Signature · 1 line
1.7.0.4
#24 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 12 lines · anish

From: anish kumar <[email protected]>

scripts/checkpatch.pl +9 -0
+		my ($sign,$loop_brk);
+		my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
+		foreach $sign (@signs) {
+			$loop_brk=0;
+			if ($line =~ /^\s*$sign/i) {
+				# This is a signoff, if ugly, so do not double report.
+				$signoff++;
+				$loop_brk++;
+				if (!($line =~ /^\s*$sign/)) {

scripts/checkpatch.pl sub process { · line 1387

Quoted 10 lines
scripts/checkpatch.pl +10 -0
+					WARN("$sign is the preferred form\n" .
+						$herecurr);
+				}
+				if ($line =~ /^\s*$sign(.*)/i) {
+					if ($1 !~ /^\s+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {
+						WARN("Space required after $sign\n" .
+							$herecurr);
+					}
+					if ($1 !~ /([\sa-zA-Z\"\.\-\'\,]*)\s<.*>/i) {
+						WARN("Space required b/w Full Name & Mail-id:\n" .

What's "b/w" black and white?

Also do we check for <>. As the above will trigger for missing <> and give a warning about spaces.

I once had my quilt mail send crap to LKML because one of the Cc's in a patch I pulled was missing the ending ">".

-- Steve

Quoted 10 lines
scripts/checkpatch.pl +4 -1
+							$herecurr);
+					}
+				}
 			}
+			last if ($loop_brk == 1);
 		}
-
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .
#25 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 17 lines · On Fri, 27 May 2011 14:16:57 -0400 Steven Rostedt wrote:
Quoted 16 lines · anish

From: anish kumar <[email protected]>

scripts/checkpatch.pl +13 -0
+		my ($sign,$loop_brk);
+		my @signs = ("Reviewed-by:","Acked-by:","Signed-off-by:","Tested-by:");
+		foreach $sign (@signs) {
+			$loop_brk=0;
+			if ($line =~ /^\s*$sign/i) {
+				# This is a signoff, if ugly, so do not double report.
+				$signoff++;
+				$loop_brk++;
+				if (!($line =~ /^\s*$sign/)) {
+					WARN("$sign is the preferred form\n" .
+						$herecurr);
+				}
+				if ($line =~ /^\s*$sign(.*)/i) {
Quoted 8 lines

scripts/checkpatch.pl sub process { · line 1387

Quoted 6 lines
scripts/checkpatch.pl +6 -0
+					if ($1 !~ /^\s+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {
+						WARN("Space required after $sign\n" .
+							$herecurr);
+					}
+					if ($1 !~ /([\sa-zA-Z\"\.\-\'\,]*)\s<.*>/i) {
+						WARN("Space required b/w Full Name & Mail-id:\n" .

What's "b/w" black and white?

I _think_ that it's "between", but I already requested that it be changed. It's not good. :(

Quoted 8 lines

Also do we check for <>. As the above will trigger for missing <> and give a warning about spaces.

I once had my quilt mail send crap to LKML because one of the Cc's in a patch I pulled was missing the ending ">".

-- Steve

Quoted 10 lines

scripts/checkpatch.pl sub process { · line 1396

Quoted 10 lines
scripts/checkpatch.pl +4 -1
+							$herecurr);
+					}
+				}
 			}
+			last if ($loop_brk == 1);
 		}
-
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("patch seems to be corrupt (line wrapped?)\n" .

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

maintainer
#26 lore raw

Re: [patch v4] checkpatch: Signature format verification

In reply to Steven Rostedt
Quoted 2 lines · Steven Rostedt

I once had my quilt mail send crap to LKML because one of the Cc's in a patch I pulled was missing the ending ">".

I'm pretty sure I've done that using git-send-email via bad copy/paste.

Actually, that one's been done a few times.

$ git log --pretty=oneline -E -i --grep "-by:.*<[^>]+$" | wc -l
129

But that's out of ~3.5 million non-merge commits.

cheers, Joe

maintainer
#27 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 1 line · Joe Perches

But that's out of ~3.5 million non-merge commits.

Oops. Off by an order magnitude, stupid fingers.

$ git log --pretty=oneline --no-merges  | wc -l
232816
#28 lore raw

Re: [patch v4] checkpatch: Signature format verification

In reply to Joe Perches
Quoted 7 lines · Joe Perches
Quoted 2 lines · Steven Rostedt

I once had my quilt mail send crap to LKML because one of the Cc's in a patch I pulled was missing the ending ">".

I'm pretty sure I've done that using git-send-email via bad copy/paste.

Quoted 6 lines

Actually, that one's been done a few times.

$ git log --pretty=oneline -E -i --grep "-by:.*<[^>]+$" | wc -l
129

But that's out of 232816 non-merge commits.

Even so, it would have been nice, because I ended up sending a crap load of emails to LKML without any content. I still use quilt as I like to verify what I send. But it took a dump on the missing ">" and caused all patches to be sent out as crap.

-- Steve

maintainer
#29 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 11 lines · Steven Rostedt
Quoted 6 lines · Joe Perches
Quoted 2 lines · Steven Rostedt

I once had my quilt mail send crap to LKML because one of the Cc's in a patch I pulled was missing the ending ">".

$ git log --pretty=oneline -E -i --grep "-by:.*<[^>]+$" | wc -l
129
But that's out of 232816 non-merge commits.

Even so, it would have been nice, because I ended up sending a crap load of emails to LKML without any content. I still use quilt as I like to verify what I send. But it took a dump on the missing ">" and caused all patches to be sent out as crap.

No doubt.

This concept should also verify the "To: " and "cc: " tag lines.

cheers, Joe

maintainer
#30 lore raw

Re: [patch v4] checkpatch: Signature format verification

In reply to anish
Quoted 1 line · anish

From: anish kumar <[email protected]>

[]

Quoted 3 lines

v4 Suggested by Joe Perches([email protected]) that names can have many forms.8 bit chars,commas,quotes,apostrphes,all sort of things.This is now taken care of.

NAK. No it's not.

Quoted 1 line

[]

scripts/checkpatch.pl sub process { · line 1384

Quoted 4 lines
scripts/checkpatch.pl +4 -0
+				if ($line =~ /^\s*$sign(.*)/i) {
+					if ($1 !~ /^\s+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {
+						WARN("Space required after $sign\n" .
+							$herecurr);

8 bit chars, digits?

scripts/checkpatch.pl sub process { · line 1388

Quoted 4 lines
scripts/checkpatch.pl +4 -0
+					}
+					if ($1 !~ /([\sa-zA-Z\"\.\-\'\,]*)\s<.*>/i) {
+						WARN("Space required b/w Full Name & Mail-id:\n" .
+							$herecurr);

For the 3rd time, please use this form:

        if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {

and if you really want email format validation,
use a separate function.

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#32 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 1 line · Manish Kumar Singh

On Fri, May 27, 2011 at 11:59 PM, Joe Perches <[email protected]> wrote:

[]

Quoted 2 lines

8 bit chars, digits?
What is 8 bit char...could you describe it?

An ascii char with the high order bit set.
Any char from 128 to 255.

[]

Quoted 4 lines

For the 3rd time, please use this form:
if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {
and if you really want email format validation, use a separate function.

[]

Quoted 4 lines

Problem with your way of doing is if anyone misses space between "sign" & name,
the regular expression (/^(\s*)($ValidSignatures)(\s*)(.*)$/i ) doesn't match

That's incorrect. Try it.

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#34 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 6 lines · anish singh

On Sat, May 28, 2011 at 12:38 AM, Joe Perches <[email protected]> wrote:
On Sat, 2011-05-28 at 00:28 +0530, Manish Kumar Singh wrote:
> For the 3rd time, please use this form:
> if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {
> and if you really want email format validation,
> use a separate function.

Quoted 8 lines

[]
> Problem with your way of doing is if anyone misses space between
> "sign" & name,
> the regular expression (/^(\s*)($ValidSignatures)(\s*)(.*)$/i )
> doesn't match
That's incorrect. Try it.

Anish, do you have a response to this?

Quoted 3 lines

I have replaced b/w with "between".
And as Manish rightly exlained this patch is not meant for email validation.

Yet it does incorrectly anyway to nominally skip
name and find <.*>. That's the problem.

Look again at the patterns:

+ if ($line =~ /^\s*$sign(.*)/i) {
+ if ($1 !~ /^\s+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {
+ WARN("Space required after $sign\n" .
+ $herecurr);
+ }

and

+ if ($1 !~ /([\sa-zA-Z\"\.\-\'\,]*)\s<.*>/i) {
+ WARN("Space required b/w Full Name & Mail-id:\n" .
+ $herecurr);
+ }

Quoted 1 line

I would like to know if anything else is missing?

Correctness.

Keep at it, it'll eventually be good to go.

cheers, Joe

A message that is not in the archive (sent off-list or not yet received): [email protected]

#36 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 5 lines · anish singh

Anish, do you have a response to this?
Your approach is correct but i am trying to do in my own way.

Why?? Correct is more important than individual preferences.

Quoted 9 lines

> I have replaced b/w with "between".
> And as Manish rightly exlained this patch is not meant for > email validation.

Yet it does incorrectly anyway to nominally skip name and find <.*>. That's the problem.

Quoted 6 lines

Look again at the patterns:

+ if ($line =~ /^\s*$sign(.*)/i)
{
+ if ($1 !~ /^\s
+([a-zA-Z\s\"\.\-\'\,]*.*)/i) {

Note, why the []? Because you basically have:

	/^\s+([blahblah]*.*)/

which is the same as:

	/^\s+(.*)/
Quoted 5 lines

+ WARN("Space
required after $sign\n" .
+
$herecurr);

Quoted 8 lines

+ }

here i am trying to check space between sign & name.
In first if loop i am checking if sign is present in line or not. If yes, enter into second if loop & check if $1 starts with space or not(which takes care of checking space between sign & name). In this if loop again i am catching name & rest of the things in $1. $1 will be used for checking space between name & mail-id.

BTW, people hate perl for this very reason. This subtle changing of $1 is very hard to follow if you are not a perl expert. I use perl all the time (recordmcount.pl and ktest.pl), but if you look at my code, you will see that I purposely avoid these subtle characteristics of perl, because that's the (very rightfully so) reason people complain that perl is a write once and never maintain language.

I understood from the beginning what you were doing, but I had to think about it more than I should have.

Quoted 11 lines

and

+ if ($1 !~ /([\sa-zA-Z
\"\.\-\'\,]*)\s<.*>/i) {
+ WARN("Space
required b/w Full Name & Mail-id:\n" .
+
$herecurr);

+ }

You really need to get a new MUA.

Quoted 11 lines

In this If loop i am using $1 (returned by earlier pattern) to check space
between mail and <mail-id>.
If we print $1 after last if loop, we can get name appropriately. So, i am not skipping name here to match <>.

I will change <.*> to <.*?> (non-greedy match) for matching very first enclosing bracket.

Again, this doesn't explain the space warning when I have just his:

Signed-off-by <[email protected]>

Because that will not match the above, because the $1 will be "<[email protected]>". With no space.

-- Steve

maintainer
#37 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 4 lines · Steven Rostedt
Quoted 2 lines · anish singh

Anish, do you have a response to this?
Your approach is correct but i am trying to do in my own way.

Why?? Correct is more important than individual preferences.

Thanks Steven, I was about to write something similar.

[]

Quoted 8 lines
Quoted 2 lines

In this if loop again i am catching name & rest of the things in $1. $1 will be used for checking space between name & mail-id.

BTW, people hate perl for this very reason. This subtle changing of $1 is very hard to follow if you are not a perl expert. I use perl all the time (recordmcount.pl and ktest.pl), but if you look at my code, you will see that I purposely avoid these subtle characteristics of perl, because that's the (very rightfully so) reason people complain that perl is a write once and never maintain language.

I'm not a perl geek, nor do I want to be, but that's exactly why I suggested after Anish's first attempt something I think reasonably clear and straightforward which avoids any reuse of $n.

Anish, please use this style.

	if ($line =~ /^(\s*)($ValidSignatures)(\s*)(.*)$/i) {
		my $space_before = $1;
		my $sign_off = $2;
		my $space_after = $3;
		my $email = $4;
		if (defined $space_before && $space_before ne "") {
			warning (no space before...)
		}
		if ($sign_off !~ /$Valid_Signature/) {
			warning (signature case...)
		}
		if (!defined $space_after || $space_after ne " ") {
			warning (need only one space after colon...)
		}
		if (!validate_email($email)) {
			warning (bad email...)
		}
	}

A message that is not in the archive (sent off-list or not yet received): [email protected]

maintainer
#39 lore raw

Re: [patch v4] checkpatch: Signature format verification

Quoted 7 lines · anish singh

On Sat, May 28, 2011 at 1:48 AM, Steven Rostedt <[email protected]> wrote:
On Sat, 2011-05-28 at 01:24 +0530, anish singh wrote:
> Anish, do you have a response to this?
> Your approach is correct but i am trying to do in my own way.
Why?? Correct is more important than individual preferences.
Absolutely.Will use Joe suggested style of coding.

Good. And please use text only not html emails
when cc'ing any list at vger.kernel.org.

#40 lore raw

Re: [patch v4] checkpatch: Signature format verification

In reply to anish
Quoted 2 lines · On Fri, 27 May 2011 23:31:51 +0530 anish <[email protected]> wrote:

This patch generates warning when there is no space between the patch submitter and successive mail-id.

I don't even know what this means :( Please modify the changelog to include a complete example of the offending input and of the generated warning.