summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-08 21:11:52 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2017-07-08 21:11:53 +0100
commit37679efe82686b5fb1ba4d198c6df41a9e1fa52d (patch)
tree36341a3fdca2fea0ec437e4876b296668243d621 /dgit
parent9dbb304f9a8405bd7b93e26c6603fd9883bd598e (diff)
dgit: clone multisuite works even without --no-rm-on-error.
This is slightly subtle. We need $rmonerror in cmd_clone to be cleared. cmd_clone does that only when clone itself returns. The multisuite plumbing means that currently, clone returns only in the child which set up the tree and set up the first suite. Unsetting $rmonerror there is correct because we want to keep the tree on success, and the parent will remove it if there is a later failure. (Ie, the child remains responsible for removing the tree if it itself fails.) In the parent, we get $multi_fetched==1 if not only our original clone child succeeded, but all the other fetches worked too. We are now responsible for the tree. If our final tasks are successful, again, we need not to delete the tree. Closes:#867434. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit5
1 files changed, 4 insertions, 1 deletions
diff --git a/dgit b/dgit
index be277f3..40b8e32 100755
--- a/dgit
+++ b/dgit
@@ -3612,6 +3612,9 @@ END
}
sub clone ($) {
+ # in multisuite, returns twice!
+ # once in parent after first suite fetched,
+ # and then again in child after everything is finished
my ($dstdir) = @_;
badusage "dry run makes no sense with clone" unless act_local();
@@ -3623,7 +3626,7 @@ sub clone ($) {
printdebug "multi clone after fetch merge\n";
clone_set_head();
clone_finish($dstdir);
- exit 0;
+ return;
}
printdebug "clone main body\n";