- my @xnq;
- my $xnq = \@xnq;
- foreach (split(/\n/, $txt)) {
- if ($in_diff && s/^ //) { # diff context
+ my $xnq = [];
+ my @l = split(/\n/, $$txt);
+ undef $$txt;
+ while (defined($_ = shift @l)) {
+ if ($in_diff && /^GIT binary patch/) {
+ push @$xnq, $_;
+ while (@l && $l[0] =~ /^literal /) {
+ # TODO allow searching by size range?
+ # allows searching by exact size via:
+ # "literal $SIZE"
+ push @$xnq, shift(@l);
+
+ # skip base85 and empty lines
+ while (@l && ($l[0] =~ /$BASE85/o ||
+ $l[0] !~ /\S/)) {
+ shift @l;
+ }
+ # loop hits trailing "literal 0\nHcmV?d00001\n"
+ }
+ } elsif ($in_diff && s/^ //) { # diff context