clonebundle: use context managers for lock and transaction
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 15 Jun 2017 17:00:32 -0700
changeset 32861 a470bbb4e3af
parent 32860 97a4d09f5140
child 32862 76bb53f8d374
clonebundle: use context managers for lock and transaction
mercurial/exchange.py
--- a/mercurial/exchange.py	Tue Apr 11 21:38:24 2017 +0900
+++ b/mercurial/exchange.py	Thu Jun 15 17:00:32 2017 -0700
@@ -1989,29 +1989,21 @@
 
 def trypullbundlefromurl(ui, repo, url):
     """Attempt to apply a bundle from a URL."""
-    lock = repo.lock()
-    try:
-        tr = repo.transaction('bundleurl')
+    with repo.lock(), repo.transaction('bundleurl') as tr:
         try:
-            try:
-                fh = urlmod.open(ui, url)
-                cg = readbundle(ui, fh, 'stream')
+            fh = urlmod.open(ui, url)
+            cg = readbundle(ui, fh, 'stream')
 
-                if isinstance(cg, bundle2.unbundle20):
-                    bundle2.processbundle(repo, cg, lambda: tr)
-                elif isinstance(cg, streamclone.streamcloneapplier):
-                    cg.apply(repo)
-                else:
-                    cg.apply(repo, 'clonebundles', url)
-                tr.close()
-                return True
-            except urlerr.httperror as e:
-                ui.warn(_('HTTP error fetching bundle: %s\n') % str(e))
-            except urlerr.urlerror as e:
-                ui.warn(_('error fetching bundle: %s\n') % e.reason)
+            if isinstance(cg, bundle2.unbundle20):
+                bundle2.processbundle(repo, cg, lambda: tr)
+            elif isinstance(cg, streamclone.streamcloneapplier):
+                cg.apply(repo)
+            else:
+                cg.apply(repo, 'clonebundles', url)
+            return True
+        except urlerr.httperror as e:
+            ui.warn(_('HTTP error fetching bundle: %s\n') % str(e))
+        except urlerr.urlerror as e:
+            ui.warn(_('error fetching bundle: %s\n') % e.reason)
 
-            return False
-        finally:
-            tr.release()
-    finally:
-        lock.release()
+        return False