ktest: Allow bisect test to restart where it left off

If a bisect is killed for some reason, have ktest detect that a bisect
is in progress and if so, allow the user to start the bisect where
it left off.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Steven Rostedt 2011-11-22 20:48:57 -05:00 committed by Steven Rostedt
parent 0e7a22de25
commit dad9875492
1 changed files with 64 additions and 6 deletions

View File

@ -239,20 +239,36 @@ $config_help{"REBOOT_SCRIPT"} = << "EOF"
EOF
;
sub read_yn {
my ($prompt) = @_;
sub read_prompt {
my ($cancel, $prompt) = @_;
my $ans;
for (;;) {
print "$prompt [Y/n] ";
if ($cancel) {
print "$prompt [y/n/C] ";
} else {
print "$prompt [Y/n] ";
}
$ans = <STDIN>;
chomp $ans;
if ($ans =~ /^\s*$/) {
$ans = "y";
if ($cancel) {
$ans = "c";
} else {
$ans = "y";
}
}
last if ($ans =~ /^y$/i || $ans =~ /^n$/i);
print "Please answer either 'y' or 'n'.\n";
if ($cancel) {
last if ($ans =~ /^c$/i);
print "Please answer either 'y', 'n' or 'c'.\n";
} else {
print "Please answer either 'y' or 'n'.\n";
}
}
if ($ans =~ /^c/i) {
exit;
}
if ($ans !~ /^y$/i) {
return 0;
@ -260,6 +276,18 @@ sub read_yn {
return 1;
}
sub read_yn {
my ($prompt) = @_;
return read_prompt 0, $prompt;
}
sub read_ync {
my ($prompt) = @_;
return read_prompt 1, $prompt;
}
sub get_ktest_config {
my ($config) = @_;
my $ans;
@ -1895,6 +1923,13 @@ sub run_bisect {
}
}
sub update_bisect_replay {
my $tmp_log = "$tmpdir/ktest_bisect_log";
run_command "git bisect log > $tmp_log" or
die "can't create bisect log";
return $tmp_log;
}
sub bisect {
my ($i) = @_;
@ -1934,8 +1969,31 @@ sub bisect {
$type = "boot";
}
# Check if a bisect was running
my $bisect_start_file = "$builddir/.git/BISECT_START";
my $check = $opt{"BISECT_CHECK[$i]"};
if (defined($check) && $check ne "0") {
my $do_check = defined($check) && $check ne "0";
if ( -f $bisect_start_file ) {
print "Bisect in progress found\n";
if ($do_check) {
print " If you say yes, then no checks of good or bad will be done\n";
}
if (defined($replay)) {
print "** BISECT_REPLAY is defined in config file **";
print " Ignore config option and perform new git bisect log?\n";
if (read_ync " (yes, no, or cancel) ") {
$replay = update_bisect_replay;
$do_check = 0;
}
} elsif (read_yn "read git log and continue?") {
$replay = update_bisect_replay;
$do_check = 0;
}
}
if ($do_check) {
# get current HEAD
my $head = get_sha1("HEAD");