unshare: use context manager for locks
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 17 Jan 2019 09:18:48 -0800
changeset 41391 bc843e251134
parent 41390 91ec3d9a97f2
child 41392 b80af0707066
unshare: use context manager for locks Differential Revision: https://phab.mercurial-scm.org/D5695
mercurial/hg.py
--- a/mercurial/hg.py	Fri Jan 25 21:23:16 2019 -0500
+++ b/mercurial/hg.py	Thu Jan 17 09:18:48 2019 -0800
@@ -282,25 +282,20 @@
     called.
     """
 
-    destlock = None
-    lock = repo.lock()
-    try:
+    with repo.lock():
         # we use locks here because if we race with commit, we
         # can end up with extra data in the cloned revlogs that's
         # not pointed to by changesets, thus causing verify to
         # fail
-
         destlock = copystore(ui, repo, repo.path)
-
-        sharefile = repo.vfs.join('sharedpath')
-        util.rename(sharefile, sharefile + '.old')
+        with destlock or util.nullcontextmanager():
 
-        repo.requirements.discard('shared')
-        repo.requirements.discard('relshared')
-        repo._writerequirements()
-    finally:
-        destlock and destlock.release()
-        lock and lock.release()
+            sharefile = repo.vfs.join('sharedpath')
+            util.rename(sharefile, sharefile + '.old')
+
+            repo.requirements.discard('shared')
+            repo.requirements.discard('relshared')
+            repo._writerequirements()
 
     # Removing share changes some fundamental properties of the repo instance.
     # So we instantiate a new repo object and operate on it rather than