]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SolverGit.pm
config: support "inboxdir" in addition to "mainrepo"
[public-inbox.git] / lib / PublicInbox / SolverGit.pm
index 3841c56719932a7c5ea4988b38bed549c3c9200d..8878961e93506c0783fb7aad0fcf656f3850b664 100644 (file)
@@ -13,9 +13,9 @@ use warnings;
 use File::Temp qw();
 use Fcntl qw(SEEK_SET);
 use PublicInbox::Git qw(git_unquote git_quote);
-use PublicInbox::Spawn qw(spawn popen_rd);
 use PublicInbox::MsgIter qw(msg_iter msg_part_text);
 use PublicInbox::Qspawn;
+use PublicInbox::Tmpfile;
 use URI::Escape qw(uri_escape_utf8);
 
 # POSIX requires _POSIX_ARG_MAX >= 4096, and xargs is required to
@@ -206,7 +206,7 @@ sub find_extract_diff ($$$) {
        }
 
        my $msgs = $srch->query($q, { relevance => 1 });
-       my $re = qr/\Aindex ($pre[a-f0-9]*)\.\.($post[a-f0-9]*)(?: (\d+))?/;
+       my $re = qr/\Aindex ($pre[a-f0-9]*)\.\.($post[a-f0-9]*)(?: ([0-9]+))?/;
 
        my $di;
        foreach my $smsg (@$msgs) {
@@ -236,13 +236,13 @@ sub prepare_index ($) {
        my $path_a = $di->{path_a} or die "BUG: path_a missing for $oid_full";
        my $mode_a = $di->{mode_a} || extract_old_mode($di);
 
-       open my $in, '+>', undef or die "open: $!";
+       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: $!";
 
        dbg($self, 'preparing index');
-       my $rdr = { 0 => fileno($in) };
+       my $rdr = { 0 => fileno($in), -hold => $in };
        my $cmd = [ qw(git update-index -z --index-info) ];
        my $qsp = PublicInbox::Qspawn->new($cmd, $self->{git_env}, $rdr);
        $qsp->psgi_qx($self->{psgi_env}, undef, sub {