]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/LeiMirror.pm
clone|--mirror: fix and test against pre-manifest WWW
[public-inbox.git] / lib / PublicInbox / LeiMirror.pm
index 53f7dd31c36c2a0512a26dccb69b7481a3c6df3c..fe81b967fd4ae990c97d1db6769a7515e5e5f53e 100644 (file)
@@ -42,7 +42,8 @@ sub try_scrape {
 
        # we grep with URL below, we don't want Subject/From headers
        # making us clone random URLs
-       my @urls = ($html =~ m!\bgit clone --mirror ([a-z\+]+://\S+)!g);
+       my @html = split(/<hr>/, $html);
+       my @urls = ($html[-1] =~ m!\bgit clone --mirror ([a-z\+]+://\S+)!g);
        my $url = $uri->as_string;
        chop($url) eq '/' or die "BUG: $uri not canonicalized";
 
@@ -184,7 +185,9 @@ sub run_reap {
        my $reap = PublicInbox::OnDestroy->new($lei->can('sigint_reap'), $pid);
        waitpid($pid, 0) == $pid or die "waitpid @$cmd: $!";
        @$reap = (); # cancel reap
-       $?
+       my $ret = $?;
+       $? = 0; # don't let it influence normal exit
+       $ret;
 }
 
 sub clone_v1 {
@@ -358,7 +361,11 @@ sub try_manifest {
                return try_scrape($self) if ($cerr >> 8) == 22; # 404 missing
                return $lei->child_error($cerr, "@$cmd failed");
        }
-       my $m = decode_manifest($ft, $fn, $uri);
+       my $m = eval { decode_manifest($ft, $fn, $uri) };
+       if ($@) {
+               warn $@;
+               return try_scrape($self);
+       }
        my ($path_pfx, $v1_path, @v2_epochs) = deduce_epochs($m, $path);
        if (@v2_epochs) {
                # It may be possible to have v1 + v2 in parallel someday: