ktest: Add PATCHCHECK_CHERRY

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>
This commit is contained in:
Steven Rostedt (Red Hat) 2014-09-19 20:10:39 -04:00 committed by Steven Rostedt
parent 9e82bf0141
commit 23a0e1611b
2 changed files with 39 additions and 6 deletions

View File

@ -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;

View File

@ -906,6 +906,16 @@
#
# 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.
#