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-----
--- 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)
+
--- 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
--- 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 <<EOF
import BaseHTTPServer, SimpleHTTPServer, signal
@@ -23,10 +20,7 @@
python dumb.py 2>/dev/null &
hg clone http://localhost:20059/foo copy2
-cd copy2
-hg verify
-hg co
-cat foo
-hg manifest
+echo $?
+set +x
kill $!
--- 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