# HG changeset patch # User Steve Borho # Date 1238552513 18000 # Node ID 39566bb99a9cf21a7890bad83e2dfcdb10f47257 # Parent ec4784bb7d756f0c862f2669ce9a6860544a3ced 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. diff -r ec4784bb7d75 -r 39566bb99a9c mercurial/hg.py --- 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: diff -r ec4784bb7d75 -r 39566bb99a9c tests/test-clone-failure --- 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 diff -r ec4784bb7d75 -r 39566bb99a9c tests/test-clone-failure.out --- 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