# HG changeset patch # User Martin von Zweigbergk # Date 2019-01-17 17:18:48 # Node ID bc843e25113419ee32168fe5150af7b77fbb4eda # Parent 91ec3d9a97f28a393f3c44b25d104c4555cd8d31 unshare: use context manager for locks Differential Revision: https://phab.mercurial-scm.org/D5695 diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -282,25 +282,20 @@ def unshare(ui, repo): 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