Mercurial > hg
view hgext/narrow/narrowtemplates.py @ 45015:5797dbb630df
locks: expect repo lock, not wlock, when writing to .hg/strip-backup/
There should be no need for a working copy lock when creating (or
reading) bundles in `.hg/strip-backup/` since they don't affect the
working copy.
I noticed this because we have an extension that tries to strip some
revisions while holding only a repo lock. I guess we have no such
cases in core, which seems a bit surprising. Maybe we always take a
wlock at a higher level so the working copy is not updated while the
target commit is being stripped.
Differential Revision: https://phab.mercurial-scm.org/D8666
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 25 Jun 2020 12:02:34 -0700 |
parents | 687b865b95ad |
children | 6000f5b25c9b |
line wrap: on
line source
# narrowtemplates.py - added template keywords for narrow clones # # Copyright 2017 Google, Inc. # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import from mercurial import ( registrar, revlog, ) keywords = {} templatekeyword = registrar.templatekeyword(keywords) revsetpredicate = registrar.revsetpredicate() def _isellipsis(repo, rev): if repo.changelog.flags(rev) & revlog.REVIDX_ELLIPSIS: return True return False @templatekeyword(b'ellipsis', requires={b'repo', b'ctx'}) def ellipsis(context, mapping): """String. 'ellipsis' if the change is an ellipsis node, else ''.""" repo = context.resource(mapping, b'repo') ctx = context.resource(mapping, b'ctx') if _isellipsis(repo, ctx.rev()): return b'ellipsis' return b'' @templatekeyword(b'outsidenarrow', requires={b'repo', b'ctx'}) def outsidenarrow(context, mapping): """String. 'outsidenarrow' if the change affects no tracked files, else ''.""" repo = context.resource(mapping, b'repo') ctx = context.resource(mapping, b'ctx') m = repo.narrowmatch() if ctx.files() and not m.always(): if not any(m(f) for f in ctx.files()): return b'outsidenarrow' return b'' @revsetpredicate(b'ellipsis()') def ellipsisrevset(repo, subset, x): """Changesets that are ellipsis nodes.""" return subset.filter(lambda r: _isellipsis(repo, r))