Mercurial > hg
changeset 42326:5d4ec64a6fcb
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
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 15 May 2019 22:11:41 -0700 |
parents | 526750cdd02d |
children | e8f3740cc067 |
files | mercurial/exchange.py |
diffstat | 1 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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