Skip to content

Commit

Permalink
ktest: Allow bisect test to restart where it left off
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Dec 23, 2011
1 parent 0e7a22d commit dad9875
Showing 1 changed file with 64 additions and 6 deletions.
70 changes: 64 additions & 6 deletions tools/testing/ktest/ktest.pl
Original file line number Diff line number Diff line change
Expand Up @@ -239,27 +239,55 @@
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;
}
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;
Expand Down Expand Up @@ -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) = @_;

Expand Down Expand Up @@ -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");
Expand Down

0 comments on commit dad9875

Please sign in to comment.