hgext/narrow/narrowtemplates.py
changeset 36117 a2a6e724d61a
child 36128 9445a3141501
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/narrow/narrowtemplates.py	Mon Jan 29 16:19:33 2018 -0500
@@ -0,0 +1,50 @@
+# 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 (
+    revset,
+    templatekw,
+    util,
+)
+
+from . import narrowrevlog
+
+def _isellipsis(repo, rev):
+    if repo.changelog.flags(rev) & narrowrevlog.ELLIPSIS_NODE_FLAG:
+        return True
+    return False
+
+def ellipsis(repo, ctx, templ, **args):
+    """:ellipsis: String. 'ellipsis' if the change is an ellipsis node,
+    else ''."""
+    if _isellipsis(repo, ctx.rev()):
+        return 'ellipsis'
+    return ''
+
+def outsidenarrow(repo, ctx, templ, **args):
+    """:outsidenarrow: String. 'outsidenarrow' if the change affects no
+    tracked files, else ''."""
+    if util.safehasattr(repo, 'narrowmatch'):
+        m = repo.narrowmatch()
+        if not any(m(f) for f in ctx.files()):
+            return 'outsidenarrow'
+    return ''
+
+def ellipsisrevset(repo, subset, x):
+    """``ellipsis()``
+    Changesets that are ellipsis nodes.
+    """
+    return subset.filter(lambda r: _isellipsis(repo, r))
+
+def setup():
+    templatekw.keywords['ellipsis'] = ellipsis
+    templatekw.keywords['outsidenarrow'] = outsidenarrow
+
+    revset.symbols['ellipsis'] = ellipsisrevset
+    revset.safesymbols.add('ellipsis')