We need to account for dependencies which are marked `done'.
---
 lib/PublicInbox/LeiMirror.pm | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm
index ddb1e747..0f46d355 100644
--- a/lib/PublicInbox/LeiMirror.pm
+++ b/lib/PublicInbox/LeiMirror.pm
@@ -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) {

Reply via email to