- my $cmd = [ @$pfx, clone_cmd($lei, my $opt = {}),
- $uri->as_string, $dst ];
- my $cerr = run_reap($lei, $cmd, $opt);
- return $lei->child_error($cerr, "@$cmd failed") if $cerr;
- _try_config($self);
- write_makefile($dst, 1);
- index_cloned_inbox($self, 1);
+ my $fini = PublicInbox::OnDestroy->new($$, \&v1_done, $self);
+ my $jobs = $self->{lei}->{opt}->{jobs} // 2;
+ my $cmd = [ @$pfx, clone_cmd($lei, my $opt = {}), "$uri", $dst ];
+ $lei->qerr("# @$cmd");
+ $LIVE{spawn($cmd, undef, $opt)} = [ \&reap_clone, $lei, $cmd, $fini ];
+ reap_live() while keys(%LIVE) >= $jobs;
+
+ # wait for `git clone' to mkdir $dst (TODO: inotify/kevent?)
+ select(undef, undef, undef, 0.011) until -d $dst;
+ $LIVE{_try_config_start($self)} = [ \&_try_config_done, $self, $fini ];
+ reap_live() until ($nohang || !keys(%LIVE));