]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_mirror: fix infinite loop in dependency resolution
authorEric Wong <e@80x24.org>
Mon, 28 Nov 2022 05:31:25 +0000 (05:31 +0000)
committerEric Wong <e@80x24.org>
Mon, 28 Nov 2022 23:38:55 +0000 (23:38 +0000)
We need to account for dependencies which are marked `done'.

lib/PublicInbox/LeiMirror.pm

index ddb1e74794102761beb7f5a9f65757f0123ba550..0f46d35531f890ec9bacba93c7ea6f64d336c27c 100644 (file)
@@ -539,8 +539,9 @@ sub clone_all {
        while (scalar keys %$todo) {
                for my $x (keys %$todo) {
                        # resolve multi-level references
-                       while (defined($m->{$x}->{reference})) {
-                               $x = $m->{$x}->{reference};
+                       while (defined(my $nxt = $m->{$x}->{reference})) {
+                               exists($todo->{$nxt}) or last;
+                               $x = $nxt;
                        }
                        my $y = delete $todo->{$x} // next; # already done
                        for (@$y) {