qw(.topbloke));
}
+sub patch_matches_spec ($$) {
+ my ($parsedname, $spec) = @_;
+ foreach my $k (qw(Email Domain Nick)) {
+ debug("patch_matches_spec mismatch $k"), return 0
+ if defined $spec->{$k} &&
+ $parsedname->{$k} ne $spec->{$k};
+ }
+ debug("patch_matches_spec mismatch DatePrefix"), return 0
+ if defined $spec->{DatePrefix} &&
+ substr($parsedname->{Date}, 0, length $spec->{DatePrefix})
+ ne $spec->{DatePrefix};
+ debug("patch_matches_spec match"), return 1;
+}
+
sub foreach_patch ($$$$) {
my ($spec, $deleted_ok, $want, $body) = @_;
- # runs $body->($fullname, \%flags, \%deps, \%pflags, \%included)
- # $Want->[0] 1 2 3
+ # runs $body->($patch, $parsedname, \%flags, \%deps, \%pflags, \%included)
+ # $want->[0] 1 2 3
# where $deps->{$fullname} etc. are 1 for true or nonexistent for false
# and if $want->[$item] is not true, the corresponding item may be undef
+ # and $parsedname is only valid if $spec is not undef
+ # (say $spec { } if you want the name parsed but no restrictions)
run_git(sub {
debug("foreach_patch considering $_");
m/ / or die "$_ ?";
my $objname = $`;
my @out;
my $patch = substr($',19); #');
- push @out, $patch;
$want->[0] ||= !$deleted_ok;
foreach my $file (qw(flags deps pflags included)) {
# right, check the spec next
if ($spec) {
my $have = parse_patch_name($patch);
- foreach my $k (qw(Email Domain Nick)) {
- debug("foreach_patch mismatch $k"), return
- if defined $spec->{$k} &&
- $have->{$k} ne $spec->{$k};
- }
- debug("foreach_patch mismatch DatePrefix"), return
- if defined $spec->{DatePrefix} &&
- substr($have->{Date}, 0, length $spec->{DatePrefix})
- ne $spec->{DatePrefix};
+ debug("foreach_patch mismatch"), return
+ unless patch_matches_spec($have, $spec);
+ unshift @out, $have;
+ } else {
+ unshift @out, undef;
}
}
push @out, \%data;
}
debug("foreach_patch YES @out"), return
- $body->(@out);
+ $body->($patch, @out);
},
qw(for-each-ref --format), '%(objectname) %(refname)',
qw(refs/topbloke-tips));