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.
--- 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