changeset 503:c6a2e41c8c60

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-----
author mpm@selenic.com
date Tue, 28 Jun 2005 02:08:14 -0800
parents 509e62469cb1
children a350c1cd3fc5
files mercurial/commands.py mercurial/lock.py tests/test-bad-pull tests/test-bad-pull.out
diffstat 4 files changed, 33 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- 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