configuration: remove the destination directory if clone fails
2 files changed, 19 insertions(+), 0 deletions(-)

M hgext3rd/confman/configuration.py
M tests/test-git.t
M hgext3rd/confman/configuration.py +2 -0
@@ 2,6 2,7 @@ 
 
 import itertools
 import os
+import shutil
 from collections import defaultdict
 
 from mercurial import error, util

          
@@ 203,6 204,7 @@ class configurationmanager(object):
                 self.failed.add(section)
                 ui.write('%s\n' % err, label='confman.dirty')
                 ui.debug(str(err))
+                shutil.rmtree(dest)
                 continue
 
             # if managed is a sub configuration, we add the rootpath

          
M tests/test-git.t +17 -0
@@ 232,3 232,20 @@ Add a git tag
   $ hg cfs -I foo
   conf
   |- foo (HEAD)  [baseline 'foo-0.2' in a parallel branch] M
+
+Git clone failure
+  $ cd $TESTTMP
+  $ hg init test-git-failure
+  $ cd test-git-failure
+  $ cat > .hgconf <<EOF
+  > [agitrepo]
+  > pulluri = invalid.git
+  > layout = target
+  > track = master
+  > EOF
+  $ hg cfensureconf --no-hggit
+  fatal: repository 'invalid.git' does not exist
+  cloning agitrepo from invalid.git to $TESTTMP/test-git-failure/target
+  Command '['git', 'clone', 'invalid.git', '$TESTTMP/test-git-failure/target']' returned non-zero exit status 128.
+  $ [ -e target ] ; echo $?
+  1