annotate extensions/kwarchive.py @ 294:2eb443e77cff

Refactor: put the real keyword printing into a separate function. This function can and should be used for printing subrepo keywords also.
author Franz Glasner <hg@dom66.de>
date Sun, 27 Jan 2019 16:36:30 +0100
parents 75070825d111
children eeb8c52d8802
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
125
fb7e1e4e4d2c Provide some SCCS markers also to be able to search with "what(1)" also
Franz Glasner <hg@dom66.de>
parents: 124
diff changeset
2 # @(#) $HGheader$
104
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
3 # $HGnodeid$
34
7c4addd60935 Put keyword into the extensions itself
Franz Glasner <hg@dom66.de>
parents: 33
diff changeset
4 #
60
eebebd7acc69 Wording of docu
Franz Glasner <hg@dom66.de>
parents: 57
diff changeset
5 """like :hg:`archive` but with keyword expansion within selected files
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
6
129
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
7 Configuration is done in a versioned ``.hgkwarchive`` configuration
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
8 file. This file uses the same syntax as all other Mercurial
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
9 configuration files.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
10
129
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
11 The ``[patterns]`` section specifies which files should have the
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
12 keywords expanded and possibly the style of expansion. The keys are
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
13 Mercurial file name patterns as described in :hg:`patterns`.
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
14
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
15 Example::
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
16
120
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
17 #
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
18 # Determine which files are consideres for keyword expansion in
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
19 # which style
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
20 #
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
21 [patterns]
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
22 #
124
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
23 # Expand keywords in every python file except those matching "x*"
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
24 # using the default RCS style expansion format
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
25 #
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
26 **.py =
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
27 x* = NO
124
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
28 # This file has reStructuredText style keyword expansion "|VCS<kw>|" only
87
a9b532915ce0 Document the "reST" marker within patterns
Franz Glasner <hg@dom66.de>
parents: 86
diff changeset
29 path:VERSION = reST
124
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
30 # This file has reStructuredText style and RCS style keyword expansion
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
31 path:README = reST, RCS
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
32
246
d23d3d97c106 FIX: Typo in docu: [keyword] -> [keywords]
Franz Glasner <hg@dom66.de>
parents: 160
diff changeset
33 The ``[keywords]`` section specifies which keywords are expanded. Aliases
129
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
34 can be defined also. By default the pre-defined set of RCC/CVS/SVN-like
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
35 keywords is expanded. A non-empty ``[keyword]`` section defines an
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
36 explicit white-list of expanded keywords and/or aliases.
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
37
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
38 Example::
51a4f1f5df09 Docu: enhanced the docu of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 126
diff changeset
39
120
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
40 #
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
41 # Determine which keywords are expanded.
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
42 # A missing and/or empty section means that all predefined keywords
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
43 # are expanded.
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
44 #
124
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
45 # Consisting of key-value pairs with of the form
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
46 #
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
47 # Alias = PreDefinedKeyword
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
48 #
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
49 # An empty `PreDefinedKeyword' means the identity.
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
50 #
120
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
51 [keywords]
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
52 # `Revision' and possibly the `VCSRevision' keyword is expanded
120
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
53 Revision =
124
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
54 #
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
55 # Additionally: `MyKeyword' is expanded with the contents of the
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
56 # pre-defined `JustDate'
46b7d34ef0b2 Enhanced the module documentation of "kwarchive"
Franz Glasner <hg@dom66.de>
parents: 122
diff changeset
57 #
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
58 MyKeyword = JustDate
133
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
59 #
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
60 # `MyCustomSubstKeyword' is a substitution keyword. It's value is the
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
61 # plain string after "replace:: ".
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
62 #
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
63 MyCustomSubstKeyword = replace:: This is my replacement content
120
9ed197b60e99 Prepare a [keywords] section with a whitelist of considered keywords and/or aliases
Franz Glasner <hg@dom66.de>
parents: 119
diff changeset
64
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
65 A non-existing ``.hgkwarchive`` file deactivates keyword expansion as does
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
66 an empty ``[patterns]`` section.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
67
130
c3397e670063 Docu: drop a note why templates are not supported in keyword definitions
Franz Glasner <hg@dom66.de>
parents: 129
diff changeset
68 .. note:: Because the keyword expansion is defined in a *versioned* file
c3397e670063 Docu: drop a note why templates are not supported in keyword definitions
Franz Glasner <hg@dom66.de>
parents: 129
diff changeset
69 no templating is supported here. This could lead to remote
c3397e670063 Docu: drop a note why templates are not supported in keyword definitions
Franz Glasner <hg@dom66.de>
parents: 129
diff changeset
70 code execution secnarios because Mercurial templates can execute
c3397e670063 Docu: drop a note why templates are not supported in keyword definitions
Franz Glasner <hg@dom66.de>
parents: 129
diff changeset
71 a big bunch of Python functions.
c3397e670063 Docu: drop a note why templates are not supported in keyword definitions
Franz Glasner <hg@dom66.de>
parents: 129
diff changeset
72
137
5e502e9dd5e5 As an example: put the |VCSRevision| into the extensions also and print it with the help output
Franz Glasner <hg@dom66.de>
parents: 136
diff changeset
73 (rev |VCSRevision|)
5e502e9dd5e5 As an example: put the |VCSRevision| into the extensions also and print it with the help output
Franz Glasner <hg@dom66.de>
parents: 136
diff changeset
74
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
75 """
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
76
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
77 from __future__ import absolute_import
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
78
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
79
42
b46ab29aefd8 Remove the "__version__" variable: use "__revision__" only instead
Franz Glasner <hg@dom66.de>
parents: 41
diff changeset
80 __revision__ = "$Revision$"
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
81
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
82 __author__ = "Franz Glasner"
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
83
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
84
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
85 import os
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
86 import itertools
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
87 import inspect
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
88
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
89 from mercurial.i18n import _
288
0080dab59fac Begin tests with subrepos and some preparations for nested subrepos
Franz Glasner <hg@dom66.de>
parents: 287
diff changeset
90 from mercurial import (archival, config, cmdutil, error, match, subrepo,
104
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
91 pycompat, scmutil, templatefilters, util, node)
248
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
92 try:
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
93 from mercurial import registrar
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
94 except ImportError:
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
95 registrar = None
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
96
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
97
255
b62794e7d094 Tested "revinfo" and "kwarchive" with Mercurial 4.8.1 also: unit-tests (and other invocations) are ok
Franz Glasner <hg@dom66.de>
parents: 249
diff changeset
98 testedwith = "4.3.1 4.3.2 4.4.1 4.4.2 4.5.2 4.6.1 4.8.1"
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
99
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
100
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
101 SHORTENED_HG_SCHEMES = {
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
102 "ssh": "hg+ssh",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
103 "http": "hg+http",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
104 "https": "hg+https",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
105 "file": "file",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
106 }
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
107
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
108
156
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
109 KWARCHIVE_CONFIG = ".hgkwarchive"
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
110
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
111
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
112 cmdtable = {}
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
113
248
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
114 if registrar:
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
115 command = registrar.command(cmdtable)
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
116 else:
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
117 command = cmdutil.command(cmdtable)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
118
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
119
150
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
120 def getversion():
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
121 """Provide the version information for verbose :hg:`version` output.
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
122
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
123 Read the :file:`VERSION` from the parent of the :file:`extensions`
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
124 directory.
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
125
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
126 """
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
127 import re
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
128 import os
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
129 try:
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
130 fn = __file__
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
131 except NameError:
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
132 return "<unknown>"
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
133 else:
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
134 try:
157
e12025e46375 Use util.posixfile when reading a custom given .hgkwarchive file for Mercurial portability reasons
Franz Glasner <hg@dom66.de>
parents: 156
diff changeset
135 # this is pure Python standard functionality: no util.posixfile
150
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
136 verdata = open(os.path.join(os.path.dirname(fn),
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
137 "../VERSION"),
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
138 "r").read()
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
139 return re.search("^(.*)", verdata,).group(1)
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
140 except OSError:
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
141 return "<not found>"
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
142
f195b4704726 For each extension: provide a "getversion()" function that will be called by Mercurial to get the module version.
Franz Glasner <hg@dom66.de>
parents: 147
diff changeset
143
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
144 @command(
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
145 'kwarchive',
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
146 [
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
147 ('', 'no-decode', None, _('do not pass files through decoders')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
148 ('p', 'prefix', '', _('directory prefix for files in archive'), _('PREFIX')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
149 ('r', 'rev', '', _('revision to distribute'), _('REV')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
150 ('t', 'type', '', _('type of distribution to create'), _('TYPE')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
151 ('', 'path', 'default', _('the canonical repository to use'), _('PATH')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
152 ('', "kwconfig", '', _('an alternate pattern configuration configuration file'), _('PATTERNCONFIG')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
153 ('', "no-shorten-path", None, _("don't shorten the path urls")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
154 ('', "path-filter", "short", _("determine how the path will be printed")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
155 ('', "user-filter", "user", _("the part of the user to be printed"), _("USERFILTER"))
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
156 ] + cmdutil.subrepoopts + cmdutil.walkopts,
248
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
157 _('[OPTION]... DEST'),
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
158 inferrepo=True)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
159 def kwarchive(ui, repo, dest, **opts):
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
160 '''create an unversioned archive of a repository revision with some keywords expanded
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
161
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
162 By default, the revision used is the parent of the working
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
163 directory; use -r/--rev to specify a different revision.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
164
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
165 The archive type is automatically detected based on file
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
166 extension (to override, use -t/--type).
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
167
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
168 .. container:: verbose
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
169
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
170 Examples:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
171
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
172 - create a zip file containing the 1.0 release::
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
173
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
174 hg archive -r 1.0 project-1.0.zip
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
175
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
176 - create a tarball excluding .hg files::
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
177
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
178 hg archive project.tar.gz -X ".hg*"
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
179
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
180 Valid types are:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
181
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
182 :``files``: a directory full of files (default)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
183 :``tar``: tar archive, uncompressed
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
184 :``tbz2``: tar archive, compressed using bzip2
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
185 :``tgz``: tar archive, compressed using gzip
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
186 :``uzip``: zip archive, uncompressed
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
187 :``zip``: zip archive, compressed using deflate
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
188
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
189 The exact name of the destination archive or directory is given
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
190 using a format string; see :hg:`help export` for details.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
191
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
192 Each member added to an archive file has a directory prefix
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
193 prepended. Use -p/--prefix to specify a format string for the
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
194 prefix. The default is the basename of the archive, with suffixes
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
195 removed.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
196
41
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
197 Use --path to specify named path information from :hg:`paths` as
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
198 the canonical repository location. Use ``.`` for the current
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
199 repository root root. If no path is given then ``default`` is
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
200 assumed.
35
f29c98e54f50 Implement a "--path" option for kwarchive to select a repository to use as canonical one
Franz Glasner <hg@dom66.de>
parents: 34
diff changeset
201
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
202 Full path URLs are printed somewhat shortened by default. To use
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
203 them as-is use the --no-shorten-path option.
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
204
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
205 Allowed --user-filter values are:
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
206
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
207 :``user``: the short representation of a user name or email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
208 :``person``: the name before an email address as per RFC 5322
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
209 :``email``: the email address
81
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
210 :``full``: the complete user information w/o filtering
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
211 :``none``: an alias for ``full``
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
212
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
213 The --path-filter values detemine how the path will be printed:
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
214
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
215 :``full``: the path will be printed as is (including passwords et al.)
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
216 :``nopwd``: like ``full`` but without passwords
249
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
217 :``nouser``: like ``full`` but without user and password information
101
ec4392ae8c92 FIX: Wording in help
Franz Glasner <hg@dom66.de>
parents: 100
diff changeset
218 :``short``: shorten the path somehow: no user/password information and
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
219 only a short server name
100
eed73af1ab79 Implemented a "last" option for the "--path-filter": shorten to the last path component.
Franz Glasner <hg@dom66.de>
parents: 99
diff changeset
220 :``last``: shorten the path to the last component
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
221
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
222 Returns 0 on success.
41
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
223
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
224 '''
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
225
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
226 opts = pycompat.byteskwargs(opts)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
227 ctx = scmutil.revsingle(repo, opts.get('rev'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
228 if not ctx:
160
a959c387bf24 Better error messages
Franz Glasner <hg@dom66.de>
parents: 159
diff changeset
229 raise error.Abort(_('no Mercurial revision found: please specify a revision'))
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
230 node = ctx.node()
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
231 dest = makefilename_compat(ctx, dest)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
232 if os.path.realpath(dest) == repo.root:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
233 raise error.Abort(_('repository root cannot be destination'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
234
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
235 kind = opts.get('type') or archival.guesskind(dest) or 'files'
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
236 prefix = opts.get('prefix')
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
237
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
238 if dest == '-':
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
239 if kind == 'files':
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
240 raise error.Abort(_('cannot archive plain files to stdout'))
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
241 dest = makefileobj_compat(ctx, dest)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
242 if not prefix:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
243 prefix = os.path.basename(repo.root) + '-%h'
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
244
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
245 prefix = makefilename_compat(ctx, prefix)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
246 matchfn = scmutil.match(ctx, [], opts)
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
247
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
248 #
31
0597395e2d18 Comment: better explanation of what is monkey-patched
Franz Glasner <hg@dom66.de>
parents: 30
diff changeset
249 # Monkey patch archival's archivers classes so that an archiver's "addfile()"
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
250 # expands keywords
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
251 #
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
252 for ac in ("fileit", "tarit", "zipit",):
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
253 patch_archiver_class(
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
254 ac,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
255 make_keyword_filter(
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
256 ui,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
257 ctx,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
258 ac,
35
f29c98e54f50 Implement a "--path" option for kwarchive to select a repository to use as canonical one
Franz Glasner <hg@dom66.de>
parents: 34
diff changeset
259 archival.tidyprefix(dest, kind, prefix),
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
260 hgpath=opts.get("path"),
136
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
261 path_filter=get_checked_path_filter_option(opts),
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
262 user_filter=get_checked_user_filter_option(opts),
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
263 kwconfig=opts.get("kwconfig")))
30
1670760f695f Monkey-patch all current archivers in mercurial.archival: fileit, tarit and ziptit
Franz Glasner <hg@dom66.de>
parents: 29
diff changeset
264
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
265 archival.archive(repo, dest, node, kind, not opts.get('no_decode'),
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
266 matchfn, prefix, subrepos=opts.get('subrepos'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
267
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
268 # XXX FIXME: Should the original methods be restored here?
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
269
46
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
270 # XXX FIXME: Should we automatically amend ".hg_archival.txt" with a
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
271 # path item? But this means shat we should know the complete
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
272 # configuration ("ui.archivemeta") and it's name and some
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
273 # output match filters (see archival.archive()).
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
274
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
275
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
276 @command(
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
277 'kwprint',
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
278 [
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
279 ('r', 'rev', '', _('revision to distribute'), _('REV')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
280 ('', 'path', 'default', _('the canonical repository to use'), _('PATH')),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
281 ('', "no-shorten-path", None, _("don't shorten the path urls")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
282 ('', "path-filter", "short", _("determine how the path will be printed")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
283 ('', "user-filter", "user", _("the part of the user to be printed"), _("USERFILTER")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
284 ('', "reST", None, _("output in reST substitution definition syntax")),
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
285 ('', "no-file", None, _("don't show file-dependent keywords")),
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
286 ] + cmdutil.subrepoopts + cmdutil.walkopts,
248
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
287 _('[OPTION]...'),
436b2db75a34 cmdutil.command is deprecated: use registrar.command instead; also need always a repository for the commands: inferrepo=True
Franz Glasner <hg@dom66.de>
parents: 246
diff changeset
288 inferrepo=True)
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
289 def kwprint(ui, repo, **opts):
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
290 '''print the file-independent keywords and for an example file-dependent
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
291 keywords
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
292
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
293 By default, the revision used is the parent of the working
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
294 directory; use -r/--rev to specify a different revision.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
295
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
296 Use --path to specify named path information from :hg:`paths` as
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
297 the canonical repository location. Use ``.`` for the current
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
298 repository root root. If no path is given then ``default`` is
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
299 assumed.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
300
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
301 Full path URLs are printed somewhat shortened by default. To use
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
302 them as-is use the --no-shorten-path option.
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
303
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
304 Allowed --user-filter values are:
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
305
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
306 :``user``: the short representation of a user name or email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
307 :``person``: the name before an email address as per RFC 5322
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
308 :``email``: the email address
81
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
309 :``full``: the complete user information w/o filtering
85
01ca9e1601a7 All extensions work with Mercurial 4.4.1 also
Franz Glasner <hg@dom66.de>
parents: 84
diff changeset
310 :``none``: an alias for ``full``
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
311
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
312 The --path-filter values detemine how the path will be printed:
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
313
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
314 :``full``: the path will be printed as is (including passwords et al.)
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
315 :``nopwd``: like ``full`` but without passwords
249
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
316 :``nouser``: like ``full`` but without user and password information
108
aaf84b607154 FIX: Typo in doc string
Franz Glasner <hg@dom66.de>
parents: 105
diff changeset
317 :``short``: shorten the path somehow: no user/password information and
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
318 only a short server name
100
eed73af1ab79 Implemented a "last" option for the "--path-filter": shorten to the last path component.
Franz Glasner <hg@dom66.de>
parents: 99
diff changeset
319 :``last``: shorten the path to the last component
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
320
78
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
321 Use --reST to output the keyword in a format suitable for including
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
322 in reStructuredText (reST) documents by using it's substitution feature.
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
323 All revision keyword names have a ``VCS`` prefix.
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
324
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
325 Use --no-file to suppress the output of file-dependent keywords with an
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
326 example file.
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
327
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
328 Returns 0 on success.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
329
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
330 '''
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
331
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
332 opts = pycompat.byteskwargs(opts)
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
333 ctx = scmutil.revsingle(repo, opts.get('rev'))
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
334 if not ctx:
160
a959c387bf24 Better error messages
Franz Glasner <hg@dom66.de>
parents: 159
diff changeset
335 raise error.Abort(_('no Mercurial revision found: please specify a revision'))
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
336 node = ctx.node()
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
337
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
338 prefix = makefilename_compat(ctx, "")
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
339
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
340 keywords = make_node_keywords(
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
341 ui, ctx,
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
342 hgpath=opts.get("path"),
136
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
343 path_filter=get_checked_path_filter_option(opts),
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
344 user_filter=get_checked_user_filter_option(opts))
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
345 # make file-dependent keywords for an example file
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
346 if not opts.get("no_file"):
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
347 file_keywords = make_file_keywords(
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
348 keywords,
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
349 "dir1/dir2/test.file",
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
350 "a4dd6f4b22e11fec41158eec187630c24a43120a")
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
351 else:
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
352 file_keywords = None
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
353 _kwprint_keywords(ui, keywords, file_keywords,
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
354 opts.get("reST"),
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
355 opts.get("no_file"))
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
356 if opts.get("subrepos"):
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
357 _kwprint_subrepos(ctx, ui,
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
358 opts.get("reST"),
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
359 opts.get("no_file"),
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
360 path_filter=get_checked_path_filter_option(opts),
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
361 user_filter=get_checked_user_filter_option(opts))
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
362
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
363
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
364 def _kwprint_keywords(ui, keywords, file_keywords, rest, no_file):
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
365 """Print all the prepared keywords into the output"""
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
366 for key in sorted(keywords.keys()):
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
367 if rest:
140
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
368 if keywords[key]:
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
369 ui.write(".. |VCS%s| replace:: %s\n" % (key, keywords[key]))
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
370 else:
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
371 #
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
372 # empty replacements are not allowed:
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
373 # write a non-breaking space instead
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
374 #
02126a3ad162 FIX: for empty keyword values: write a non-breaking space in reST mode instead of a bogus empty "replace::" value
Franz Glasner <hg@dom66.de>
parents: 137
diff changeset
375 ui.write(".. |VCS%s| unicode:: 0xA0\n" % key)
78
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
376 else:
743dd4a77b4a Implemented a "--reST" option for printing reST substitution definitions from keywords
Franz Glasner <hg@dom66.de>
parents: 76
diff changeset
377 ui.write("$%s: %s $\n" % (key, keywords[key]))
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
378 if not no_file:
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
379 ui.write("\n")
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
380 for key in sorted(file_keywords.keys()):
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
381 if rest:
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
382 ui.write(".. |VCS%s| replace:: %s\n" % (key, file_keywords[key]))
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
383 else:
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
384 ui.write("$%s: %s $\n" % (key, file_keywords[key]))
291
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
385
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
386
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
387 def _kwprint_subrepos(ctx, ui, rest, no_file, path_filter, user_filter):
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
388 """For all subrepos in `ctx` do keyword expansion resursively"""
292
241b0b9eaa19 Debug output of the subrepo state also (subrepo.state())
Franz Glasner <hg@dom66.de>
parents: 291
diff changeset
389 ui.write("STATE: " + repr(subrepo.state(ctx, ui)) + "\n")
291
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
390 for subpath in sorted(ctx.substate):
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
391 subrep = ctx.workingsub(subpath)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
392 subctx = subrep._getctx()
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
393 assert subctx.repo() == subrep._repo
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
394 keywords = make_node_keywords(ui, subctx)
291
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
395 ui.write("KWD: " + repr(keywords) + "\n")
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
396 # Recursively check for other subrepos
294
2eb443e77cff Refactor: put the real keyword printing into a separate function.
Franz Glasner <hg@dom66.de>
parents: 293
diff changeset
397 _kwprint_subrepos(subctx, ui, rest, no_file, path_filter, user_filter)
291
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
398
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
399
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
400 def _test_subrepos(ctx, ui):
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
401 ui.write("STATE: " + repr(subrepo.state(ctx, ui)) + "\n")
291
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
402 for subpath in sorted(ctx.substate):
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
403 ui.write("SUBPATH: " + subpath + "\n");
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
404 subrep = ctx.workingsub(subpath)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
405 ui.write(repr(subrep) + ": subrelpath=" + subrepo.subrelpath(subrep)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
406 + " reporelpath=" + subrepo.reporelpath(subrep._repo)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
407 + '\n')
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
408 # Yes(!)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
409 assert subrepo.subrelpath(subrep) == subrepo.reporelpath(subrep._repo)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
410 assert subrepo.subrelpath(subrep).endswith(subpath)
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
411 ui.write(" " + repr(subrep._getctx()) + '\n')
31d5d77c297d Begin real keyword expansion for subrepos
Franz Glasner <hg@dom66.de>
parents: 290
diff changeset
412 _test_subrepos(subrep._getctx(), ui)
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
413
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
414
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
415 def patch_archiver_class(archivername, filter):
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
416 """Patch an archiver class and return the original unbound method"""
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
417
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
418 archiver_class = getattr(archival, archivername)
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
419 orig_addfile = getattr(archiver_class, "addfile")
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
420
287
95c207d21bbf FIX: Typo in argument: "isline" -> "islink"
Franz Glasner <hg@dom66.de>
parents: 255
diff changeset
421 def new_addfile(self, name, mode, islink, data):
95c207d21bbf FIX: Typo in argument: "isline" -> "islink"
Franz Glasner <hg@dom66.de>
parents: 255
diff changeset
422 return orig_addfile(self, name, mode, islink, filter(name, data))
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
423
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
424 setattr(archiver_class, "addfile", new_addfile)
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
425 return orig_addfile
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
426
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
427
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
428 def make_keyword_filter(ui, ctx, archive_class, prefix,
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
429 hgpath="default",
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
430 path_filter="short",
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
431 user_filter="user",
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
432 kwconfig=""):
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
433 keywords = make_node_keywords(ui, ctx,
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
434 hgpath=hgpath,
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
435 path_filter=path_filter,
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
436 user_filter=user_filter)
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
437 kwconfigdata = kwconfigname = None
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
438 if kwconfig:
157
e12025e46375 Use util.posixfile when reading a custom given .hgkwarchive file for Mercurial portability reasons
Franz Glasner <hg@dom66.de>
parents: 156
diff changeset
439 kwconfigdata = util.posixfile(kwconfig, "rb").read()
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
440 kwconfigname = kwconfig
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
441 try:
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
442 if kwconfigdata is None:
156
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
443 # use versioned .hgkwarchive
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
444 kwconfigdata = ctx[KWARCHIVE_CONFIG].data()
d92850f876a4 Use a constant to define the ".hgkwarchive" name
Franz Glasner <hg@dom66.de>
parents: 155
diff changeset
445 kwconfigname = KWARCHIVE_CONFIG
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
446 except (IOError, LookupError):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
447 def _filter(name, data):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
448 return data
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
449 else:
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
450 #
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
451 # Parse the data in ".hgkwarchive" and generate a
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
452 # Mercurial matcher
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
453 #
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
454 cfg = config.config()
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
455 cfg.parse(kwconfigname, kwconfigdata)
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
456 include = []
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
457 exclude = []
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
458 patterns = []
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
459 patterns_rcs = []
79
53c9f2f6a13e Work in reST style keywords in kwarchive
Franz Glasner <hg@dom66.de>
parents: 78
diff changeset
460 patterns_rst = []
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
461 if cfg.items("patterns"):
111
d5165f72b0f0 Can not combine styles in the [patterns] section of .hgkwarchive
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
462 for pattern, styles in cfg.items("patterns"):
d5165f72b0f0 Can not combine styles in the [patterns] section of .hgkwarchive
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
463 styles = [s.strip() for s in styles.upper().split(",")]
d5165f72b0f0 Can not combine styles in the [patterns] section of .hgkwarchive
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
464 if "YES" in styles or "INCLUDE" in styles:
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
465 include.append(pattern)
111
d5165f72b0f0 Can not combine styles in the [patterns] section of .hgkwarchive
Franz Glasner <hg@dom66.de>
parents: 110
diff changeset
466 elif "NO" in styles or "EXCLUDE" in styles:
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
467 exclude.append(pattern)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
468 else:
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
469 patterns.append(pattern)
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
470 if "REST" in styles or "RST" in styles \
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
471 or "RCS" in styles:
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
472 if "RCS" in styles:
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
473 patterns_rcs.append(pattern)
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
474 if "REST" in styles or "RST" in styles:
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
475 patterns_rst.append(pattern)
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
476 else:
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
477 # default to RCS if no keyword style is given
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
478 patterns_rcs.append(pattern)
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
479 matcher = match.match(ctx.repo().root, '', patterns=patterns,
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
480 include=include, exclude=exclude)
91
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
481 else:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
482 matcher = match.never(ctx.repo().root, '')
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
483
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
484 #
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
485 # An empty patterns_rcs does not mean that match_rcs is always
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
486 # true.
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
487 #
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
488 if not patterns_rcs:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
489 matcher_rcs = match.never(ctx.repo().root, '')
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
490 else:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
491 matcher_rcs = match.match(ctx.repo().root, '',
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
492 patterns=patterns_rcs,
118
e9c78a0bfe6a Allow multiple style keyword expansion in one file.
Franz Glasner <hg@dom66.de>
parents: 116
diff changeset
493 include=[], exclude=[])
91
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
494 #
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
495 # An empty patterns_rst does not mean that match_rst is always
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
496 # true.
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
497 #
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
498 if not patterns_rst:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
499 matcher_rst = match.never(ctx.repo().root, '')
91
36369940d31b FIX: An empty pattern list for RST style keywords does **not** mean that matching it is always true
Franz Glasner <hg@dom66.de>
parents: 88
diff changeset
500 else:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
501 matcher_rst = match.match(ctx.repo().root, '',
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
502 patterns=patterns_rst,
79
53c9f2f6a13e Work in reST style keywords in kwarchive
Franz Glasner <hg@dom66.de>
parents: 78
diff changeset
503 include=[], exclude=[])
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
504
104
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
505 #
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
506 # This is the mapping from all the (white-listed) pre-defined
126
0a6681db2772 Renamed "keyword_aliases" to "keyword_whitelist"
Franz Glasner <hg@dom66.de>
parents: 125
diff changeset
507 # keywords to the keywords to be expanded in files (which can be
0a6681db2772 Renamed "keyword_aliases" to "keyword_whitelist"
Franz Glasner <hg@dom66.de>
parents: 125
diff changeset
508 # aliases. An empty right-side keyword maps the "alias" to itself.
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
509 #
126
0a6681db2772 Renamed "keyword_aliases" to "keyword_whitelist"
Franz Glasner <hg@dom66.de>
parents: 125
diff changeset
510 keyword_whitelist = {}
133
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
511 #
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
512 # This are the substitution keywords:
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
513 # this keywords are substituted with just another plain text
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
514 # (no real templates!)
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
515 #
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
516 keyword_substitutions = {}
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
517
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
518 for alias, value in cfg.items("keywords"):
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
519 if value.startswith("replace:: "):
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
520 # allow is to be replaced: put it into the global white list
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
521 keyword_whitelist[alias] = [alias]
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
522 keyword_substitutions[alias] = value[len("replace:: "):]
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
523 else:
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
524 keyword_whitelist.setdefault(value or alias, []).append(alias)
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
525
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
526 #
104
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
527 # Get the manifest to be able to determine a file's NodeId
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
528 #
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
529 manifest = ctx.manifest()
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
530
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
531 def _filter(name, data):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
532 real_name = name
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
533 if archive_class != "fileit":
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
534 if prefix:
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
535 assert name.startswith(prefix)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
536 real_name = name[len(prefix):]
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
537 if not matcher(real_name):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
538 return data
104
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
539 try:
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
540 nodeid = node.hex(manifest[real_name])
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
541 except LookupError:
65789e3e8e3d Provide a "HGnodeid" per file keyword that expands to the NodeID of the artifact.
Franz Glasner <hg@dom66.de>
parents: 103
diff changeset
542 nodeid = None
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
543 # file specific keywords
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
544 file_keywords = make_file_keywords(keywords, real_name, nodeid)
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
545 # This prevents unwanted keyword expansion here
119
65a2e6fc8442 Explicitely named marker for RCS style expansion
Franz Glasner <hg@dom66.de>
parents: 118
diff changeset
546 _MARKER_RCS = '$'
84
4f5a047a3d72 Apply reST style expansions to files that match patterns that have a value "REST" or "RST" (mixed case allowed).
Franz Glasner <hg@dom66.de>
parents: 81
diff changeset
547 _MARKER_RST = '|'
134
aa553e987939 Priorize keyword substitutions over other keyword types
Franz Glasner <hg@dom66.de>
parents: 133
diff changeset
548 for kw, value in itertools.chain(keyword_substitutions.items(), keywords.items(), file_keywords.items()):
133
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
549 #
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
550 # an empty database means: all keywords allowed, no aliases,
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
551 # no substitutions
8d16138e00af Implemented substitution type keyword expansion
Franz Glasner <hg@dom66.de>
parents: 131
diff changeset
552 #
126
0a6681db2772 Renamed "keyword_aliases" to "keyword_whitelist"
Franz Glasner <hg@dom66.de>
parents: 125
diff changeset
553 if keyword_whitelist:
0a6681db2772 Renamed "keyword_aliases" to "keyword_whitelist"
Franz Glasner <hg@dom66.de>
parents: 125
diff changeset
554 kwds = keyword_whitelist.get(kw, [])
122
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
555 else:
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
556 kwds = [kw]
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
557 for kw in kwds:
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
558 if matcher_rcs(real_name):
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
559 filekw = "%s%s%s" % (_MARKER_RCS, kw, _MARKER_RCS)
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
560 filevalue = "%s%s: %s %s" \
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
561 % (_MARKER_RCS, kw, value, _MARKER_RCS)
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
562 data = data.replace(filekw, filevalue)
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
563 if matcher_rst(real_name):
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
564 filekw = "%sVCS%s%s" % (_MARKER_RST, kw, _MARKER_RST)
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
565 filevalue = value
e6037655967b Implemented a keyword white-list including aliases.
Franz Glasner <hg@dom66.de>
parents: 120
diff changeset
566 data = data.replace(filekw, filevalue)
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
567 return data
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
568
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
569 return _filter
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
570
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
571
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
572 def make_node_keywords(ui, ctx,
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
573 hgpath="default",
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
574 path_filter="short",
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
575 user_filter="user"):
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
576 """Make all the node-specific (i.e. file-path independent) keywords
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
577
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
578 """
158
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
579 if hgpath and hgpath != ".":
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
580 try:
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
581 if path_filter == "full":
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
582 path_uri = bytes(util.url(ui.paths[hgpath].loc))
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
583 elif path_filter == "nopwd":
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
584 path_uri = util.hidepassword(ui.paths[hgpath].loc)
249
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
585 elif path_filter == "nouser":
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
586 path_url = util.url(ui.paths[hgpath].loc)
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
587 path_url.user = None
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
588 path_url.passwd = None
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
589 path_uri = bytes(path_url)
158
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
590 elif path_filter == "short":
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
591 path_url = util.url(ui.paths[hgpath].loc)
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
592 path_url.scheme = SHORTENED_HG_SCHEMES.get(path_url.scheme,
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
593 "hg")
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
594 path_url.user = None
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
595 path_url.passwd = None
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
596 path_url.host = stripped_hostname(path_url.host)
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
597 path_url.port = None
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
598 path_uri = bytes(path_url)
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
599 elif path_filter == "last":
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
600 path_url = str(util.url(ui.paths[hgpath].loc)).split("/")
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
601 path_uri = bytes(b".../"+path_url[-1])
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
602 else:
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
603 raise error.Abort("path-filter `%s' not implemented"
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
604 % path_filter)
07e323b8d27d Refactor: make_node_keywords: path handling
Franz Glasner <hg@dom66.de>
parents: 157
diff changeset
605 except LookupError:
160
a959c387bf24 Better error messages
Franz Glasner <hg@dom66.de>
parents: 159
diff changeset
606 raise error.Abort(_("remote repository named `%s' not found") % hgpath)
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
607 else:
293
75070825d111 - make_node_keywords() and make_keyword_filter() do not need a "repo" argument.
Franz Glasner <hg@dom66.de>
parents: 292
diff changeset
608 path_uri = ctx.repo().root
159
d313b33c9c06 Implement the "last" path-filter for the local repo "." also
Franz Glasner <hg@dom66.de>
parents: 158
diff changeset
609 if path_filter == "last":
d313b33c9c06 Implement the "last" path-filter for the local repo "." also
Franz Glasner <hg@dom66.de>
parents: 158
diff changeset
610 m = max(path_uri.rfind(b"/"), path_uri.rfind(b"\\"))
d313b33c9c06 Implement the "last" path-filter for the local repo "." also
Franz Glasner <hg@dom66.de>
parents: 158
diff changeset
611 if m >= 0:
d313b33c9c06 Implement the "last" path-filter for the local repo "." also
Franz Glasner <hg@dom66.de>
parents: 158
diff changeset
612 path_uri = b".../" + path_uri[m+1:]
80
f772a6cc2f67 Make a plain Windows UNC path into a file: URL for HGpath and friends.
Franz Glasner <hg@dom66.de>
parents: 79
diff changeset
613 if path_uri.startswith(b"\\\\"):
92
e1dc7aa60cd4 Check whether the path is a path with Windows drive letters also
Franz Glasner <hg@dom66.de>
parents: 91
diff changeset
614 # Make an URL from a Windows UNC path
e1dc7aa60cd4 Check whether the path is a path with Windows drive letters also
Franz Glasner <hg@dom66.de>
parents: 91
diff changeset
615 path_uri = b"file:///" + path_uri.replace(b'\\', b'/')
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
616 elif len(path_uri) >= 2 and (b'A' <= path_uri[0].upper() <= b'Z') \
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
617 and path_uri[1] == b':':
92
e1dc7aa60cd4 Check whether the path is a path with Windows drive letters also
Franz Glasner <hg@dom66.de>
parents: 91
diff changeset
618 # make an URL from a Windows path with drive letter
80
f772a6cc2f67 Make a plain Windows UNC path into a file: URL for HGpath and friends.
Franz Glasner <hg@dom66.de>
parents: 79
diff changeset
619 path_uri = b"file:///" + path_uri.replace(b'\\', b'/')
96
6ecb3909f95e Make absolute POSIX paths always start with "file://" -- a path should always have the form of an URI
Franz Glasner <hg@dom66.de>
parents: 93
diff changeset
620 elif path_uri.startswith(b'/'):
6ecb3909f95e Make absolute POSIX paths always start with "file://" -- a path should always have the form of an URI
Franz Glasner <hg@dom66.de>
parents: 93
diff changeset
621 # an absolute POSIX path
6ecb3909f95e Make absolute POSIX paths always start with "file://" -- a path should always have the form of an URI
Franz Glasner <hg@dom66.de>
parents: 93
diff changeset
622 path_uri = b"file://" + path_uri
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
623 keywords = {
131
91077014c7b7 Added Mercurial specific keywords "HGbranch" and "HGbookmarks"
Franz Glasner <hg@dom66.de>
parents: 130
diff changeset
624 "HGpath": path_uri, # XXX FIXME: Should Archive an alias of this
91077014c7b7 Added Mercurial specific keywords "HGbranch" and "HGbookmarks"
Franz Glasner <hg@dom66.de>
parents: 130
diff changeset
625 "HGbranch": ctx.branch(),
143
717f326181b0 Add "HGphase" and "HGtags" to the list of expanded Mercurial-specific keywords
Franz Glasner <hg@dom66.de>
parents: 140
diff changeset
626 "HGtags": " ".join([tag for tag in ctx.tags() if tag != "tip"]),
154
f287e23cb3ad Don't print the leading '*' characters of active bookmarks in keyword expansion
Franz Glasner <hg@dom66.de>
parents: 150
diff changeset
627 "HGbookmarks": " ".join([bm if not bm.startswith('*') else bm[1:]
f287e23cb3ad Don't print the leading '*' characters of active bookmarks in keyword expansion
Franz Glasner <hg@dom66.de>
parents: 150
diff changeset
628 for bm in ctx.bookmarks() if bm != "@"]),
144
2a59edc0a44a Replace "HGphase" by the more standard "State" keyword.
Franz Glasner <hg@dom66.de>
parents: 143
diff changeset
629 "State": ctx.phasestr(),
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
630 "HGrevision": ctx.hex(),
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
631 "Revision": templatefilters.short(ctx.hex()),
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
632 "Date": templatefilters.isodatesec(ctx.date()),
115
06a60e2a9887 Added "JustDate" (from Visual Source Safe and Surround SCM) as date only keyword
Franz Glasner <hg@dom66.de>
parents: 114
diff changeset
633 "JustDate": templatefilters.shortdate(ctx.date()),
06a60e2a9887 Added "JustDate" (from Visual Source Safe and Surround SCM) as date only keyword
Franz Glasner <hg@dom66.de>
parents: 114
diff changeset
634 # compatibility alias for `JustDate'
88
a40cf98f7f8d Make an "HGshortdate" keyword with the date only (no time)
Franz Glasner <hg@dom66.de>
parents: 87
diff changeset
635 "HGshortdate": templatefilters.shortdate(ctx.date()),
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
636 }
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
637 if user_filter == "user":
69
d0a1521cb164 The "user" filter splits at a "." character - the "emailuser" filter does not: this is what we want as "user" filter
Franz Glasner <hg@dom66.de>
parents: 66
diff changeset
638 keywords["Author"] = templatefilters.emailuser(ctx.user())
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
639 elif user_filter == "person":
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
640 keywords["Author"] = templatefilters.utf8(
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
641 templatefilters.person(ctx.user()).replace(' ', '+'))
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
642 elif user_filter == "email":
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
643 keywords["Author"] = templatefilters.email(ctx.user())
81
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
644 elif user_filter in ("full", "none",):
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
645 #
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
646 # "none" is retained for compatibility reasons and now an
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
647 # alias for "full".
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
648 # But make it **one** word because that is meant in the RCS spec.
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
649 #
72
7484b3254940 Added a new "filter" for $Author$: filter nothing and print the complete Mercurial user information as one word
Franz Glasner <hg@dom66.de>
parents: 69
diff changeset
650 keywords["Author"] = templatefilters.utf8(ctx.user().replace(' ', '+'))
81
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
651 else:
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
652 raise error.Abort(_("unknown user filter"))
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
653
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
654 return keywords
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
655
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
656
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
657 def make_file_keywords(keywords, real_name, nodeid):
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
658 return {
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
659 "HGsource": keywords["HGpath"] + '/' + real_name,
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
660 "Source": real_name,
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
661 "File": templatefilters.basename(real_name),
144
2a59edc0a44a Replace "HGphase" by the more standard "State" keyword.
Franz Glasner <hg@dom66.de>
parents: 143
diff changeset
662 "Header": "%s %s %s %s %s" % (real_name, keywords["Revision"], keywords["Date"], keywords["Author"], keywords["State"]),
2a59edc0a44a Replace "HGphase" by the more standard "State" keyword.
Franz Glasner <hg@dom66.de>
parents: 143
diff changeset
663 "HGid": "%s %s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["Revision"], keywords["Date"], keywords["Author"], keywords["State"]),
2a59edc0a44a Replace "HGphase" by the more standard "State" keyword.
Franz Glasner <hg@dom66.de>
parents: 143
diff changeset
664 "HGheader": "%s %s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["HGrevision"], keywords["Date"], keywords["Author"], keywords["State"]),
2a59edc0a44a Replace "HGphase" by the more standard "State" keyword.
Franz Glasner <hg@dom66.de>
parents: 143
diff changeset
665 "Id": "%s %s %s %s %s" % (templatefilters.basename(real_name), keywords["Revision"], keywords["Date"], keywords["Author"], keywords["State"]),
109
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
666 "HGnodeid": nodeid or "",
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
667 }
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
668
be4811239acf kwprint: print example file-dependent keywords also.
Franz Glasner <hg@dom66.de>
parents: 108
diff changeset
669
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
670 def stripped_hostname(hostname):
56
333f98d045ab FIX: Remove the port information from a cleaned path url also
Franz Glasner <hg@dom66.de>
parents: 52
diff changeset
671 """Return `hostname` without any domain port information"""
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
672 if not hostname:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
673 return hostname
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
674 idx = hostname.find('.')
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
675 if idx < 0:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
676 return hostname
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
677 return hostname[:idx]
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
678
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
679
136
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
680 def get_checked_user_filter_option(opts):
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
681 uf = opts.get("user_filter")
81
e02aceb91a9b Make "full" a user filter and "none" an alias to "full"
Franz Glasner <hg@dom66.de>
parents: 80
diff changeset
682 # "none" is retained for compatibility reasons and now an alias for "full"
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
683 if uf not in ("person", "user", "email", "full", "none"):
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
684 raise error.Abort(
160
a959c387bf24 Better error messages
Franz Glasner <hg@dom66.de>
parents: 159
diff changeset
685 _("user filter must be any of `user', `person', `email' or `none'"))
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
686 return uf
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
687
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
688
136
f470702886b4 Renamed some internal functions to provide a more descriptive name
Franz Glasner <hg@dom66.de>
parents: 134
diff changeset
689 def get_checked_path_filter_option(opts):
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
690 pf = opts.get("path_filter")
249
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
691 if pf not in ("full", "nopwd", "nouser", "short", "last"):
114
a51822141ccf Style: handled some more flake8 warnings: consistent command declaration list formatting
Franz Glasner <hg@dom66.de>
parents: 112
diff changeset
692 raise error.Abort(
249
e97f6f6ed7c5 Implement a "nouser" option for the path-filter: like no-pwd but without user information also
Franz Glasner <hg@dom66.de>
parents: 248
diff changeset
693 _("path filter must be any of `full', `nopwd', `nouser`, `short' or `last'"))
93
fa84debfb50e Replace "no-shorten-url" by "path-filter"
Franz Glasner <hg@dom66.de>
parents: 92
diff changeset
694 return pf
103
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
695
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
696
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
697 if "ctx" in inspect.getargspec(cmdutil.makefilename).args:
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
698
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
699 # Mercurial >= 4.6
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
700
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
701 makefilename_compat = cmdutil.makefilename
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
702 makefileobj_compat = cmdutil.makefileobj
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
703
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
704 else:
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
705
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
706 # Mercurial < 4.6
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
707
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
708 def makefilename_compat(ctx, pat, **props):
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
709 return cmdutil.makefilename(ctx.repo(), pat, ctx.node(), **props)
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
710
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
711 def makefileobj_compat(ctx, pat, **props):
d6e594644778 Make kwarchive work on Mercurial 4.6+ also: the signature of cmdutil.makefileXXX() have changed
Franz Glasner <hg@dom66.de>
parents: 101
diff changeset
712 return cmdutil.makefileobj(ctx.repo(), pat, ctx.node(), **props)