Mercurial > hg
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