]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Import.pm
wwwstream: prioritize search in top title bar
[public-inbox.git] / lib / PublicInbox / Import.pm
index e3d65f4aa73b8eb28fa3e9024361c057e2284b9c..bb0811a5b55a8547a4da967742a57a19aa71849c 100644 (file)
@@ -38,6 +38,7 @@ sub gfi_start {
 
        # wait for other processes to be done
        flock($lockfh, LOCK_EX) or die "lock failed: $!\n";
+       local $/ = "\n";
        chomp($self->{tip} = $git->qx(qw(rev-parse --revs-only), $self->{ref}));
 
        my @cmd = ('git', "--git-dir=$git_dir", qw(fast-import
@@ -112,8 +113,11 @@ sub remove {
        defined($n) or die "read final byte of cat-blob failed: $!";
        die "bad read on final byte: <$lf>" if $lf ne "\n";
        my $cur = Email::MIME->new($buf);
-       if ($cur->header('Subject') ne $mime->header('Subject') ||
-                       norm_body($cur) ne norm_body($mime)) {
+       my $cur_s = $cur->header('Subject');
+       $cur_s = '' unless defined $cur_s;
+       my $cur_m = $mime->header('Subject');
+       $cur_m = '' unless defined $cur_m;
+       if ($cur_s ne $cur_m || norm_body($cur) ne norm_body($mime)) {
                return ('MISMATCH', $cur);
        }
 
@@ -137,7 +141,7 @@ sub remove {
 
 # returns undef on duplicate
 sub add {
-       my ($self, $mime) = @_; # mime = Email::MIME
+       my ($self, $mime, $check_cb) = @_; # mime = Email::MIME
 
        my $from = $mime->header('From');
        my ($email) = ($from =~ /([^<\s]+\@[^>\s]+)/g);
@@ -167,6 +171,10 @@ sub add {
 
        # kill potentially confusing/misleading headers
        $mime->header_set($_) for qw(bytes lines content-length status);
+       if ($check_cb) {
+               $mime = $check_cb->($mime) or return;
+       }
+
        $mime = $mime->as_string;
        my $blob = $self->{mark}++;
        print $w "blob\nmark :$blob\ndata ", length($mime), "\n" or wfail;
@@ -226,6 +234,11 @@ sub done {
                waitpid($pid, 0) == $pid or
                        die 'update-server-info did not finish';
                $? == 0 or die "failed to update-server-info: $?\n";
+
+               eval {
+                       require PublicInbox::SearchIdx;
+                       PublicInbox::SearchIdx->new($git_dir, 2)->index_sync;
+               };
        }
 
        my $lockfh = delete $self->{lockfh} or die "BUG: not locked: $!";