# HG changeset patch # User Martin von Zweigbergk # Date 1557983501 25200 # Node ID 5d4ec64a6fcbb249bd67880553eaadf0d7827251 # Parent 526750cdd02d39cc718bc2ab2b89f909d007be4b exchange: don't take wlock if bookmarks are stored in .hg/store/ If bookmarks are stored in .hg/store/, there is no need for the wlock(). Differential Revision: https://phab.mercurial-scm.org/D6388 diff -r 526750cdd02d -r 5d4ec64a6fcb mercurial/exchange.py --- a/mercurial/exchange.py Wed May 15 22:09:02 2019 -0700 +++ b/mercurial/exchange.py Wed May 15 22:11:41 2019 -0700 @@ -539,10 +539,12 @@ # get lock as we might write phase data wlock = lock = None try: - # bundle2 push may receive a reply bundle touching bookmarks or other - # things requiring the wlock. Take it now to ensure proper ordering. + # bundle2 push may receive a reply bundle touching bookmarks + # requiring the wlock. Take it now to ensure proper ordering. maypushback = pushop.ui.configbool('experimental', 'bundle2.pushback') - if (not _forcebundle1(pushop)) and maypushback: + if ((not _forcebundle1(pushop)) and + maypushback and + not bookmod.bookmarksinstore(repo)): wlock = pushop.repo.wlock() lock = pushop.repo.lock() pushop.trmanager = transactionmanager(pushop.repo, @@ -1548,7 +1550,10 @@ raise error.Abort(msg) pullop.trmanager = transactionmanager(repo, 'pull', remote.url()) - with repo.wlock(), repo.lock(), pullop.trmanager: + wlock = util.nullcontextmanager() + if not bookmod.bookmarksinstore(repo): + wlock = repo.wlock() + with wlock, repo.lock(), pullop.trmanager: # Use the modern wire protocol, if available. if remote.capable('command-changesetdata'): exchangev2.pull(pullop) @@ -2395,7 +2400,8 @@ try: def gettransaction(): if not lockandtr[2]: - lockandtr[0] = repo.wlock() + if not bookmod.bookmarksinstore(repo): + lockandtr[0] = repo.wlock() lockandtr[1] = repo.lock() lockandtr[2] = repo.transaction(source) lockandtr[2].hookargs['source'] = source