]> Sergey Matveev's repositories - public-inbox.git/commitdiff
solvergit: do not solve blobs twice
authorEric Wong <e@80x24.org>
Tue, 29 Jan 2019 04:01:21 +0000 (04:01 +0000)
committerEric Wong <e@80x24.org>
Tue, 29 Jan 2019 21:36:02 +0000 (21:36 +0000)
In some cases, a file may ping-pong between blob IDs in the same
message when reverts occur.  So break out of this early.

This doesn't account for different abbreviations, but the
limited variations of abbreviations should alleviate the
problem.

lib/PublicInbox/SolverGit.pm

index 39acbe414285f3410d727873844734191e635911..24d9da2f42b14ff8a89344321dba2e5daa1c7d00 100644 (file)
@@ -439,6 +439,9 @@ sub resolve_patch ($$) {
 
        # see if we can find the blob in an existing git repo:
        my $cur_want = $want->{oid_b};
+       if ($self->{seen_oid}->{$cur_want}++) {
+               die "Loop detected solving $cur_want\n";
+       }
        if (my $existing = solve_existing($self, $want)) {
                dbg($self, "found $cur_want in " .
                        join("\n", $existing->[0]->pub_urls));
@@ -504,6 +507,7 @@ sub solve ($$$$$) {
 
        $self->{oid_want} = $oid_want;
        $self->{out} = $out;
+       $self->{seen_oid} = {};
        $self->{tot} = 0;
        $self->{psgi_env} = $env;
        $self->{todo} = [ { %$hints, oid_b => $oid_want } ];