Commit dad98754 authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt

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: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 0e7a22de
...@@ -239,20 +239,36 @@ $config_help{"REBOOT_SCRIPT"} = << "EOF" ...@@ -239,20 +239,36 @@ $config_help{"REBOOT_SCRIPT"} = << "EOF"
EOF EOF
; ;
sub read_yn { sub read_prompt {
my ($prompt) = @_; my ($cancel, $prompt) = @_;
my $ans; my $ans;
for (;;) { for (;;) {
print "$prompt [Y/n] "; if ($cancel) {
print "$prompt [y/n/C] ";
} else {
print "$prompt [Y/n] ";
}
$ans = <STDIN>; $ans = <STDIN>;
chomp $ans; chomp $ans;
if ($ans =~ /^\s*$/) { if ($ans =~ /^\s*$/) {
$ans = "y"; if ($cancel) {
$ans = "c";
} else {
$ans = "y";
}
} }
last if ($ans =~ /^y$/i || $ans =~ /^n$/i); 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) { if ($ans !~ /^y$/i) {
return 0; return 0;
...@@ -260,6 +276,18 @@ sub read_yn { ...@@ -260,6 +276,18 @@ sub read_yn {
return 1; 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 { sub get_ktest_config {
my ($config) = @_; my ($config) = @_;
my $ans; my $ans;
...@@ -1895,6 +1923,13 @@ sub run_bisect { ...@@ -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 { sub bisect {
my ($i) = @_; my ($i) = @_;
...@@ -1934,8 +1969,31 @@ sub bisect { ...@@ -1934,8 +1969,31 @@ sub bisect {
$type = "boot"; $type = "boot";
} }
# Check if a bisect was running
my $bisect_start_file = "$builddir/.git/BISECT_START";
my $check = $opt{"BISECT_CHECK[$i]"}; 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 # get current HEAD
my $head = get_sha1("HEAD"); my $head = get_sha1("HEAD");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment