diff options
author | Nicholas Clark <nick@ccl4.org> | 2011-10-27 16:55:53 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2011-10-27 16:55:53 +0200 |
commit | c382b335bf126c689844d41284086e1d504caa1b (patch) | |
tree | 5557c5eda39035bb66cbd80d1ee0abca9ecccb04 /Porting/bisect.pl | |
parent | cf5fabc183c682cd923bc49081f41c51c187ff9d (diff) | |
download | perl-c382b335bf126c689844d41284086e1d504caa1b.tar.gz |
Minor usability improvements to bisect.pl
* Canonicalise the start and end commit-ish to actual commits before changing
what is checked out. This allows one to use HEAD for either.
* For git 1.6.6 and later, use git bisect reset HEAD to avoid one change of
what is checked out
* Sanity test the end revision before the start revision (or the search for a
start revision), as one compile of the end revision is likely to be faster
than the search (particularly if the search fails), hence on average any
problems will be reported earlier.
Diffstat (limited to 'Porting/bisect.pl')
-rwxr-xr-x | Porting/bisect.pl | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/Porting/bisect.pl b/Porting/bisect.pl index 98cd127f34..292a3ef50d 100755 --- a/Porting/bisect.pl +++ b/Porting/bisect.pl @@ -30,20 +30,41 @@ system $^X, $runner, '--check-args', @ARGV and exit 255; my @stable = qw(perl-5.002 perl-5.003 perl-5.004 perl-5.005 perl-5.6.0 perl-5.8.0 v5.10.0 v5.12.0 v5.14.0); -if ($start) { - system "git rev-parse $start >/dev/null" and die; -} $end = 'blead' unless defined $end; -system "git rev-parse $end >/dev/null" and die; + +# Canonicalising branches to revisions before moving the checkout permits one +# to use revisions such as 'HEAD' for --start or --end +foreach ($start, $end) { + next unless $_; + $_ = `git rev-parse $_`; + die unless defined $_; + chomp; +} my $modified = () = `git ls-files --modified --deleted --others`; die "This checkout is not clean - $modified modified or untracked file(s)" if $modified; -system "git bisect reset" and die; +my $git_version = `git --version`; +if (defined $git_version + && $git_version =~ /\Agit version (\d+\.\d+\.\d+)(.*)/) { + $git_version = eval "v$1"; +} else { + $git_version = v0.0.0; +} + +if ($git_version ge v1.6.6) { + system "git bisect reset HEAD" and die; +} else { + system "git bisect reset" and die; +} # Sanity check the first and last revisions: +system "git checkout $end" and die; +my $ret = system $^X, $runner, @ARGV; +die "Runner returned $ret for end revision" unless $ret; + if (defined $start) { system "git checkout $start" and die; my $ret = system $^X, $runner, @ARGV; @@ -61,9 +82,6 @@ if (defined $start) { die "Can't find a suitable start revision to default to. Tried @stable" unless defined $start; } -system "git checkout $end" and die; -my $ret = system $^X, $runner, @ARGV; -die "Runner returned $ret for end revision" unless $ret; system "git bisect start" and die; system "git bisect good $start" and die; |