#!/usr/bin/perl
use strict;
+use Getopt::Long;
+
+my($no_cvs, $failures_only, $minor_updates);
+
+&Getopt::Long::Configure('bundling');
+GetOptions(
+ 'no-cvs|n' => \$no_cvs,
+ 'failures-only|f' => \$failures_only,
+ 'minor-updates|u' => \$minor_updates,
+) or &usage;
+
+my $interesting_fuzz = $minor_updates ? '\d' : '[2-9]';
chdir('patches') if -d 'patches';
EOT
close OUT;
-print "Using CVS to update the tmp/cvsdir copy of the source.\n";
-system qq|cvs -d "$root" co -d cvsdir rsync|;
+unless ($no_cvs) {
+ print "Using CVS to update the tmp/cvsdir copy of the source.\n";
+ system qq|cvs -d "$root" co -d cvsdir rsync|;
+}
@ARGV = glob('../*.diff') unless @ARGV;
if ($default =~ s/^D,// || $default eq 'N') {
my $def = generate_new_patch($diff);
$default = 'U,N' if $default eq 'N' && $def eq 'E';
+ $default = 'N' if !$minor_updates && $default eq 'U,N';
}
PROMPT:
push(@rejects, $_);
} elsif (/^Hunk #\d+ FAILED/) {
$saw_failure = 1;
- } elsif (/^Hunk #\d+ succeeded at \d+( with fuzz )?/) {
+ } elsif (/^Hunk #\d+ succeeded at \d+( with fuzz $interesting_fuzz)?/o) {
$saw_fuzz ||= defined $1;
$saw_offset = 1;
}
}
close IN;
return 'F,D,E' if $saw_failure;
- return 'D,E' if $saw_fuzz;
- return 'D,U,N' if $saw_offset;
+ return 'D,E' if $saw_fuzz && !$failures_only;
+ return 'D,U,N' if $saw_offset && !$failures_only;
'N';
}
}
}
}
+
+sub usage
+{
+ die <<EOT;
+Usage: $0 [OPTS] [DIFF-FILE...]
+ -n, --no-cvs Don't update tmp/cvsdir at the start of the run
+ -u, --minor-updates Suggest 'U' for even minor changes in the diff
+EOT
+}