# HG changeset patch # User mpm@selenic.com # Date 1119953294 28800 # Node ID c6a2e41c8c607da17917e9c15c4799e0c31e027b # Parent 509e62469cb1d3f3e90509570567d552822f61cd Fix troubles with clone and exception handling -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Fix troubles with clone and exception handling Clone deletes its directory on failure This was deleting the lockfile out from under the lock object before it got destroyed This patch shuts lock up and makes the cleanup code for clone a little cleaner. manifest hash: f666fddcf6f3a905020a091f5e9fd2cb5d806cdd -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCwSGOywK+sNU5EO8RAkx2AKCIxPczl9YWnuUM+bMQnpVr8kv6uQCeNWld SUxSB99PGJHhq1LWFaSJJNw= =Frk/ -----END PGP SIGNATURE----- diff -r 509e62469cb1 -r c6a2e41c8c60 mercurial/commands.py --- a/mercurial/commands.py Tue Jun 28 02:04:49 2005 -0800 +++ b/mercurial/commands.py Tue Jun 28 02:08:14 2005 -0800 @@ -273,7 +273,7 @@ if source in paths: source = paths[source] - created = False + created = success = False if dest is None: dest = os.getcwd() @@ -314,12 +314,15 @@ 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 @@ u.debug(inst, "\n") u.warn("%s: invalid arguments\n" % i[0].__name__) help(u, cmd) - sys.exit(-1) + sys.exit(-1) + diff -r 509e62469cb1 -r c6a2e41c8c60 mercurial/lock.py --- a/mercurial/lock.py Tue Jun 28 02:04:49 2005 -0800 +++ b/mercurial/lock.py Tue Jun 28 02:08:14 2005 -0800 @@ -43,5 +43,7 @@ def release(self): if self.held: self.held = 0 - os.unlink(self.f) + try: + os.unlink(self.f) + except: pass diff -r 509e62469cb1 -r c6a2e41c8c60 tests/test-bad-pull --- a/tests/test-bad-pull Tue Jun 28 02:04:49 2005 -0800 +++ b/tests/test-bad-pull Tue Jun 28 02:08:14 2005 -0800 @@ -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 -r 509e62469cb1 -r c6a2e41c8c60 tests/test-bad-pull.out --- a/tests/test-bad-pull.out Tue Jun 28 02:04:49 2005 -0800 +++ b/tests/test-bad-pull.out Tue Jun 28 02:08:14 2005 -0800 @@ -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