on clone failure, only remove directories we created
authorSteve Borho <steve@borho.org>
Tue, 31 Mar 2009 21:21:53 -0500
changeset 7935 39566bb99a9c
parent 7934 ec4784bb7d75
child 7936 0e95d41939c3
on clone failure, only remove directories we created If the user created the clone target directory before running the clone command, only cleanup the .hg/ repository when errors occur. Leave the empty target directory in place.
mercurial/hg.py
tests/test-clone-failure
tests/test-clone-failure.out
--- a/mercurial/hg.py	Thu Apr 02 18:04:42 2009 +0200
+++ b/mercurial/hg.py	Tue Mar 31 21:21:53 2009 -0500
@@ -168,10 +168,14 @@
                 copy = False
 
         if copy:
+            hgdir = os.path.realpath(os.path.join(dest, ".hg"))
             if not os.path.exists(dest):
                 os.mkdir(dest)
+            else:
+                # only clean up directories we create ourselves
+                dir_cleanup.dir_ = hgdir
             try:
-                dest_path = os.path.realpath(os.path.join(dest, ".hg"))
+                dest_path = hgdir
                 os.mkdir(dest_path)
             except OSError, inst:
                 if inst.errno == errno.EEXIST:
--- a/tests/test-clone-failure	Thu Apr 02 18:04:42 2009 +0200
+++ b/tests/test-clone-failure	Tue Mar 31 21:21:53 2009 -0500
@@ -49,4 +49,17 @@
 hg clone q a
 echo $?
 
+# leave existing directory in place after clone failure
+hg init c
+cd c
+echo c > c
+hg commit -A -m test -d '0 0'
+chmod -rx .hg/store/data
+cd ..
+mkdir d
+hg clone c d 2> err
+echo $?
+test -d d && echo "dir is still here" || echo "dir is gone"
+test -d d/.hg && echo "repo is still here" || echo "repo is gone"
+
 true
--- a/tests/test-clone-failure.out	Thu Apr 02 18:04:42 2009 +0200
+++ b/tests/test-clone-failure.out	Tue Mar 31 21:21:53 2009 -0500
@@ -12,3 +12,7 @@
 abort: destination 'q' is not empty
 abort: destination 'a' is not empty
 255
+adding c
+255
+dir is still here
+repo is gone