From f47fda21dc3ee35e94abafc3c70c95a1e33a0ead Mon Sep 17 00:00:00 2001 From: "jianxin.pan" Date: Fri, 30 Jun 2017 19:39:17 +0800 Subject: [PATCH] script: check defconfig and commit message before merge PD#138714: check patch before merge 1) meson32/64_defconfig should generated from savedefconfig 2) commit message style Change-Id: Ia7330533249f2a93e541f10981ec4caae9978879 Signed-off-by: jianxin.pan --- scripts/amlogic/merge_pre_check.pl | 264 +++++++++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100755 scripts/amlogic/merge_pre_check.pl diff --git a/scripts/amlogic/merge_pre_check.pl b/scripts/amlogic/merge_pre_check.pl new file mode 100755 index 0000000..1bf42f7 --- /dev/null +++ b/scripts/amlogic/merge_pre_check.pl @@ -0,0 +1,264 @@ +#!/usr/bin/perl -W +# (c) 2017, Jianxin Pan. + +my $top = "."; +my $err_cnt = 0; +my $k_v = 3; + +# Get Kernel Version + +sub get_kernel_version +{ + my $file = "$top/Makefile"; + print "1. Get kernel version: "; + open F, $file or die "Can't open file '$file' for read. $!" ; + my $line = ; + close F; + if( $line =~ /^VERSION = (\w)$/) + { + $k_v = $1; + } + print "$k_v\n"; +} + + + +#Check mesonxx_defconfig +sub check_defconfig +{ + my $err = 0; + print "2. Check meson_defconfig: "; + `make ARCH=arm64 meson64_defconfig 1> /dev/null 2>&1`; + `make ARCH=arm64 savedefconfig 1> /dev/null 2>&1`; + `rm -fr .config`; + my $diff = `diff defconfig ./arch/arm64/configs/meson64_defconfig`; + if(length($diff)) + { + $err_cnt += 1; + $err = 1; + $err_msg .= " $err_cnt: meson64_defconfig not generated by savedefconfig\n"; + } + + if($k_v >=4) + { + `make ARCH=arm meson32_defconfig 1> /dev/null 2>&1`; + `make ARCH=arm savedefconfig 1> /dev/null 2>&1`; + `rm -fr .config`; + $diff = `diff defconfig ./arch/arm/configs/meson32_defconfig`; + if(length($diff)) + { + $err_cnt += 1; + $err = 1; + $err_msg .= " $err_cnt: meson32_defconfig not generated by savedefconfig\n"; + } + } + print $err ? "fail\n" : "success\n"; +} + + +my $MAX_LEN = 80; + +sub check_msg_common +{ + my $line = pop(@_); + my $lnum = pop(@_); + + if( (length($line) > ($MAX_LEN + 4) ) && ($lnum > 4) ) + { #Line over 80 characters is not allowed. + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: Line over $MAX_LEN characters: <$line>\n"; + } + + if ( ($line =~ /\s+$/) && $line !~/^(\s){4}$/ ) + { #No space at the end of line + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: No space at the end of line: <$line>\n"; + } +} + +sub check_msg_49 +{ + my $line = pop(@_); + my $lnum = pop(@_); + + if( $lnum == 5 ) + { + if ($line !~ /^(\s){4}([\w]+:\s){1,2}[\w]+.*[\S]+$/) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: This line should be \"module: message\", but <$line>\n"; + } + elsif ( $line =~ /PD\#/i ) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: PD#XXXX should not in the first line for 4.9, but <$line>\n"; + } + elsif ( $line =~ /(kernel)/i) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: No 'kernel' in this line, but <$line>\n"; + } + } + + if( $lnum == 6 ) + { + if( $line !~/^(\s){4}$/ ) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: This line should be empty, but <$line>\n"; + } + } + + if( $lnum == 7 ) + { + if( $line !~ /^(\s){4}PD\#(\d)+:(\s\w.*)*$/ ) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: PD#xxxx: detailed description, but <$line>\n"; + } + } +} + +sub check_msg_314 +{ + my $line = pop(@_); + my $lnum = pop(@_); + + if( $lnum == 5 ) + { + if ($line !~ /^(\s){4}PD\#(\d)+:\s([\w]+:\s){1,2}[\w]+.*[\S]+$/) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: This line should be \"PD#XXXX: module_id: commit message\", but <$line>\n"; + } + elsif ( $line =~ /(kernel)/i) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: No 'kerenl' in this line, but <$line>\n"; + } + } + + if( $lnum == 6 ) + { + if( $line !~/^(\s){4}$/ ) + { + $err_cnt += 1; + $line =~ s/^(\s){4}//; + $err_msg .= " $err_cnt: This line should be empty, but <$line>\n"; + } + } +} + + +sub check_commit_msg +{ + + my $lnum = 0; + my $err = 0; + my $result = 0; + my $commit; + my $FILE; + + open($FILE, '<&STDIN'); + + while (<$FILE>) { + chomp; + my $line = $_; + + + if( $line =~ /^commit\s([0-9a-z])+$/) + { + $lnum = 0; + $commit = $line; + $skip = 0; + } + $lnum ++; + + + if( ($lnum ==2) && ($line =~ /^Merge: /)) + { + #$skip =1; #Don't Check branch merge + } + if( ($lnum==2) && ($line !~ /^Author: .*\@amlogic\.com\>$/)) + { + #$skip =1; #Don't Check commit which is not from amlogic + } + + if( $err == 1) + { + $skip = 1; + $err = 0; + $result = 1; + } + if( $skip ==1) + { + next; + } + + check_msg_common($lnum, $line); + if ( $k_v >= 4) + { + check_msg_49($lnum, $line); + } + else + { + check_msg_314($lnum, $line); + } + } + close $FILE; +} + +sub out_review +{ + my $out_msg = ""; + my $out_file = "../output/review.txt"; + + if ($err_cnt) + { + $out_msg = <: git log -1 | ./scripts/amlogic/merge_pre_check.pl - + ... +${err_msg} +", "labels": {"Verified": -1}} +END + + open O, "> $out_file" or die "Can't Open $out_file For Write \n"; + print O $out_msg; + close O; + print "\n========\n$out_msg\n\n"; + } + else + { + print "\n========\nMerge pre check success\n\n"; + } +} + +#start + +my $err_msg_p = "\nCommit Pre check failed. Total $err_cnt errors.\n"; + +#Get Kernel Version + +get_kernel_version(); + +#Check meson_defconfig +check_defconfig(); + +#Check commit message + +check_commit_msg(); + +out_review(); +#out +exit $err_cnt ? 1 : 0; \ No newline at end of file -- 2.7.4