# local filesystem layouts in the process.
package PublicInbox::SolverGit;
use strict;
-use warnings;
-use 5.010_001;
+use v5.10.1;
use File::Temp 0.19 (); # 0.19 for ->newdir
use Fcntl qw(SEEK_SET);
use PublicInbox::Git qw(git_unquote git_quote);
-use PublicInbox::MsgIter qw(msg_iter msg_part_text);
+use PublicInbox::MsgIter qw(msg_part_text);
use PublicInbox::Qspawn;
use PublicInbox::Tmpfile;
use URI::Escape qw(uri_escape_utf8);
# hdr_lines => string of various header lines for mode information
# mode_a => original mode of oid_a (string, not integer),
# ibx => PublicInbox::Inbox object containing the diff
-# smsg => PublicInbox::SearchMsg object containing diff
+# smsg => PublicInbox::Smsg object containing diff
# path_a => pre-image path
# path_b => post-image path
# n => numeric path of the patch (relative to worktree)
}
}
- my $msgs = $srch->query($q, { relevance => 1 });
-
+ my $mset = $srch->mset($q, { relevance => 1 });
my $diffs = [];
- foreach my $smsg (@$msgs) {
- $ibx->smsg_mime($smsg) or next;
- msg_iter(delete $smsg->{mime}, \&extract_diff,
+ for my $smsg (@{$srch->mset_to_smsg($ibx, $mset)}) {
+ my $eml = $ibx->smsg_eml($smsg) or next;
+ $eml->each_part(\&extract_diff,
[$self, $diffs, $pre, $post, $ibx, $smsg], 1);
}
@$diffs ? $diffs : undef;
my $in = tmpfile("update-index.$oid_full") or die "tmpfile: $!";
print $in "$mode_a $oid_full\t$path_a\0" or die "print: $!";
$in->flush or die "flush: $!";
- sysseek($in, 0, 0) or die "seek: $!";
+ sysseek($in, 0, SEEK_SET) or die "seek: $!";
dbg($self, 'preparing index');
my $rdr = { 0 => $in };
}
# recreate $oid_want using $hints
-# hints keys: path_a, path_b, oid_a
+# hints keys: path_a, path_b, oid_a (note: `oid_b' is NOT a hint)
# Calls {user_cb} with: [ ::Git object, oid_full, type, size, di (diff_info) ]
# with found object, or undef if nothing was found
# Calls {user_cb} with a string error on fatal errors