From: Eric Wong Date: Tue, 29 Jan 2019 04:01:21 +0000 (+0000) Subject: solvergit: do not solve blobs twice X-Git-Tag: v1.2.0~397^2~6 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=eb522a29e437eda6de0d50c739d73f9e9ec4adbc;hp=a6f2d5b61e37a49d8278b250d172b497a88c2b45;p=public-inbox.git solvergit: do not solve blobs twice 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. --- diff --git a/lib/PublicInbox/SolverGit.pm b/lib/PublicInbox/SolverGit.pm index 39acbe41..24d9da2f 100644 --- a/lib/PublicInbox/SolverGit.pm +++ b/lib/PublicInbox/SolverGit.pm @@ -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 } ];