##// END OF EJS Templates
git: skeleton of a new extension to _directly_ operate on git repos...
git: skeleton of a new extension to _directly_ operate on git repos This is based in part of work I did years ago in hgit, but it's mostly new code since I'm using pygit2 instead of dulwich and the hg storage interfaces have improved. Some cleanup of old hgit code by Pulkit, which I greatly appreciate. test-git-interop.t does not cover a whole lot of cases, but it passes. It includes status, diff, making a new commit, and `hg annotate` working on the git repository. This is _not_ (yet) production quality code: this is an experiment. Known technical debt lurking in this implementation: * Writing bookmarks just totally ignores transactions. * The way progress is threaded down into the gitstore is awful. * Ideally we'd find a way to incrementally reindex DAGs. I'm not sure how to do that efficiently, so we might need a "known only fast-forwards" mode on the DAG indexer for use on `hg commit` and friends. * We don't even _try_ to do anything reasonable for `hg pull` or `hg push`. * Mercurial need an interface for the changelog type. Tests currently require git 2.24 as far as I'm aware: `git status` has some changed output that I didn't try and handle in a compatible way. This patch has produced some interesting cleanups, most recently on the manifest type. I expect continuing down this road will produce other meritorious cleanups throughout our code. Differential Revision: https://phab.mercurial-scm.org/D6734

File last commit:

r43347:687b865b default
r44961:ad718271 default
Show More
narrowtemplates.py
52 lines | 1.5 KiB | text/x-python | PythonLexer
/ hgext / narrow / narrowtemplates.py
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 # 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 (
Augie Fackler
narrowtemplates: update to use registrar mechanism...
r36108 registrar,
Augie Fackler
narrow: move from ELLIPSIS_NODE_FLAG to revlog.REVIDX_ELLIPSIS...
r36107 revlog,
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 )
Augie Fackler
narrowtemplates: update to use registrar mechanism...
r36108 keywords = {}
templatekeyword = registrar.templatekeyword(keywords)
revsetpredicate = registrar.revsetpredicate()
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 def _isellipsis(repo, rev):
Augie Fackler
narrow: move from ELLIPSIS_NODE_FLAG to revlog.REVIDX_ELLIPSIS...
r36107 if repo.changelog.flags(rev) & revlog.REVIDX_ELLIPSIS:
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 return True
return False
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 @templatekeyword(b'ellipsis', requires={b'repo', b'ctx'})
Yuya Nishihara
templatekw: switch non-showlist template keywords to new API
r36531 def ellipsis(context, mapping):
Yuya Nishihara
narrow: drop redundant templatekw/revset names from help text...
r36457 """String. 'ellipsis' if the change is an ellipsis node, else ''."""
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 repo = context.resource(mapping, b'repo')
ctx = context.resource(mapping, b'ctx')
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 if _isellipsis(repo, ctx.rev()):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 return b'ellipsis'
return b''
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 @templatekeyword(b'outsidenarrow', requires={b'repo', b'ctx'})
Yuya Nishihara
templatekw: switch non-showlist template keywords to new API
r36531 def outsidenarrow(context, mapping):
Yuya Nishihara
narrow: drop redundant templatekw/revset names from help text...
r36457 """String. 'outsidenarrow' if the change affects no tracked files,
else ''."""
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 repo = context.resource(mapping, b'repo')
ctx = context.resource(mapping, b'ctx')
Martin von Zweigbergk
narrow: drop safehasattr() checks for always-present repo.narrowmatch...
r36490 m = repo.narrowmatch()
Danny Hooper
narrow: consider empty commits to be "inside the narrow spec" for templates...
r42550 if ctx.files() and not m.always():
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 if not any(m(f) for f in ctx.files()):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 return b'outsidenarrow'
return b''
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 @revsetpredicate(b'ellipsis()')
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 def ellipsisrevset(repo, subset, x):
Yuya Nishihara
narrow: drop redundant templatekw/revset names from help text...
r36457 """Changesets that are ellipsis nodes."""
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 return subset.filter(lambda r: _isellipsis(repo, r))