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", |
