ktest: Add PATCHCHECK_CHERRY
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Sat, 20 Sep 2014 00:10:39 +0000 (20:10 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Sat, 20 Sep 2014 00:10:39 +0000 (20:10 -0400)
Add a way to run a patchcheck test on the commits that are in one branch
but not in another. This uses git cherry to find a list of commits to
test each one with.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
tools/testing/ktest/ktest.pl
tools/testing/ktest/sample.conf

index 55ab700..3b7a180 100755 (executable)
@@ -194,6 +194,7 @@ my $config_bisect_check;
 
 my $patchcheck_type;
 my $patchcheck_start;
+my $patchcheck_cherry;
 my $patchcheck_end;
 
 # set when a test is something other that just building or install
@@ -320,6 +321,7 @@ my %option_map = (
 
     "PATCHCHECK_TYPE"          => \$patchcheck_type,
     "PATCHCHECK_START"         => \$patchcheck_start,
+    "PATCHCHECK_CHERRY"                => \$patchcheck_cherry,
     "PATCHCHECK_END"           => \$patchcheck_end,
 );
 
@@ -3181,9 +3183,16 @@ sub patchcheck {
 
     my $start = $patchcheck_start;
 
+    my $cherry = $patchcheck_cherry;
+    if (!defined($cherry)) {
+       $cherry = 0;
+    }
+
     my $end = "HEAD";
     if (defined($patchcheck_end)) {
        $end = $patchcheck_end;
+    } elsif ($cherry) {
+       die "PATCHCHECK_END must be defined with PATCHCHECK_CHERRY\n";
     }
 
     # Get the true sha1's since we can use things like HEAD~3
@@ -3197,24 +3206,38 @@ sub patchcheck {
        $type = "boot";
     }
 
-    open (IN, "git log --pretty=oneline $end|") or
-       dodie "could not get git list";
+    if ($cherry) {
+       open (IN, "git cherry -v $start $end|") or
+           dodie "could not get git list";
+    } else {
+       open (IN, "git log --pretty=oneline $end|") or
+           dodie "could not get git list";
+    }
 
     my @list;
 
     while (<IN>) {
        chomp;
+       # git cherry adds a '+' we want to remove
+       s/^\+ //;
        $list[$#list+1] = $_;
        last if (/^$start/);
     }
     close(IN);
 
-    if ($list[$#list] !~ /^$start/) {
-       fail "SHA1 $start not found";
+    if (!$cherry) {
+       if ($list[$#list] !~ /^$start/) {
+           fail "SHA1 $start not found";
+       }
+
+       # go backwards in the list
+       @list = reverse @list;
     }
 
-    # go backwards in the list
-    @list = reverse @list;
+    doprint("Going to test the following commits:\n");
+    foreach my $l (@list) {
+       doprint "$l\n";
+    }
 
     my $save_clean = $noclean;
     my %ignored_warnings;
index 911e45a..6c58cd8 100644 (file)
 #
 #  PATCHCHECK_END is the last patch to check (default HEAD)
 #
+#  PATCHCHECK_CHERRY if set to non zero, then git cherry will be
+#      performed against PATCHCHECK_START and PATCHCHECK_END. That is
+#
+#      git cherry ${PATCHCHECK_START} ${PATCHCHECK_END}
+#
+#      Then the changes found will be tested.
+#
+#      Note, PATCHCHECK_CHERRY requires PATCHCHECK_END to be defined.
+#      (default 0)
+#
 #  PATCHCHECK_TYPE is required and is the type of test to run:
 #      build, boot, test.
 #