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:
parent
0e7a22de25
commit
dad9875492
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user