diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -273,7 +273,7 @@ def clone(ui, source, dest = None, **opt if source in paths: source = paths[source] - created = False + created = success = False if dest is None: dest = os.getcwd() @@ -314,12 +314,15 @@ def clone(ui, source, dest = None, **opt if not opts['no-update']: update(ui, repo) - except: - if created: + + success = True + + finally: + if not success: + del repo import shutil shutil.rmtree(dest, True) - raise - + def commit(ui, repo, *files, **opts): """commit the specified files or all outstanding changes""" text = opts['text'] @@ -904,5 +907,6 @@ def dispatch(args): u.debug(inst, "\n") u.warn("%s: invalid arguments\n" % i[0].__name__) help(u, cmd) - sys.exit(-1) + sys.exit(-1) + diff --git a/mercurial/lock.py b/mercurial/lock.py --- a/mercurial/lock.py +++ b/mercurial/lock.py @@ -43,5 +43,7 @@ class lock: def release(self): if self.held: self.held = 0 - os.unlink(self.f) + try: + os.unlink(self.f) + except: pass diff --git a/tests/test-bad-pull b/tests/test-bad-pull --- a/tests/test-bad-pull +++ b/tests/test-bad-pull @@ -1,11 +1,8 @@ -#!/bin/bash +#!/bin/bash -x hg clone http://localhost:20059/ copy -cd copy -hg verify -hg co -cat foo -hg manifest +echo $? +ls copy cat > dumb.py </dev/null & hg clone http://localhost:20059/foo copy2 -cd copy2 -hg verify -hg co -cat foo -hg manifest +echo $? +set +x kill $! diff --git a/tests/test-bad-pull.out b/tests/test-bad-pull.out --- a/tests/test-bad-pull.out +++ b/tests/test-bad-pull.out @@ -1,22 +1,25 @@ ++ hg clone http://localhost:20059/ copy requesting all changes adding changesets abort: error 111: Connection refused transaction abort! +failed to truncate 00changelog.d +failed to truncate 00changelog.i rollback completed -checking changesets -checking manifests -crosschecking files in changesets and manifests -checking files -0 files, 0 changesets, 0 total revisions -cat: foo: No such file or directory ++ echo 255 +255 ++ ls copy +ls: copy: No such file or directory ++ cat ++ python dumb.py ++ hg clone http://localhost:20059/foo copy2 requesting all changes adding changesets abort: HTTP Error 404: File not found transaction abort! +failed to truncate 00changelog.d +failed to truncate 00changelog.i rollback completed -checking changesets -checking manifests -crosschecking files in changesets and manifests -checking files -0 files, 0 changesets, 0 total revisions -cat: foo: No such file or directory ++ echo 255 +255 ++ set +x