diff options
author | Joe Perches <joe@perches.com> | 2014-08-06 19:10:57 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-06 21:01:28 -0400 |
commit | d311cd44545f2f69749c68d6723360b4cc21cd02 (patch) | |
tree | 936d10a3a8ae8e3a6030f23582582aa91e3c66c1 /scripts | |
parent | e367455a9f25b11e02b7ea7678a7b146bdd6667e (diff) |
checkpatch: add test for commit id formatting style in commit log
Commit logs have various forms of commit id references.
Try to standardize on a 12 character long lower case commit id along
with a description of parentheses and the quoted subject line.
ie: commit 0123456789ab ("commit description")
If git and a git tree exists, look up the commit id and emit the
appropriate line as part of the message.
Signed-off-by: Joe Perches <joe@perches.com>
Requested-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/checkpatch.pl | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 3661ffc7af23..496f9abdb930 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -550,6 +550,34 @@ sub seed_camelcase_includes { | |||
550 | } | 550 | } |
551 | } | 551 | } |
552 | 552 | ||
553 | sub git_commit_info { | ||
554 | my ($commit, $id, $desc) = @_; | ||
555 | |||
556 | return ($id, $desc) if ((which("git") eq "") || !(-e ".git")); | ||
557 | |||
558 | my $output = `git log --no-color --format='%H %s' -1 $commit 2>&1`; | ||
559 | $output =~ s/^\s*//gm; | ||
560 | my @lines = split("\n", $output); | ||
561 | |||
562 | if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) { | ||
563 | # Maybe one day convert this block of bash into something that returns | ||
564 | # all matching commit ids, but it's very slow... | ||
565 | # | ||
566 | # echo "checking commits $1..." | ||
567 | # git rev-list --remotes | grep -i "^$1" | | ||
568 | # while read line ; do | ||
569 | # git log --format='%H %s' -1 $line | | ||
570 | # echo "commit $(cut -c 1-12,41-)" | ||
571 | # done | ||
572 | } elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) { | ||
573 | } else { | ||
574 | $id = substr($lines[0], 0, 12); | ||
575 | $desc = substr($lines[0], 41); | ||
576 | } | ||
577 | |||
578 | return ($id, $desc); | ||
579 | } | ||
580 | |||
553 | $chk_signoff = 0 if ($file); | 581 | $chk_signoff = 0 if ($file); |
554 | 582 | ||
555 | my @rawlines = (); | 583 | my @rawlines = (); |
@@ -674,6 +702,18 @@ sub format_email { | |||
674 | return $formatted_email; | 702 | return $formatted_email; |
675 | } | 703 | } |
676 | 704 | ||
705 | sub which { | ||
706 | my ($bin) = @_; | ||
707 | |||
708 | foreach my $path (split(/:/, $ENV{PATH})) { | ||
709 | if (-e "$path/$bin") { | ||
710 | return "$path/$bin"; | ||
711 | } | ||
712 | } | ||
713 | |||
714 | return ""; | ||
715 | } | ||
716 | |||
677 | sub which_conf { | 717 | sub which_conf { |
678 | my ($conf) = @_; | 718 | my ($conf) = @_; |
679 | 719 | ||
@@ -1958,6 +1998,20 @@ sub process { | |||
1958 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); | 1998 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); |
1959 | } | 1999 | } |
1960 | 2000 | ||
2001 | # Check for improperly formed commit descriptions | ||
2002 | if ($in_commit_log && | ||
2003 | $line =~ /\bcommit\s+[0-9a-f]{5,}/i && | ||
2004 | $line !~ /\b[Cc]ommit [0-9a-f]{12,16} \("/) { | ||
2005 | $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i; | ||
2006 | my $init_char = $1; | ||
2007 | my $orig_commit = lc($2); | ||
2008 | my $id = '01234567890ab'; | ||
2009 | my $desc = 'commit description'; | ||
2010 | ($id, $desc) = git_commit_info($orig_commit, $id, $desc); | ||
2011 | ERROR("GIT_COMMIT_ID", | ||
2012 | "Please use 12 to 16 chars for the git commit ID like: '${init_char}ommit $id (\"$desc\")'\n" . $herecurr); | ||
2013 | } | ||
2014 | |||
1961 | # Check for wrappage within a valid hunk of the file | 2015 | # Check for wrappage within a valid hunk of the file |
1962 | if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) { | 2016 | if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) { |
1963 | ERROR("CORRUPTED_PATCH", | 2017 | ERROR("CORRUPTED_PATCH", |