changeset 7935:39566bb99a9c

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.
author Steve Borho <steve@borho.org>
date Tue, 31 Mar 2009 21:21:53 -0500
parents ec4784bb7d75
children 0e95d41939c3
files mercurial/hg.py tests/test-clone-failure tests/test-clone-failure.out
diffstat 3 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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