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_type;
my $patchcheck_start; my $patchcheck_start;
my $patchcheck_cherry;
my $patchcheck_end; my $patchcheck_end;
# set when a test is something other that just building or install # set when a test is something other that just building or install
@ -320,6 +321,7 @@ my %option_map = (
"PATCHCHECK_TYPE" => \$patchcheck_type, "PATCHCHECK_TYPE" => \$patchcheck_type,
"PATCHCHECK_START" => \$patchcheck_start, "PATCHCHECK_START" => \$patchcheck_start,
"PATCHCHECK_CHERRY" => \$patchcheck_cherry,
"PATCHCHECK_END" => \$patchcheck_end, "PATCHCHECK_END" => \$patchcheck_end,
); );
@ -3181,9 +3183,16 @@ sub patchcheck {
my $start = $patchcheck_start; my $start = $patchcheck_start;
my $cherry = $patchcheck_cherry;
if (!defined($cherry)) {
$cherry = 0;
}
my $end = "HEAD"; my $end = "HEAD";
if (defined($patchcheck_end)) { if (defined($patchcheck_end)) {
$end = $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 # Get the true sha1's since we can use things like HEAD~3
@ -3197,24 +3206,38 @@ sub patchcheck {
$type = "boot"; $type = "boot";
} }
open (IN, "git log --pretty=oneline $end|") or if ($cherry) {
dodie "could not get git list"; 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; my @list;
while (<IN>) { while (<IN>) {
chomp; chomp;
# git cherry adds a '+' we want to remove
s/^\+ //;
$list[$#list+1] = $_; $list[$#list+1] = $_;
last if (/^$start/); last if (/^$start/);
} }
close(IN); close(IN);
if ($list[$#list] !~ /^$start/) { if (!$cherry) {
fail "SHA1 $start not found"; if ($list[$#list] !~ /^$start/) {
fail "SHA1 $start not found";
}
# go backwards in the list
@list = reverse @list;
} }
# go backwards in the list doprint("Going to test the following commits:\n");
@list = reverse @list; foreach my $l (@list) {
doprint "$l\n";
}
my $save_clean = $noclean; my $save_clean = $noclean;
my %ignored_warnings; my %ignored_warnings;

View File

@ -906,6 +906,16 @@
# #
# PATCHCHECK_END is the last patch to check (default HEAD) # 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: # PATCHCHECK_TYPE is required and is the type of test to run:
# build, boot, test. # build, boot, test.
# #