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.
Showing the changes to scripts/checkpatch.pl (1 of 1 file). Show all
Unified · Split
| @@ -550,6 +550,34 @@ sub seed_camelcase_includes { · 549 unmodified lines | ||
| 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 | 581 | $chk_signoff = 0 if ($file); |
| 554 | 582 | |
| 555 | 583 | my @rawlines = (); |
| @@ -674,6 +702,18 @@ sub format_email { · 118 unmodified lines | ||
| 674 | 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 | 717 | sub which_conf { |
| 678 | 718 | my ($conf) = @_; |
| 679 | 719 | |
| @@ -1958,6 +1998,20 @@ sub process { · 1278 unmodified lines | ||
| 1958 | 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 | 2015 | # Check for wrappage within a valid hunk of the file |
| 1962 | 2016 | if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) { |
| 1963 | 2017 | ERROR("CORRUPTED_PATCH", |