mercurial/templatekw.py
author Yuya Nishihara <yuya@tcha.org>
Sun, 29 Jul 2018 21:39:12 +0900
changeset 39597 164827563426
parent 39587 918944f53aac
child 39598 42209f55c599
permissions -rw-r--r--
templatekw: extract function that computes and caches file status
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     1
# templatekw.py - common changeset template keywords
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     2
#
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     3
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     4
#
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
10264
d6512b3e9ac0 Merge with stable
Matt Mackall <mpm@selenic.com>
parents: 10260
diff changeset
     6
# GNU General Public License version 2 or any later version.
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
     7
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
     8
from __future__ import absolute_import
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
     9
31807
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
    10
from .i18n import _
32658
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
    11
from .node import (
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
    12
    hex,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
    13
    nullid,
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
    14
)
55ff67ffcead scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
Yuya Nishihara <yuya@tcha.org>
parents: 32656
diff changeset
    15
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    16
from . import (
38588
1c93e0237a24 diffutil: move the module out of utils package
Yuya Nishihara <yuya@tcha.org>
parents: 38587
diff changeset
    17
    diffutil,
28239
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
    18
    encoding,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    19
    error,
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    20
    hbisect,
35212
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
    21
    i18n,
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
    22
    obsutil,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    23
    patch,
32972
26e710f0468f py3: convert keys of kwargs in template keywords functions to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
    24
    pycompat,
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
    25
    registrar,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    26
    scmutil,
36921
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    27
    templateutil,
25984
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    28
    util,
c57509e88922 templatekw: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25740
diff changeset
    29
)
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37074
diff changeset
    30
from .utils import (
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37074
diff changeset
    31
    stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37074
diff changeset
    32
)
10053
5c5c6295533d cmdutil: replace showlist() closure with a function
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
    33
36921
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    34
_hybrid = templateutil.hybrid
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    35
hybriddict = templateutil.hybriddict
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    36
hybridlist = templateutil.hybridlist
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    37
compatdict = templateutil.compatdict
32f9b7e3f056 templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents: 36634
diff changeset
    38
compatlist = templateutil.compatlist
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
    39
_showcompatlist = templateutil._showcompatlist
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
    40
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
    41
def getlatesttags(context, mapping, pattern=None):
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    42
    '''return date, distance and name for the latest tag of rev'''
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
    43
    repo = context.resource(mapping, 'repo')
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
    44
    ctx = context.resource(mapping, 'ctx')
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
    45
    cache = context.resource(mapping, 'cache')
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    46
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    47
    cachename = 'latesttags'
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    48
    if pattern is not None:
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    49
        cachename += '-' + pattern
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37074
diff changeset
    50
        match = stringutil.stringmatcher(pattern)[2]
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    51
    else:
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    52
        match = util.always
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    53
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    54
    if cachename not in cache:
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    55
        # Cache mapping from rev to a tuple with tag date, tag
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    56
        # distance and tag name
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    57
        cache[cachename] = {-1: (0, 0, ['null'])}
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    58
    latesttags = cache[cachename]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    59
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    60
    rev = ctx.rev()
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    61
    todo = [rev]
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    62
    while todo:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    63
        rev = todo.pop()
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    64
        if rev in latesttags:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    65
            continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    66
        ctx = repo[rev]
20218
0c22257388d6 templatekw: allow tagtypes other than global in getlatesttags
Andrew Shadura <andrew@shadura.me>
parents: 20183
diff changeset
    67
        tags = [t for t in ctx.tags()
26482
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    68
                if (repo.tagtype(t) and repo.tagtype(t) != 'local'
d2e69584e330 templatekw: allow getlatesttags() to match a specific tag pattern
Matt Harbison <matt_harbison@yahoo.com>
parents: 26437
diff changeset
    69
                    and match(t))]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    70
        if tags:
25700
0fca47b206f6 templatekw: use a list of tags in getlatesttags() instead of joining them
Matt Harbison <matt_harbison@yahoo.com>
parents: 25663
diff changeset
    71
            latesttags[rev] = ctx.date()[0], 0, [t for t in sorted(tags)]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    72
            continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    73
        try:
33862
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    74
            ptags = [latesttags[p.rev()] for p in ctx.parents()]
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    75
            if len(ptags) > 1:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    76
                if ptags[0][2] == ptags[1][2]:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    77
                    # The tuples are laid out so the right one can be found by
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    78
                    # comparison in this case.
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    79
                    pdate, pdist, ptag = max(ptags)
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    80
                else:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    81
                    def key(x):
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    82
                        changessincetag = len(repo.revs('only(%d, %s)',
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    83
                                                        ctx.rev(), x[2][0]))
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    84
                        # Smallest number of changes since tag wins. Date is
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    85
                        # used as tiebreaker.
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    86
                        return [-changessincetag, x[0]]
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    87
                    pdate, pdist, ptag = max(ptags, key=key)
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    88
            else:
fb672eac2702 templatekw: choose {latesttag} by len(changes), not date (issue5659)
Martin von Zweigbergk <martinvonz@google.com>
parents: 33476
diff changeset
    89
                pdate, pdist, ptag = ptags[0]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    90
        except KeyError:
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    91
            # Cache miss - recurse
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    92
            todo.append(rev)
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    93
            todo.extend(p.rev() for p in ctx.parents())
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    94
            continue
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    95
        latesttags[rev] = pdate, pdist + 1, ptag
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    96
    return latesttags[rev]
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
    97
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
    98
def getrenamedfn(repo, endrev=None):
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
    99
    rcache = {}
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   100
    if endrev is None:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   101
        endrev = len(repo)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   102
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   103
    def getrenamed(fn, rev):
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   104
        '''looks up all renames for a file (up to endrev) the first
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   105
        time the file is given. It indexes on the changerev and only
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   106
        parses the manifest if linkrev != changerev.
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   107
        Returns rename info for fn at changerev rev.'''
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   108
        if fn not in rcache:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   109
            rcache[fn] = {}
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   110
            fl = repo.file(fn)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   111
            for i in fl:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   112
                lr = fl.linkrev(i)
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   113
                renamed = fl.renamed(fl.node(i))
38167
ec37df9042f9 templatekw: make getrenamed() return only filename, not nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37963
diff changeset
   114
                rcache[fn][lr] = renamed and renamed[0]
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   115
                if lr >= endrev:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   116
                    break
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   117
        if rev in rcache[fn]:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   118
            return rcache[fn][rev]
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   119
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   120
        # If linkrev != rev (i.e. rev not found in rcache) fallback to
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   121
        # filectx logic.
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   122
        try:
38167
ec37df9042f9 templatekw: make getrenamed() return only filename, not nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37963
diff changeset
   123
            renamed = repo[rev][fn].renamed()
ec37df9042f9 templatekw: make getrenamed() return only filename, not nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37963
diff changeset
   124
            return renamed and renamed[0]
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   125
        except error.LookupError:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   126
            return None
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   127
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   128
    return getrenamed
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   129
35212
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   130
def getlogcolumns():
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   131
    """Return a dict of log column labels"""
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   132
    _ = pycompat.identity  # temporarily disable gettext
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   133
    # i18n: column positioning for "hg log"
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   134
    columns = _('bookmark:    %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   135
                'branch:      %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   136
                'changeset:   %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   137
                'copies:      %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   138
                'date:        %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   139
                'extra:       %s=%s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   140
                'files+:      %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   141
                'files-:      %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   142
                'files:       %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   143
                'instability: %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   144
                'manifest:    %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   145
                'obsolete:    %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   146
                'parent:      %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   147
                'phase:       %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   148
                'summary:     %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   149
                'tag:         %s\n'
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   150
                'user:        %s\n')
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   151
    return dict(zip([s.split(':', 1)[0] for s in columns.splitlines()],
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   152
                    i18n._(columns).splitlines(True)))
c7b45db8f317 log: translate column labels at once (issue5750)
Yuya Nishihara <yuya@tcha.org>
parents: 35143
diff changeset
   153
31171
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   154
# default templates internally used for rendering of lists
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   155
defaulttempl = {
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   156
    'parent': '{rev}:{node|formatnode} ',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   157
    'manifest': '{rev}:{node|formatnode}',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   158
    'file_copy': '{name} ({source})',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   159
    'envvar': '{key}={value}',
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   160
    'extra': '{key}={value|stringescape}'
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   161
}
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   162
# filecopy is preserved for compatibility reasons
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   163
defaulttempl['filecopy'] = defaulttempl['file_copy']
1ec89cf0ea49 templatekw: move defaulttmpl constant from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 30833
diff changeset
   164
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 36442
diff changeset
   165
# keywords are callables (see registrar.templatekeyword for details)
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   166
keywords = {}
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   167
templatekeyword = registrar.templatekeyword(keywords)
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   168
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 36442
diff changeset
   169
@templatekeyword('author', requires={'ctx'})
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 36442
diff changeset
   170
def showauthor(context, mapping):
38948
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   171
    """Alias for ``{user}``"""
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   172
    return showuser(context, mapping)
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   173
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   174
@templatekeyword('bisect', requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   175
def showbisect(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   176
    """String. The changeset bisection status."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   177
    repo = context.resource(mapping, 'repo')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   178
    ctx = context.resource(mapping, 'ctx')
15155
f4a8d754cd0a templates: add 'bisect' keyword to return a cset's bisect status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14437
diff changeset
   179
    return hbisect.label(repo, ctx.node())
f4a8d754cd0a templates: add 'bisect' keyword to return a cset's bisect status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents: 14437
diff changeset
   180
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   181
@templatekeyword('branch', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   182
def showbranch(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   183
    """String. The name of the branch on which the changeset was
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   184
    committed.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   185
    """
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   186
    ctx = context.resource(mapping, 'ctx')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   187
    return ctx.branch()
13156
d79fdff55627 template: add showbranch template for {branch}
Eric Eisner <ede@mit.edu>
parents: 13114
diff changeset
   188
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   189
@templatekeyword('branches', requires={'ctx'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   190
def showbranches(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   191
    """List of strings. The name of the branch on which the
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   192
    changeset was committed. Will be empty if the branch name was
26437
4628b26f040e templatekw: hide help of "branches" by DEPRECATED marker
Yuya Nishihara <yuya@tcha.org>
parents: 26436
diff changeset
   193
    default. (DEPRECATED)
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   194
    """
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   195
    ctx = context.resource(mapping, 'ctx')
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   196
    branch = ctx.branch()
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   197
    if branch != 'default':
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   198
        return compatlist(context, mapping, 'branch', [branch],
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   199
                          plural='branches')
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   200
    return compatlist(context, mapping, 'branch', [], plural='branches')
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   201
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   202
@templatekeyword('bookmarks', requires={'repo', 'ctx'})
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   203
def showbookmarks(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   204
    """List of strings. Any bookmarks associated with the
25348
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
   205
    changeset. Also sets 'active', the name of the active bookmark.
13592
ad2ee188f4a5 templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents: 13585
diff changeset
   206
    """
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   207
    repo = context.resource(mapping, 'repo')
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   208
    ctx = context.resource(mapping, 'ctx')
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   209
    bookmarks = ctx.bookmarks()
25348
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
   210
    active = repo._activebookmark
f26efa4f0eff templatekw: introduce active subkeyword from bookmarks keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25013
diff changeset
   211
    makemap = lambda v: {'bookmark': v, 'active': active, 'current': active}
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   212
    f = _showcompatlist(context, mapping, 'bookmark', bookmarks)
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   213
    return _hybrid(f, bookmarks, makemap, pycompat.identity)
13386
f78bc5ddbe4f templater: add bookmarks to templates and default output
David Soria Parra <dsp@php.net>
parents: 13156
diff changeset
   214
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   215
@templatekeyword('children', requires={'ctx'})
36521
c3692364b344 templatekw: add compatlist() as a replacement for showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 36520
diff changeset
   216
def showchildren(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   217
    """List of strings. The children of the changeset."""
36521
c3692364b344 templatekw: add compatlist() as a replacement for showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 36520
diff changeset
   218
    ctx = context.resource(mapping, 'ctx')
36401
d65642840c6f templatekw: use ctx.rev() instead of casting context to int
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36247
diff changeset
   219
    childrevs = ['%d:%s' % (cctx.rev(), cctx) for cctx in ctx.children()]
36521
c3692364b344 templatekw: add compatlist() as a replacement for showlist()
Yuya Nishihara <yuya@tcha.org>
parents: 36520
diff changeset
   220
    return compatlist(context, mapping, 'children', childrevs, element='child')
11655
6faf015e0ba0 templates: 'children' keyword
Jason Harris <jason@jasonfharris.com>
parents: 10394
diff changeset
   221
25013
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
   222
# Deprecated, but kept alive for help generation a purpose.
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   223
@templatekeyword('currentbookmark', requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   224
def showcurrentbookmark(context, mapping):
34656
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   225
    """String. The active bookmark, if it is associated with the changeset.
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   226
    (DEPRECATED)"""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   227
    return showactivebookmark(context, mapping)
25013
277aba2c151a templatekw: introduce activebookmark keyword
Ryan McElroy <rmcelroy@fb.com>
parents: 25012
diff changeset
   228
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   229
@templatekeyword('activebookmark', requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   230
def showactivebookmark(context, mapping):
34656
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   231
    """String. The active bookmark, if it is associated with the changeset."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   232
    repo = context.resource(mapping, 'repo')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   233
    ctx = context.resource(mapping, 'ctx')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   234
    active = repo._activebookmark
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   235
    if active and active in ctx.bookmarks():
25387
390a10b7843b templatekw: display active bookmark more consistently (issue4552) (BC)
Ryan McElroy <rmcelroy@fb.com>
parents: 25348
diff changeset
   236
        return active
21896
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
   237
    return ''
2b41ee1b5ea1 templatekw: add 'currentbookmark' keyword to show current bookmark easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20683
diff changeset
   238
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   239
@templatekeyword('date', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   240
def showdate(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   241
    """Date information. The date when the changeset was committed."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   242
    ctx = context.resource(mapping, 'ctx')
38299
88e7105b5cd9 templater: restore the original string format of {date}
Yuya Nishihara <yuya@tcha.org>
parents: 38285
diff changeset
   243
    # the default string format is '<float(unixtime)><tzoffset>' because
88e7105b5cd9 templater: restore the original string format of {date}
Yuya Nishihara <yuya@tcha.org>
parents: 38285
diff changeset
   244
    # python-hglib splits date at decimal separator.
88e7105b5cd9 templater: restore the original string format of {date}
Yuya Nishihara <yuya@tcha.org>
parents: 38285
diff changeset
   245
    return templateutil.date(ctx.date(), showfmt='%d.0%d')
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   246
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   247
@templatekeyword('desc', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   248
def showdescription(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   249
    """String. The text of the changeset description."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   250
    ctx = context.resource(mapping, 'ctx')
28239
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   251
    s = ctx.description()
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   252
    if isinstance(s, encoding.localstr):
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   253
        # try hard to preserve utf-8 bytes
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   254
        return encoding.tolocal(encoding.fromlocal(s).strip())
37947
3ea3c96ada54 encoding: introduce tagging type for non-lossy non-ASCII string
Yuya Nishihara <yuya@tcha.org>
parents: 37908
diff changeset
   255
    elif isinstance(s, encoding.safelocalstr):
3ea3c96ada54 encoding: introduce tagging type for non-lossy non-ASCII string
Yuya Nishihara <yuya@tcha.org>
parents: 37908
diff changeset
   256
        return encoding.safelocalstr(s.strip())
28239
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   257
    else:
7279e0132347 templatekw: workaround for utf-8 round-trip of {desc}
Yuya Nishihara <yuya@tcha.org>
parents: 28178
diff changeset
   258
        return s.strip()
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   259
38583
4bc96c755c17 templatekw: obtain ui directly from the template context
Yuya Nishihara <yuya@tcha.org>
parents: 38564
diff changeset
   260
@templatekeyword('diffstat', requires={'ui', 'ctx'})
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   261
def showdiffstat(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   262
    """String. Statistics of changes with the following format:
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   263
    "modified files: +added/-removed lines"
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   264
    """
38583
4bc96c755c17 templatekw: obtain ui directly from the template context
Yuya Nishihara <yuya@tcha.org>
parents: 38564
diff changeset
   265
    ui = context.resource(mapping, 'ui')
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   266
    ctx = context.resource(mapping, 'ctx')
38587
b62000a28812 diffutil: remove diffopts() in favor of diffallopts()
Yuya Nishihara <yuya@tcha.org>
parents: 38583
diff changeset
   267
    diffopts = diffutil.diffallopts(ui, {'noprefix': False})
38564
64f15e22f4f8 template: directly instantiate diff options for diffstat
Boris Feld <boris.feld@octobus.net>
parents: 38555
diff changeset
   268
    diff = ctx.diff(opts=diffopts)
38519
4455e5d4d59c context: explicitly take diffopts in `context.diff` (API)
Boris Feld <boris.feld@octobus.net>
parents: 38306
diff changeset
   269
    stats = patch.diffstatdata(util.iterlines(diff))
14437
cbe13e6bdc34 patch: restore the previous output of 'diff --stat'
Steven Brown <StevenGBrown@gmail.com>
parents: 14403
diff changeset
   270
    maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats)
36499
77f681f11003 py3: use '%d' to format diffstat sum
Yuya Nishihara <yuya@tcha.org>
parents: 36456
diff changeset
   271
    return '%d: +%d/-%d' % (len(stats), adds, removes)
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
   272
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   273
@templatekeyword('envvars', requires={'ui'})
36520
a7fbe11a5d59 templatekw: add compatdict() as a replacement for showdict()
Yuya Nishihara <yuya@tcha.org>
parents: 36519
diff changeset
   274
def showenvvars(context, mapping):
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
   275
    """A dictionary of environment variables. (EXPERIMENTAL)"""
36520
a7fbe11a5d59 templatekw: add compatdict() as a replacement for showdict()
Yuya Nishihara <yuya@tcha.org>
parents: 36519
diff changeset
   276
    ui = context.resource(mapping, 'ui')
36442
e46b24582fa0 templatekw: minimize resource dependency of {envvars} and {termwidth}
Yuya Nishihara <yuya@tcha.org>
parents: 36441
diff changeset
   277
    env = ui.exportableenviron()
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
   278
    env = util.sortdict((k, env[k]) for k in sorted(env))
36520
a7fbe11a5d59 templatekw: add compatdict() as a replacement for showdict()
Yuya Nishihara <yuya@tcha.org>
parents: 36519
diff changeset
   279
    return compatdict(context, mapping, 'envvar', env, plural='envvars')
30833
bd5e9647f646 templater: add '{envvars}' to access environment variables
Matt Harbison <matt_harbison@yahoo.com>
parents: 30811
diff changeset
   280
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   281
@templatekeyword('extras', requires={'ctx'})
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   282
def showextras(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   283
    """List of dicts with key, value entries of the 'extras'
20015
ad27cdacc743 help: document about {extras} template keyword
Matthew Turk <matthewturk@gmail.com>
parents: 18970
diff changeset
   284
    field of this changeset."""
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   285
    ctx = context.resource(mapping, 'ctx')
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   286
    extras = ctx.extra()
24237
9ad02823dc5b templatekw: convert list of key/value pairs to sortdict
Yuya Nishihara <yuya@tcha.org>
parents: 24157
diff changeset
   287
    extras = util.sortdict((k, extras[k]) for k in sorted(extras))
24238
49cee6d8573d templatekw: give name to lambda that constructs variables map of templater
Yuya Nishihara <yuya@tcha.org>
parents: 24237
diff changeset
   288
    makemap = lambda k: {'key': k, 'value': extras[k]}
49cee6d8573d templatekw: give name to lambda that constructs variables map of templater
Yuya Nishihara <yuya@tcha.org>
parents: 24237
diff changeset
   289
    c = [makemap(k) for k in extras]
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   290
    f = _showcompatlist(context, mapping, 'extra', c, plural='extras')
24239
31f9b1b16d1e templatekw: keep raw list or dict in _hybrid object
Yuya Nishihara <yuya@tcha.org>
parents: 24238
diff changeset
   291
    return _hybrid(f, extras, makemap,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37074
diff changeset
   292
                   lambda k: '%s=%s' % (k, stringutil.escapestr(extras[k])))
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   293
39597
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   294
def _getfilestatus(context, mapping):
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   295
    ctx = context.resource(mapping, 'ctx')
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   296
    revcache = context.resource(mapping, 'revcache')
36516
9e3c37c367af templatekw: inline getfiles()
Yuya Nishihara <yuya@tcha.org>
parents: 36515
diff changeset
   297
    if 'files' not in revcache:
38774
87a581d1391c templatekw: use ctx1.status(ctx2) instead of repo.status(ctx1, ctx2)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38588
diff changeset
   298
        revcache['files'] = ctx.p1().status(ctx)[:3]
39597
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   299
    return revcache['files']
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   300
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   301
def _showfilesbystat(context, mapping, name, index):
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   302
    stat = _getfilestatus(context, mapping)
164827563426 templatekw: extract function that computes and caches file status
Yuya Nishihara <yuya@tcha.org>
parents: 39587
diff changeset
   303
    files = stat[index]
39367
83f8f7b9fa60 templatekw: alias {file} of files list to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 38948
diff changeset
   304
    return templateutil.compatfileslist(context, mapping, name, files)
36515
e71a3c0a90b0 templatekw: factor out function to build a list of files per status
Yuya Nishihara <yuya@tcha.org>
parents: 36514
diff changeset
   305
38774
87a581d1391c templatekw: use ctx1.status(ctx2) instead of repo.status(ctx1, ctx2)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38588
diff changeset
   306
@templatekeyword('file_adds', requires={'ctx', 'revcache'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   307
def showfileadds(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   308
    """List of strings. Files added by this changeset."""
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   309
    return _showfilesbystat(context, mapping, 'file_add', 1)
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
   310
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   311
@templatekeyword('file_copies',
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   312
                 requires={'repo', 'ctx', 'cache', 'revcache'})
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   313
def showfilecopies(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   314
    """List of strings. Files copied in this changeset with
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   315
    their sources.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   316
    """
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   317
    repo = context.resource(mapping, 'repo')
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   318
    ctx = context.resource(mapping, 'ctx')
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   319
    cache = context.resource(mapping, 'cache')
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   320
    copies = context.resource(mapping, 'revcache').get('copies')
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   321
    if copies is None:
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   322
        if 'getrenamed' not in cache:
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   323
            cache['getrenamed'] = getrenamedfn(repo)
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   324
        copies = []
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   325
        getrenamed = cache['getrenamed']
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   326
        for fn in ctx.files():
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   327
            rename = getrenamed(fn, ctx.rev())
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   328
            if rename:
38167
ec37df9042f9 templatekw: make getrenamed() return only filename, not nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents: 37963
diff changeset
   329
                copies.append((fn, rename))
39368
5b1d406b39f1 templatekw: alias {name} of file copies dict to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 39367
diff changeset
   330
    return templateutil.compatfilecopiesdict(context, mapping, 'file_copy',
5b1d406b39f1 templatekw: alias {name} of file copies dict to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 39367
diff changeset
   331
                                             copies)
10060
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   332
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   333
# showfilecopiesswitch() displays file copies only if copy records are
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   334
# provided before calling the templater, usually with a --copies
f780b1098efc templatekw: change {file_copies} behaviour, add {file_copies_switch}
Patrick Mezard <pmezard@gmail.com>
parents: 10058
diff changeset
   335
# command line switch.
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   336
@templatekeyword('file_copies_switch', requires={'revcache'})
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   337
def showfilecopiesswitch(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   338
    """List of strings. Like "file_copies" but displayed
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   339
    only if the --copied switch is set.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   340
    """
36590
0083e373e5f5 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36574
diff changeset
   341
    copies = context.resource(mapping, 'revcache').get('copies') or []
39368
5b1d406b39f1 templatekw: alias {name} of file copies dict to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 39367
diff changeset
   342
    return templateutil.compatfilecopiesdict(context, mapping, 'file_copy',
5b1d406b39f1 templatekw: alias {name} of file copies dict to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 39367
diff changeset
   343
                                             copies)
10058
c829563b3118 cmdutil: extract file copies closure into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10057
diff changeset
   344
38774
87a581d1391c templatekw: use ctx1.status(ctx2) instead of repo.status(ctx1, ctx2)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38588
diff changeset
   345
@templatekeyword('file_dels', requires={'ctx', 'revcache'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   346
def showfiledels(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   347
    """List of strings. Files removed by this changeset."""
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   348
    return _showfilesbystat(context, mapping, 'file_del', 2)
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
   349
38774
87a581d1391c templatekw: use ctx1.status(ctx2) instead of repo.status(ctx1, ctx2)
Martin von Zweigbergk <martinvonz@google.com>
parents: 38588
diff changeset
   350
@templatekeyword('file_mods', requires={'ctx', 'revcache'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   351
def showfilemods(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   352
    """List of strings. Files modified by this changeset."""
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   353
    return _showfilesbystat(context, mapping, 'file_mod', 0)
10056
1a114aca93fa cmdutil: extract file changes closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10055
diff changeset
   354
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   355
@templatekeyword('files', requires={'ctx'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   356
def showfiles(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   357
    """List of strings. All files modified, added, or removed by this
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   358
    changeset.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   359
    """
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   360
    ctx = context.resource(mapping, 'ctx')
39367
83f8f7b9fa60 templatekw: alias {file} of files list to {path}
Yuya Nishihara <yuya@tcha.org>
parents: 38948
diff changeset
   361
    return templateutil.compatfileslist(context, mapping, 'file', ctx.files())
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   362
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   363
@templatekeyword('graphnode', requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   364
def showgraphnode(context, mapping):
34656
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   365
    """String. The character representing the changeset node in an ASCII
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   366
    revision graph."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   367
    repo = context.resource(mapping, 'repo')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   368
    ctx = context.resource(mapping, 'ctx')
36513
6ad140dc4269 templatekw: extract non-templatekw function as getgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 36501
diff changeset
   369
    return getgraphnode(repo, ctx)
6ad140dc4269 templatekw: extract non-templatekw function as getgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 36501
diff changeset
   370
6ad140dc4269 templatekw: extract non-templatekw function as getgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 36501
diff changeset
   371
def getgraphnode(repo, ctx):
37908
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   372
    return getgraphnodecurrent(repo, ctx) or getgraphnodesymbol(ctx)
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   373
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   374
def getgraphnodecurrent(repo, ctx):
27215
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
   375
    wpnodes = repo.dirstate.parents()
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
   376
    if wpnodes[1] == nullid:
5b8da5643a8a templatekw: avoid slow creation of changectx objects in showgraphnode()
Yuya Nishihara <yuya@tcha.org>
parents: 27214
diff changeset
   377
        wpnodes = wpnodes[:1]
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   378
    if ctx.node() in wpnodes:
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   379
        return '@'
37908
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   380
    else:
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   381
        return ''
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   382
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   383
def getgraphnodesymbol(ctx):
8808d5d401ee templates: split getgraphnode() body into two functions
Anton Shestakov <av6@dwimlabs.net>
parents: 37707
diff changeset
   384
    if ctx.obsolete():
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   385
        return 'x'
35508
9b3f95d9783d graphlog: add another graph node type, unstable, using character "*" (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35212
diff changeset
   386
    elif ctx.isunstable():
9b3f95d9783d graphlog: add another graph node type, unstable, using character "*" (BC)
Anton Shestakov <av6@dwimlabs.net>
parents: 35212
diff changeset
   387
        return '*'
27214
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   388
    elif ctx.closesbranch():
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   389
        return '_'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   390
    else:
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   391
        return 'o'
60af96494a76 graphlog: extract "graphnode" template keyword that represents node symbol
Yuya Nishihara <yuya@tcha.org>
parents: 26486
diff changeset
   392
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   393
@templatekeyword('graphwidth', requires=())
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   394
def showgraphwidth(context, mapping):
33858
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
   395
    """Integer. The width of the graph drawn by 'log --graph' or zero."""
36441
27cd83152d31 templatekw: simply override {graphwidth} function by mapping variable
Yuya Nishihara <yuya@tcha.org>
parents: 36401
diff changeset
   396
    # just hosts documentation; should be overridden by template mapping
27cd83152d31 templatekw: simply override {graphwidth} function by mapping variable
Yuya Nishihara <yuya@tcha.org>
parents: 36401
diff changeset
   397
    return 0
33858
6f6c87888b22 log: add a "graphwidth" template variable
Danny Hooper <hooper@google.com>
parents: 33851
diff changeset
   398
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   399
@templatekeyword('index', requires=())
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   400
def showindex(context, mapping):
31807
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
   401
    """Integer. The current iteration of the loop. (0 indexed)"""
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
   402
    # just hosts documentation; should be overridden by template mapping
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
   403
    raise error.Abort(_("can't use index in this context"))
e6eb86b154c5 templater: provide loop counter as "index" keyword
Yuya Nishihara <yuya@tcha.org>
parents: 31699
diff changeset
   404
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   405
@templatekeyword('latesttag', requires={'repo', 'ctx', 'cache'})
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   406
def showlatesttag(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   407
    """List of strings. The global tags on the most recent globally
31850
f0d719e513fc templatekw: clarify the result of {latesttag} when no tag exists
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
   408
    tagged ancestor of this changeset.  If no such tags exist, the list
f0d719e513fc templatekw: clarify the result of {latesttag} when no tag exists
Matt Harbison <matt_harbison@yahoo.com>
parents: 31807
diff changeset
   409
    consists of the single string "null".
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   410
    """
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   411
    return showlatesttags(context, mapping, None)
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
   412
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   413
def showlatesttags(context, mapping, pattern):
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   414
    """helper method for the latesttag keyword and function"""
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   415
    latesttags = getlatesttags(context, mapping, pattern)
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   416
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   417
    # latesttag[0] is an implementation detail for sorting csets on different
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   418
    # branches in a stable manner- it is the date the tagged cset was created,
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   419
    # not the date the tag was created.  Therefore it isn't made visible here.
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   420
    makemap = lambda v: {
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   421
        'changes': _showchangessincetag,
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   422
        'distance': latesttags[1],
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   423
        'latesttag': v,   # BC with {latesttag % '{latesttag}'}
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   424
        'tag': v
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   425
    }
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   426
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   427
    tags = latesttags[2]
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   428
    f = _showcompatlist(context, mapping, 'latesttag', tags, separator=':')
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   429
    return _hybrid(f, tags, makemap, pycompat.identity)
26484
93c80e7ed8c8 templatekw: introduce showlatesttags() to handle {latesttag} keywords
Matt Harbison <matt_harbison@yahoo.com>
parents: 26483
diff changeset
   430
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   431
@templatekeyword('latesttagdistance', requires={'repo', 'ctx', 'cache'})
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   432
def showlatesttagdistance(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   433
    """Integer. Longest path to the latest tag."""
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   434
    return getlatesttags(context, mapping)[1]
10057
babc00a82c5e cmdutil: extract latest tags closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10056
diff changeset
   435
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   436
@templatekeyword('changessincelatesttag', requires={'repo', 'ctx', 'cache'})
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   437
def showchangessincelatesttag(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   438
    """Integer. All ancestors not in the latest tag."""
37074
2891079fb0c0 templater: factor out function to create mapping dict for nested evaluation
Yuya Nishihara <yuya@tcha.org>
parents: 37071
diff changeset
   439
    tag = getlatesttags(context, mapping)[2][0]
2891079fb0c0 templater: factor out function to create mapping dict for nested evaluation
Yuya Nishihara <yuya@tcha.org>
parents: 37071
diff changeset
   440
    mapping = context.overlaymap(mapping, {'tag': tag})
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   441
    return _showchangessincetag(context, mapping)
26483
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
   442
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   443
def _showchangessincetag(context, mapping):
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   444
    repo = context.resource(mapping, 'repo')
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   445
    ctx = context.resource(mapping, 'ctx')
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   446
    offset = 0
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   447
    revs = [ctx.rev()]
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   448
    tag = context.symbol(mapping, 'tag')
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   449
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   450
    # The only() revset doesn't currently support wdir()
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   451
    if ctx.rev() is None:
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   452
        offset = 1
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   453
        revs = [p.rev() for p in ctx.parents()]
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   454
26483
e94f93043a4e templatekw: factor out the changessincetag calculation to a private method
Matt Harbison <matt_harbison@yahoo.com>
parents: 26482
diff changeset
   455
    return len(repo.revs('only(%ld, %s)', revs, tag)) + offset
25724
4474a750413f templatekw: introduce the changessincelatesttag keyword
Matt Harbison <matt_harbison@yahoo.com>
parents: 25700
diff changeset
   456
36596
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   457
# teach templater latesttags.changes is switched to (context, mapping) API
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   458
_showchangessincetag._requires = {'repo', 'ctx'}
b5d39a09656a templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36595
diff changeset
   459
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   460
@templatekeyword('manifest', requires={'repo', 'ctx'})
36597
d57f383516f6 templatekw: switch manifest template keyword to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36596
diff changeset
   461
def showmanifest(context, mapping):
d57f383516f6 templatekw: switch manifest template keyword to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36596
diff changeset
   462
    repo = context.resource(mapping, 'repo')
d57f383516f6 templatekw: switch manifest template keyword to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36596
diff changeset
   463
    ctx = context.resource(mapping, 'ctx')
24676
13c42a883e8b templatekw: have {manifest} use ctx.manifestnode() for consistency
Yuya Nishihara <yuya@tcha.org>
parents: 24337
diff changeset
   464
    mnode = ctx.manifestnode()
25736
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
   465
    if mnode is None:
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
   466
        # just avoid crash, we might want to use the 'ff...' hash in future
8854ca3fa675 templatekw: apply manifest template only if ctx.manifestnode() exists
Yuya Nishihara <yuya@tcha.org>
parents: 25727
diff changeset
   467
        return
38555
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38519
diff changeset
   468
    mrev = repo.manifestlog.rev(mnode)
34330
89aec1834a86 templatekw: add new-style template expansion to {manifest}
Yuya Nishihara <yuya@tcha.org>
parents: 34328
diff changeset
   469
    mhex = hex(mnode)
37074
2891079fb0c0 templater: factor out function to create mapping dict for nested evaluation
Yuya Nishihara <yuya@tcha.org>
parents: 37071
diff changeset
   470
    mapping = context.overlaymap(mapping, {'rev': mrev, 'node': mhex})
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   471
    f = context.process('manifest', mapping)
34330
89aec1834a86 templatekw: add new-style template expansion to {manifest}
Yuya Nishihara <yuya@tcha.org>
parents: 34328
diff changeset
   472
    # TODO: perhaps 'ctx' should be dropped from mapping because manifest
89aec1834a86 templatekw: add new-style template expansion to {manifest}
Yuya Nishihara <yuya@tcha.org>
parents: 34328
diff changeset
   473
    # rev and node are completely different from changeset's.
38283
0e0d03d09ecd templater: rename mappable to hybriditem as it is the primary use case
Yuya Nishihara <yuya@tcha.org>
parents: 38167
diff changeset
   474
    return templateutil.hybriditem(f, None, f,
0e0d03d09ecd templater: rename mappable to hybriditem as it is the primary use case
Yuya Nishihara <yuya@tcha.org>
parents: 38167
diff changeset
   475
                                   lambda x: {'rev': mrev, 'node': mhex})
10055
e400a511e63a cmdutil: extract repo dependent closures in templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10054
diff changeset
   476
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   477
@templatekeyword('obsfate', requires={'ui', 'repo', 'ctx'})
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   478
def showobsfate(context, mapping):
34847
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   479
    # this function returns a list containing pre-formatted obsfate strings.
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   480
    #
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   481
    # This function will be replaced by templates fragments when we will have
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   482
    # the verbosity templatekw available.
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   483
    succsandmarkers = showsuccsandmarkers(context, mapping)
34847
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   484
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   485
    ui = context.resource(mapping, 'ui')
37328
11d51e518808 obsutil: make obsfateprinter() less dependent on templater
Yuya Nishihara <yuya@tcha.org>
parents: 37274
diff changeset
   486
    repo = context.resource(mapping, 'repo')
34847
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   487
    values = []
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   488
37503
49a8c2cc7978 templatekw: fix return type of {succsandmarkers} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37328
diff changeset
   489
    for x in succsandmarkers.tovalue(context, mapping):
37328
11d51e518808 obsutil: make obsfateprinter() less dependent on templater
Yuya Nishihara <yuya@tcha.org>
parents: 37274
diff changeset
   490
        v = obsutil.obsfateprinter(ui, repo, x['successors'], x['markers'],
11d51e518808 obsutil: make obsfateprinter() less dependent on templater
Yuya Nishihara <yuya@tcha.org>
parents: 37274
diff changeset
   491
                                   scmutil.formatchangeid)
11d51e518808 obsutil: make obsfateprinter() less dependent on templater
Yuya Nishihara <yuya@tcha.org>
parents: 37274
diff changeset
   492
        values.append(v)
34847
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   493
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   494
    return compatlist(context, mapping, "fate", values)
34847
e27f1f04c2cf templatekw: introduce obsfate keyword
Boris Feld <boris.feld@octobus.net>
parents: 34657
diff changeset
   495
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   496
def shownames(context, mapping, namespace):
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
   497
    """helper method to generate a template keyword for a namespace"""
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   498
    repo = context.resource(mapping, 'repo')
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   499
    ctx = context.resource(mapping, 'ctx')
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
   500
    ns = repo.names[namespace]
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
   501
    names = ns.names(repo, ctx.node())
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   502
    return compatlist(context, mapping, ns.templatename, names,
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   503
                      plural=namespace)
27893
b42b2e86ef02 templatekw: move shownames() helper to be sorted alphabetically
Yuya Nishihara <yuya@tcha.org>
parents: 27891
diff changeset
   504
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   505
@templatekeyword('namespaces', requires={'repo', 'ctx'})
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   506
def shownamespaces(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   507
    """Dict of lists. Names attached to this changeset per
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
   508
    namespace."""
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   509
    repo = context.resource(mapping, 'repo')
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   510
    ctx = context.resource(mapping, 'ctx')
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   511
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   512
    namespaces = util.sortdict()
34541
0a0a72c043ac templatekw: allow accessing to nested namespace item by its template name
Yuya Nishihara <yuya@tcha.org>
parents: 34540
diff changeset
   513
    def makensmapfn(ns):
0a0a72c043ac templatekw: allow accessing to nested namespace item by its template name
Yuya Nishihara <yuya@tcha.org>
parents: 34540
diff changeset
   514
        # 'name' for iterating over namespaces, templatename for local reference
0a0a72c043ac templatekw: allow accessing to nested namespace item by its template name
Yuya Nishihara <yuya@tcha.org>
parents: 34540
diff changeset
   515
        return lambda v: {'name': v, ns.templatename: v}
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   516
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   517
    for k, ns in repo.names.iteritems():
34541
0a0a72c043ac templatekw: allow accessing to nested namespace item by its template name
Yuya Nishihara <yuya@tcha.org>
parents: 34540
diff changeset
   518
        names = ns.names(repo, ctx.node())
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   519
        f = _showcompatlist(context, mapping, 'name', names)
34541
0a0a72c043ac templatekw: allow accessing to nested namespace item by its template name
Yuya Nishihara <yuya@tcha.org>
parents: 34540
diff changeset
   520
        namespaces[k] = _hybrid(f, names, makensmapfn(ns), pycompat.identity)
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   521
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   522
    f = _showcompatlist(context, mapping, 'namespace', list(namespaces))
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   523
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   524
    def makemap(ns):
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   525
        return {
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   526
            'namespace': ns,
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   527
            'names': namespaces[ns],
34540
1c7c4445686f templatekw: get rid of temporary dicts from shownamespaces()
Yuya Nishihara <yuya@tcha.org>
parents: 34539
diff changeset
   528
            'builtin': repo.names[ns].builtin,
1c7c4445686f templatekw: get rid of temporary dicts from shownamespaces()
Yuya Nishihara <yuya@tcha.org>
parents: 34539
diff changeset
   529
            'colorname': repo.names[ns].colorname,
33047
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   530
        }
de8e3681c402 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33017
diff changeset
   531
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   532
    return _hybrid(f, namespaces, makemap, pycompat.identity)
27894
a94f7eef3199 templatekw: add {namespaces} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 27893
diff changeset
   533
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   534
@templatekeyword('node', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   535
def shownode(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   536
    """String. The changeset identification hash, as a 40 hexadecimal
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   537
    digit string.
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   538
    """
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   539
    ctx = context.resource(mapping, 'ctx')
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   540
    return ctx.hex()
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   541
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   542
@templatekeyword('obsolete', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   543
def showobsolete(context, mapping):
34657
bfb6fd93b637 help: hide template keywords of obsolescence as they are still experimental
Yuya Nishihara <yuya@tcha.org>
parents: 34656
diff changeset
   544
    """String. Whether the changeset is obsolete. (EXPERIMENTAL)"""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   545
    ctx = context.resource(mapping, 'ctx')
31699
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
   546
    if ctx.obsolete():
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
   547
        return 'obsolete'
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
   548
    return ''
568c4e7437b2 templatekw: add an "obsolete" keyword
Denis Laxalde <denis@laxalde.org>
parents: 31452
diff changeset
   549
39371
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   550
@templatekeyword('path', requires={'fctx'})
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   551
def showpath(context, mapping):
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   552
    """String. Repository-absolute path of the current file. (EXPERIMENTAL)"""
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   553
    fctx = context.resource(mapping, 'fctx')
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   554
    return fctx.path()
3cd977d5a16b templatekw: add {path} keyword to host documentation
Yuya Nishihara <yuya@tcha.org>
parents: 39368
diff changeset
   555
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   556
@templatekeyword('peerurls', requires={'repo'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   557
def showpeerurls(context, mapping):
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
   558
    """A dictionary of repository locations defined in the [paths] section
34539
f30e59703d98 templatekw: rename peerpaths to peerurls per naming convention (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34538
diff changeset
   559
    of your configuration file."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   560
    repo = context.resource(mapping, 'repo')
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
   561
    # see commands.paths() for naming of dictionary keys
34538
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   562
    paths = repo.ui.paths
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   563
    urls = util.sortdict((k, p.rawloc) for k, p in sorted(paths.iteritems()))
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   564
    def makemap(k):
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   565
        p = paths[k]
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   566
        d = {'name': k, 'url': p.rawloc}
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
   567
        d.update((o, v) for o, v in sorted(p.suboptions.iteritems()))
34538
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   568
        return d
ac38e889b33a templatekw: make experimental {peerpaths} return a single-level dict (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 34537
diff changeset
   569
    return _hybrid(None, urls, makemap, lambda k: '%s=%s' % (k, urls[k]))
33414
16ed67164002 templatekw: export ui.paths as {peerpaths}
Yuya Nishihara <yuya@tcha.org>
parents: 33276
diff changeset
   570
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   571
@templatekeyword("predecessors", requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   572
def showpredecessors(context, mapping):
34657
bfb6fd93b637 help: hide template keywords of obsolescence as they are still experimental
Yuya Nishihara <yuya@tcha.org>
parents: 34656
diff changeset
   573
    """Returns the list if the closest visible successors. (EXPERIMENTAL)"""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   574
    repo = context.resource(mapping, 'repo')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   575
    ctx = context.resource(mapping, 'ctx')
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
   576
    predecessors = sorted(obsutil.closestpredecessors(repo, ctx.node()))
38306
523f64466a05 py3: fix map() use in templatekw.showpredecessors()
Yuya Nishihara <yuya@tcha.org>
parents: 38299
diff changeset
   577
    predecessors = pycompat.maplist(hex, predecessors)
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
   578
32910
498e9dcc5fa9 templatekw: populate all keywords depending on predecessor in map operation
Yuya Nishihara <yuya@tcha.org>
parents: 32909
diff changeset
   579
    return _hybrid(None, predecessors,
37103
be3f33f5e232 templater: switch 'revcache' based on new mapping items
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   580
                   lambda x: {'ctx': repo[x]},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   581
                   lambda x: scmutil.formatchangeid(repo[x]))
32879
1858fc2327ef template: add predecessors template
Boris Feld <boris.feld@octobus.net>
parents: 32658
diff changeset
   582
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   583
@templatekeyword('reporoot', requires={'repo'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   584
def showreporoot(context, mapping):
36247
48a6b1a22ccf templatekw: add {reporoot} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 36110
diff changeset
   585
    """String. The root directory of the current repository."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   586
    repo = context.resource(mapping, 'repo')
36247
48a6b1a22ccf templatekw: add {reporoot} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 36110
diff changeset
   587
    return repo.root
48a6b1a22ccf templatekw: add {reporoot} keyword
Yuya Nishihara <yuya@tcha.org>
parents: 36110
diff changeset
   588
39587
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   589
@templatekeyword('size', requires={'fctx'})
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   590
def showsize(context, mapping):
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   591
    """Integer. Size of the current file in bytes. (EXPERIMENTAL)"""
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   592
    fctx = context.resource(mapping, 'fctx')
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   593
    return fctx.size()
918944f53aac templatekw: add {size} keyword as an example of fctx-based keyword
Yuya Nishihara <yuya@tcha.org>
parents: 39371
diff changeset
   594
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   595
@templatekeyword("successorssets", requires={'repo', 'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   596
def showsuccessorssets(context, mapping):
34656
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   597
    """Returns a string of sets of successors for a changectx. Format used
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   598
    is: [ctx1, ctx2], [ctx3] if ctx has been splitted into ctx1 and ctx2
34657
bfb6fd93b637 help: hide template keywords of obsolescence as they are still experimental
Yuya Nishihara <yuya@tcha.org>
parents: 34656
diff changeset
   599
    while also diverged into ctx3. (EXPERIMENTAL)"""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   600
    repo = context.resource(mapping, 'repo')
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   601
    ctx = context.resource(mapping, 'ctx')
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   602
    if not ctx.obsolete():
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   603
        return ''
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   604
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   605
    ssets = obsutil.successorssets(repo, ctx.node(), closest=True)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   606
    ssets = [[hex(n) for n in ss] for ss in ssets]
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   607
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   608
    data = []
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   609
    for ss in ssets:
37103
be3f33f5e232 templater: switch 'revcache' based on new mapping items
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   610
        h = _hybrid(None, ss, lambda x: {'ctx': repo[x]},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   611
                    lambda x: scmutil.formatchangeid(repo[x]))
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   612
        data.append(h)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   613
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   614
    # Format the successorssets
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   615
    def render(d):
37274
45987e2b64f0 templatekw: do not directly call .gen
Yuya Nishihara <yuya@tcha.org>
parents: 37103
diff changeset
   616
        return templateutil.stringify(context, mapping, d)
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   617
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   618
    def gen(data):
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   619
        yield "; ".join(render(d) for d in data)
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   620
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   621
    return _hybrid(gen(data), data, lambda x: {'successorset': x},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   622
                   pycompat.identity)
33276
89796a25d4bb template: add successors template
Boris Feld <boris.feld@octobus.net>
parents: 33048
diff changeset
   623
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   624
@templatekeyword("succsandmarkers", requires={'repo', 'ctx'})
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   625
def showsuccsandmarkers(context, mapping):
34656
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   626
    """Returns a list of dict for each final successor of ctx. The dict
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   627
    contains successors node id in "successors" keys and the list of
eb7fffdc6e5b help: fix formatting of template keywords
Yuya Nishihara <yuya@tcha.org>
parents: 34581
diff changeset
   628
    obs-markers from ctx to the set of successors in "markers".
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   629
    (EXPERIMENTAL)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   630
    """
36594
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   631
    repo = context.resource(mapping, 'repo')
59ee648870a7 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36593
diff changeset
   632
    ctx = context.resource(mapping, 'ctx')
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   633
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   634
    values = obsutil.successorsandmarkers(repo, ctx)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   635
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   636
    if values is None:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   637
        values = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   638
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   639
    # Format successors and markers to avoid exposing binary to templates
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   640
    data = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   641
    for i in values:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   642
        # Format successors
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   643
        successors = i['successors']
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   644
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   645
        successors = [hex(n) for n in successors]
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   646
        successors = _hybrid(None, successors,
37103
be3f33f5e232 templater: switch 'revcache' based on new mapping items
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   647
                             lambda x: {'ctx': repo[x]},
34328
dd28b1f55eb8 templatekw: just pass underlying value (or key) to joinfmt() function
Yuya Nishihara <yuya@tcha.org>
parents: 34327
diff changeset
   648
                             lambda x: scmutil.formatchangeid(repo[x]))
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   649
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   650
        # Format markers
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   651
        finalmarkers = []
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   652
        for m in i['markers']:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   653
            hexprec = hex(m[0])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   654
            hexsucs = tuple(hex(n) for n in m[1])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   655
            hexparents = None
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   656
            if m[5] is not None:
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   657
                hexparents = tuple(hex(n) for n in m[5])
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   658
            newmarker = (hexprec, hexsucs) + m[2:5] + (hexparents,) + m[6:]
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   659
            finalmarkers.append(newmarker)
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   660
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   661
        data.append({'successors': successors, 'markers': finalmarkers})
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   662
37503
49a8c2cc7978 templatekw: fix return type of {succsandmarkers} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 37328
diff changeset
   663
    return templateutil.mappinglist(data)
33912
e278d6d2d7d2 template: add minimal obsfate template function
Boris Feld <boris.feld@octobus.net>
parents: 33865
diff changeset
   664
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   665
@templatekeyword('p1rev', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   666
def showp1rev(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   667
    """Integer. The repository-local revision number of the changeset's
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   668
    first parent, or -1 if the changeset has no parents."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   669
    ctx = context.resource(mapping, 'ctx')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   670
    return ctx.p1().rev()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   671
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   672
@templatekeyword('p2rev', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   673
def showp2rev(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   674
    """Integer. The repository-local revision number of the changeset's
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   675
    second parent, or -1 if the changeset has no second parent."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   676
    ctx = context.resource(mapping, 'ctx')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   677
    return ctx.p2().rev()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   678
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   679
@templatekeyword('p1node', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   680
def showp1node(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   681
    """String. The identification hash of the changeset's first parent,
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   682
    as a 40 digit hexadecimal string. If the changeset has no parents, all
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   683
    digits are 0."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   684
    ctx = context.resource(mapping, 'ctx')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   685
    return ctx.p1().hex()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   686
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   687
@templatekeyword('p2node', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   688
def showp2node(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   689
    """String. The identification hash of the changeset's second
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   690
    parent, as a 40 digit hexadecimal string. If the changeset has no second
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   691
    parent, all digits are 0."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   692
    ctx = context.resource(mapping, 'ctx')
17357
bd605568c5a0 templatekw: add p1rev, p1node, p2rev, p2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   693
    return ctx.p2().hex()
17355
c25531ed58b0 templatekw: add parent1, parent1node, parent2, parent2node keywords
epriestley <hg@yghe.net>
parents: 17187
diff changeset
   694
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   695
@templatekeyword('parents', requires={'repo', 'ctx'})
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   696
def showparents(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   697
    """List of strings. The parents of the changeset in "rev:node"
26434
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
   698
    format. If the changeset has only one "natural" parent (the predecessor
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
   699
    revision) nothing is shown."""
36598
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   700
    repo = context.resource(mapping, 'repo')
c3f9d0c303e8 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36597
diff changeset
   701
    ctx = context.resource(mapping, 'ctx')
28270
650c9f69a744 templatekw: switch ctx of list expression to rev of {parents} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28239
diff changeset
   702
    pctxs = scmutil.meaningfulparents(repo, ctx)
34581
ee0d74083a22 templater: store revisions as ints so min/max won't compare them as strings
Yuya Nishihara <yuya@tcha.org>
parents: 34541
diff changeset
   703
    prevs = [p.rev() for p in pctxs]
26435
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
   704
    parents = [[('rev', p.rev()),
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
   705
                ('node', p.hex()),
882b170ae616 templatekw: port implementation of showparents() from changeset_templater
Yuya Nishihara <yuya@tcha.org>
parents: 26434
diff changeset
   706
                ('phase', p.phasestr())]
28270
650c9f69a744 templatekw: switch ctx of list expression to rev of {parents} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28239
diff changeset
   707
               for p in pctxs]
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   708
    f = _showcompatlist(context, mapping, 'parent', parents)
37103
be3f33f5e232 templater: switch 'revcache' based on new mapping items
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   709
    return _hybrid(f, prevs, lambda x: {'ctx': repo[x]},
34581
ee0d74083a22 templater: store revisions as ints so min/max won't compare them as strings
Yuya Nishihara <yuya@tcha.org>
parents: 34541
diff changeset
   710
                   lambda x: scmutil.formatchangeid(repo[x]), keytype=int)
26434
0a823de8d7b7 templatekw: reorder stub of showparents() function
Yuya Nishihara <yuya@tcha.org>
parents: 26234
diff changeset
   711
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   712
@templatekeyword('phase', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   713
def showphase(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   714
    """String. The changeset phase name."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   715
    ctx = context.resource(mapping, 'ctx')
15823
a1f818a2b50d phases: ``{phase}`` template keyword display the phase name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15422
diff changeset
   716
    return ctx.phasestr()
a1f818a2b50d phases: ``{phase}`` template keyword display the phase name
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15422
diff changeset
   717
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   718
@templatekeyword('phaseidx', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   719
def showphaseidx(context, mapping):
34991
29e6513856ee help: hide phaseidx template keyword
Yuya Nishihara <yuya@tcha.org>
parents: 34847
diff changeset
   720
    """Integer. The changeset phase index. (ADVANCED)"""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   721
    ctx = context.resource(mapping, 'ctx')
15422
042e11c4e416 phases: add a phase template keyword
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15155
diff changeset
   722
    return ctx.phase()
042e11c4e416 phases: add a phase template keyword
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 15155
diff changeset
   723
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   724
@templatekeyword('rev', requires={'ctx'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   725
def showrev(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   726
    """Integer. The repository-local changeset revision number."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   727
    ctx = context.resource(mapping, 'ctx')
32656
4bec8cce6a09 scmutil: pass ctx object to intrev()
Yuya Nishihara <yuya@tcha.org>
parents: 32038
diff changeset
   728
    return scmutil.intrev(ctx)
10054
1a85861f59af cmdutil: extract ctx dependent closures into templatekw
Patrick Mezard <pmezard@gmail.com>
parents: 10053
diff changeset
   729
36595
2da414105809 templatekw: switch revset() to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36594
diff changeset
   730
def showrevslist(context, mapping, name, revs):
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
   731
    """helper to generate a list of revisions in which a mapped template will
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
   732
    be evaluated"""
36595
2da414105809 templatekw: switch revset() to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36594
diff changeset
   733
    repo = context.resource(mapping, 'repo')
37069
724f2e21d870 templatekw: stop using _showlist() which is about to be deprecated
Yuya Nishihara <yuya@tcha.org>
parents: 37068
diff changeset
   734
    f = _showcompatlist(context, mapping, name, ['%d' % r for r in revs])
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
   735
    return _hybrid(f, revs,
37103
be3f33f5e232 templater: switch 'revcache' based on new mapping items
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
   736
                   lambda x: {name: x, 'ctx': repo[x]},
34581
ee0d74083a22 templater: store revisions as ints so min/max won't compare them as strings
Yuya Nishihara <yuya@tcha.org>
parents: 34541
diff changeset
   737
                   pycompat.identity, keytype=int)
26234
e4609ec959f8 templater: switch ctx of list expression to rev of revset() (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 25984
diff changeset
   738
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   739
@templatekeyword('subrepos', requires={'ctx'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   740
def showsubrepos(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   741
    """List of strings. Updated subrepositories in the changeset."""
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   742
    ctx = context.resource(mapping, 'ctx')
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   743
    substate = ctx.substate
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   744
    if not substate:
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   745
        return compatlist(context, mapping, 'subrepo', [])
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   746
    psubstate = ctx.parents()[0].substate or {}
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   747
    subrepos = []
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   748
    for sub in substate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   749
        if sub not in psubstate or substate[sub] != psubstate[sub]:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   750
            subrepos.append(sub) # modified or newly added in ctx
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   751
    for sub in psubstate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   752
        if sub not in substate:
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   753
            subrepos.append(sub) # removed in ctx
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   754
    return compatlist(context, mapping, 'subrepo', sorted(subrepos))
21897
764adc332f6e templatekw: add 'subrepos' keyword to show updated subrepositories
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21896
diff changeset
   755
23977
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
   756
# don't remove "showtags" definition, even though namespaces will put
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
   757
# a helper function for "tags" keyword into "keywords" map automatically,
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
   758
# because online help text is built without namespaces initialization
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   759
@templatekeyword('tags', requires={'repo', 'ctx'})
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   760
def showtags(context, mapping):
28539
119702a8b415 templatekw: use templatekeyword to mark a function as template keyword
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
   761
    """List of strings. Any tags associated with the changeset."""
36593
900e5ee44307 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36591
diff changeset
   762
    return shownames(context, mapping, 'tags')
23977
0870bb93573c templatekw: re-add showtags() to list tags keyword up in online help
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23737
diff changeset
   763
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   764
@templatekeyword('termwidth', requires={'ui'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   765
def showtermwidth(context, mapping):
30088
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
   766
    """Integer. The width of the current terminal."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   767
    ui = context.resource(mapping, 'ui')
36442
e46b24582fa0 templatekw: minimize resource dependency of {envvars} and {termwidth}
Yuya Nishihara <yuya@tcha.org>
parents: 36441
diff changeset
   768
    return ui.termwidth()
30088
d1f5f158768e template: provide a termwidth keyword (issue5395)
Simon Farnsworth <simonfar@fb.com>
parents: 29669
diff changeset
   769
38948
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   770
@templatekeyword('user', requires={'ctx'})
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   771
def showuser(context, mapping):
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   772
    """String. The unmodified author of the changeset."""
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   773
    ctx = context.resource(mapping, 'ctx')
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   774
    return ctx.user()
390287321b4b templatekw: copy {author} to {user} and document {author} as an alias
Yuya Nishihara <yuya@tcha.org>
parents: 38774
diff changeset
   775
37068
aa97e06a1912 templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents: 37019
diff changeset
   776
@templatekeyword('instabilities', requires={'ctx'})
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   777
def showinstabilities(context, mapping):
33709
511d6ae462f3 template: rename troubles templatekw into instabilities
Boris Feld <boris.feld@octobus.net>
parents: 33476
diff changeset
   778
    """List of strings. Evolution instabilities affecting the changeset.
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
   779
    (EXPERIMENTAL)
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
   780
    """
36591
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   781
    ctx = context.resource(mapping, 'ctx')
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   782
    return compatlist(context, mapping, 'instability', ctx.instabilities(),
121a20e5da56 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents: 36590
diff changeset
   783
                      plural='instabilities')
30712
5dde81de1e6d templatekw: add a "troubles" template keyword
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 30375
diff changeset
   784
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   785
@templatekeyword('verbosity', requires={'ui'})
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   786
def showverbosity(context, mapping):
34993
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   787
    """String. The current output verbosity in 'debug', 'quiet', 'verbose',
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   788
    or ''."""
36514
7b74afec6772 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org>
parents: 36513
diff changeset
   789
    ui = context.resource(mapping, 'ui')
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35508
diff changeset
   790
    # see logcmdutil.changesettemplater for priority of these flags
34993
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   791
    if ui.debugflag:
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   792
        return 'debug'
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   793
    elif ui.quiet:
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   794
        return 'quiet'
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   795
    elif ui.verbose:
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   796
        return 'verbose'
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   797
    return ''
625d5ebce066 templatekw: add verbosity keyword to select template by -q/-v/--debug flag
Yuya Nishihara <yuya@tcha.org>
parents: 34992
diff changeset
   798
37685
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   799
@templatekeyword('whyunstable', requires={'repo', 'ctx'})
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   800
def showwhyunstable(context, mapping):
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   801
    """List of dicts explaining all instabilities of a changeset.
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   802
    (EXPERIMENTAL)
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   803
    """
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   804
    repo = context.resource(mapping, 'repo')
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   805
    ctx = context.resource(mapping, 'ctx')
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   806
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   807
    def formatnode(ctx):
37707
24fee31fda05 templates: adjust white space amount in the output of {whyunstable}
Anton Shestakov <av6@dwimlabs.net>
parents: 37686
diff changeset
   808
        return '%s (%s)' % (scmutil.formatchangeid(ctx), ctx.phasestr())
37685
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   809
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   810
    entries = obsutil.whyunstable(repo, ctx)
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   811
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   812
    for entry in entries:
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   813
        if entry.get('divergentnodes'):
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   814
            dnodes = entry['divergentnodes']
37686
b1b1b0626f59 templates: make divergentnodes in whyunstable keyword be a hybrid list
Anton Shestakov <av6@dwimlabs.net>
parents: 37685
diff changeset
   815
            dnhybrid = _hybrid(None, [dnode.hex() for dnode in dnodes],
b1b1b0626f59 templates: make divergentnodes in whyunstable keyword be a hybrid list
Anton Shestakov <av6@dwimlabs.net>
parents: 37685
diff changeset
   816
                               lambda x: {'ctx': repo[x]},
b1b1b0626f59 templates: make divergentnodes in whyunstable keyword be a hybrid list
Anton Shestakov <av6@dwimlabs.net>
parents: 37685
diff changeset
   817
                               lambda x: formatnode(repo[x]))
b1b1b0626f59 templates: make divergentnodes in whyunstable keyword be a hybrid list
Anton Shestakov <av6@dwimlabs.net>
parents: 37685
diff changeset
   818
            entry['divergentnodes'] = dnhybrid
37685
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   819
37707
24fee31fda05 templates: adjust white space amount in the output of {whyunstable}
Anton Shestakov <av6@dwimlabs.net>
parents: 37686
diff changeset
   820
    tmpl = ('{instability}:{if(divergentnodes, " ")}{divergentnodes} '
24fee31fda05 templates: adjust white space amount in the output of {whyunstable}
Anton Shestakov <av6@dwimlabs.net>
parents: 37686
diff changeset
   821
            '{reason} {node|short}')
37685
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   822
    return templateutil.mappinglist(entries, tmpl=tmpl, sep='\n')
76cd5816268e templates: add whyunstable template keyword
Anton Shestakov <av6@dwimlabs.net>
parents: 37503
diff changeset
   823
34992
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   824
def loadkeyword(ui, extname, registrarobj):
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   825
    """Load template keyword from specified registrarobj
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   826
    """
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   827
    for name, func in registrarobj._table.iteritems():
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   828
        keywords[name] = func
e2fc6cec0eff templatekw: move loadkeyword() to bottom
Yuya Nishihara <yuya@tcha.org>
parents: 34991
diff changeset
   829
13585
2e80d495592a templates: generate keyword help dynamically
Patrick Mezard <pmezard@gmail.com>
parents: 13386
diff changeset
   830
# tell hggettext to extract docstrings from these functions:
26436
a2291c9c85a1 templatekw: remove dockeywords hack
Yuya Nishihara <yuya@tcha.org>
parents: 26435
diff changeset
   831
i18nfunctions = keywords.values()