about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchIdx.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-12-15 15:22:46 -0500
committerEric Wong <e@80x24.org>2023-12-16 10:06:29 +0000
commit429829bcfdb7b6095fc17d68e914736cc6c64a50 (patch)
tree00cdd1ef2c1d78ed5d93b6990e7a4cbb64169cea /lib/PublicInbox/SearchIdx.pm
parent6df9454202eeadbdd20af8dd9de5bcceb758b324 (diff)
downloadpublic-inbox-429829bcfdb7b6095fc17d68e914736cc6c64a50.tar.gz
CentOS 7.x ships with git 1.8.5, so unless a CentOS 7.x user
enables 3rd-party repos[1], they'll be stuck with a version
of git without `--stable' (though I'm becoming skeptical of
indexing patchids at all).

[1] https://public-inbox.org/meta/20210421151308.yz5hzkgm75klunpe@nitro.local/
Diffstat (limited to 'lib/PublicInbox/SearchIdx.pm')
-rw-r--r--lib/PublicInbox/SearchIdx.pm12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index 1ac8e33e..1cbf6d23 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -44,6 +44,7 @@ my $hex = '[a-f0-9]';
 my $OID = $hex .'{40,}';
 my @VMD_MAP = (kw => 'K', L => 'L'); # value order matters
 our $INDEXLEVELS = qr/\A(?:full|medium|basic)\z/;
+our $PATCHID_BROKEN;
 
 sub new {
         my ($class, $ibx, $creat, $shard) = @_;
@@ -63,6 +64,7 @@ sub new {
                         die("Invalid indexlevel $ibx->{indexlevel}\n");
                 }
         }
+        undef $PATCHID_BROKEN; # retry on new instances in case of upgrades
         $ibx = PublicInbox::InboxWritable->new($ibx);
         my $self = PublicInbox::Search->new($ibx);
         bless $self, $class;
@@ -353,7 +355,8 @@ sub index_diff ($$$) {
 sub index_body_text {
         my ($self, $doc, $sref) = @_;
         my $rd;
-        if ($$sref =~ /^(?:diff|---|\+\+\+) /ms) { # start patch-id in parallel
+        # start patch-id in parallel
+        if ($$sref =~ /^(?:diff|---|\+\+\+) /ms && !$PATCHID_BROKEN) {
                 my $git = ($self->{ibx} // $self->{eidx} // $self)->git;
                 my $fh = PublicInbox::IO::write_file '+>:utf8', undef, $$sref;
                 $fh->flush or die "flush: $!";
@@ -386,7 +389,12 @@ sub index_body_text {
         if (defined $rd) { # reap `git patch-id'
                 (readline($rd) // '') =~ /\A([a-f0-9]{40,})/ and
                         $doc->add_term('XDFID'.$1);
-                $rd->close or warn "W: git patch-id failed: \$?=$? (non-fatal)"
+                if (!$rd->close) {
+                        my $c = 'git patch-id --stable';
+                        $PATCHID_BROKEN = ($? >> 8) == 129;
+                        $PATCHID_BROKEN ? warn("W: $c requires git v2.1.0+\n")
+                                : warn("W: $c failed: \$?=$? (non-fatal)");
+                }
         }
 }