annotate hgext/keyword.py @ 52208:75bc7557e49f stable

ci: use extends instead of <<: *x The old form is a yaml construct that make it hard to share variable definition. The "extends:" key is a gitlab specific that preserve the variable definition and just add the new ones. This will help us to reduce duplication. This has the effect of fixing some of variants definition we though we set while we did actually not. Most notably, the "rust" variant for 3.12 and 3.13 seems fully broken in the CI (possibly because some rust-cpython version issue?). This changeset only reveal such breackage and does not introduce them.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 08 Nov 2024 14:35:57 +0100
parents 8b7123c8947b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
1 # keyword.py - $Keyword$ expansion for Mercurial
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
2 #
23723
fd62b3e750af keyword: update copyright year
Christian Ebert <blacktrash@gmx.net>
parents: 23722
diff changeset
3 # Copyright 2007-2015 Christian Ebert <blacktrash@gmx.net>
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8209
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10117
diff changeset
6 # GNU General Public License version 2 or any later version.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
7 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
8 # $Id$
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
9 #
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17057
diff changeset
10 # Keyword expansion hack against the grain of a Distributed SCM
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
11 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
12 # There are many good reasons why this is not needed in a distributed
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
13 # SCM, still it may be useful in very small projects based on single
7993
b83a11536fc6 keyword: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7853
diff changeset
14 # files (like LaTeX packages), that are mostly addressed to an
b83a11536fc6 keyword: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7853
diff changeset
15 # audience not running a version control system.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
16 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
17 # For in-depth discussion refer to
26421
4b0fc75f9403 urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents: 25186
diff changeset
18 # <https://mercurial-scm.org/wiki/KeywordPlan>.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
19 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
20 # Keyword expansion is based on Mercurial's changeset template mappings.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
21 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
22 # Binary files are not touched.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
23 #
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
24 # Files to act upon/ignore are specified in the [keyword] section.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
25 # Customized keyword template mappings in the [keywordmaps] section.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
26 #
29969
862ab1cdb218 keyword: use single quotes in use warning
timeless <timeless@mozdev.org>
parents: 29841
diff changeset
27 # Run 'hg help keyword' and 'hg kwdemo' to get info on configuration.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
28
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8866
diff changeset
29 '''expand keywords in tracked files
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
30
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
31 This extension expands RCS/CVS-like or self-customized $Keywords$ in
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
32 tracked text files selected by your configuration.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
33
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
34 Keywords are only expanded in local repositories and not stored in the
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
35 change history. The mechanism can be regarded as a convenience for the
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
36 current user or for archive distribution.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
37
12203
0f6164806283 keyword: explain file-wise expansion in help
Christian Ebert <blacktrash@gmx.net>
parents: 11678
diff changeset
38 Keywords expand to the changeset data pertaining to the latest change
0f6164806283 keyword: explain file-wise expansion in help
Christian Ebert <blacktrash@gmx.net>
parents: 11678
diff changeset
39 relative to the working directory parent of each file.
0f6164806283 keyword: explain file-wise expansion in help
Christian Ebert <blacktrash@gmx.net>
parents: 11678
diff changeset
40
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
41 Configuration is done in the [keyword], [keywordset] and [keywordmaps]
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
42 sections of hgrc files.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
43
9157
9261667e9b82 commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents: 9106
diff changeset
44 Example::
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
45
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
46 [keyword]
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
47 # expand keywords in every python file except those matching "x*"
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
48 **.py =
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
49 x* = ignore
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
50
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
51 [keywordset]
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
52 # prefer svn- over cvs-like default keywordmaps
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
53 svn = True
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
54
12390
aff4afdcfd2b Use more note admonitions in help texts
Christian Ebert <blacktrash@gmx.net>
parents: 12207
diff changeset
55 .. note::
19997
de16c673455b documentation: add an extra newline after note directive
Simon Heimberg <simohe@besonet.ch>
parents: 18825
diff changeset
56
12390
aff4afdcfd2b Use more note admonitions in help texts
Christian Ebert <blacktrash@gmx.net>
parents: 12207
diff changeset
57 The more specific you are in your filename patterns the less you
aff4afdcfd2b Use more note admonitions in help texts
Christian Ebert <blacktrash@gmx.net>
parents: 12207
diff changeset
58 lose speed in huge repositories.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
59
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
60 For [keywordmaps] template mapping and expansion demonstration and
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10967
diff changeset
61 control run :hg:`kwdemo`. See :hg:`help templates` for a list of
9307
2715506d54e4 keyword: reference templating help, add utcdate filter example
Christian Ebert <blacktrash@gmx.net>
parents: 9305
diff changeset
62 available templates and filters.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
63
13885
5d115ea4030b keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13634
diff changeset
64 Three additional date template filters are provided:
11213
3d61813a300e keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents: 11193
diff changeset
65
13885
5d115ea4030b keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13634
diff changeset
66 :``utcdate``: "2006/09/18 15:13:13"
5d115ea4030b keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13634
diff changeset
67 :``svnutcdate``: "2006-09-18 15:13:13Z"
5d115ea4030b keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13634
diff changeset
68 :``svnisodate``: "2006-09-18 08:13:13 -700 (Mon, 18 Sep 2006)"
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
69
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10967
diff changeset
70 The default template mappings (view with :hg:`kwdemo -d`) can be
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10967
diff changeset
71 replaced with customized keywords and templates. Again, run
13025
99210fb3bc0a keyword: s/config/configuration/ in help
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
72 :hg:`kwdemo` to control the results of your configuration changes.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
73
13270
1e0d631b843b keyword: update documentation for kwshrink
Christian Ebert <blacktrash@gmx.net>
parents: 13079
diff changeset
74 Before changing/disabling active keywords, you must run :hg:`kwshrink`
1e0d631b843b keyword: update documentation for kwshrink
Christian Ebert <blacktrash@gmx.net>
parents: 13079
diff changeset
75 to avoid storing expanded keywords in the change history.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
76
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
77 To force expansion after enabling it, or a configuration change, run
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10967
diff changeset
78 :hg:`kwexpand`.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
79
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
80 Expansions spanning more than one line and incremental expansions,
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
81 like CVS' $Log$, are not supported. A keyword template map "Log =
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
82 {desc}" expands to the first line of the changeset description.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
83 '''
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
84
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
85
51863
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51703
diff changeset
86 from __future__ import annotations
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51703
diff changeset
87
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
88 import os
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
89 import re
33067
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
90 import weakref
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
91
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 29055
diff changeset
92 from mercurial.i18n import _
6072
e521ec1ad985 keyword: no expansion in web diffs
Christian Ebert <blacktrash@gmx.net>
parents: 6071
diff changeset
93 from mercurial.hgweb import webcommands
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
94
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
95 from mercurial import (
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
96 cmdutil,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
97 context,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
98 dispatch,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
99 error,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
100 extensions,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
101 filelog,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
102 localrepo,
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35001
diff changeset
103 logcmdutil,
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
104 match,
52060
8b7123c8947b update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents: 51863
diff changeset
105 merge,
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
106 patch,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
107 pathutil,
35001
3fbc30f7b9f0 py3: handle keyword arguments in hgext/keyword.py
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34500
diff changeset
108 pycompat,
28694
9a6fa1d93bc8 keyword: use templatefilter to mark a function as template filter
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28458
diff changeset
109 registrar,
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
110 scmutil,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
111 templatefilters,
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
112 templateutil,
28321
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
113 util,
a7b453b47726 keyword: use absolute_import
Christian Ebert <blacktrash@gmx.net>
parents: 27819
diff changeset
114 )
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
115 from mercurial.utils import (
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
116 dateutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
117 stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
118 )
48383
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
119 from mercurial.dirstateutils import timestamp
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
120
14300
1b8e421d8e42 keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14168
diff changeset
121 cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31331
diff changeset
122 command = registrar.command(cmdtable)
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29634
diff changeset
123 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
124 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
125 # be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
126 # leave the attribute unspecified.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
127 testedwith = b'ships-with-hg-core'
14300
1b8e421d8e42 keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents: 14168
diff changeset
128
6024
3121f0feefb4 keyword: nokwcommands, restricted string variables at top level
Christian Ebert <blacktrash@gmx.net>
parents: 6023
diff changeset
129 # hg commands that do not act on keywords
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
130 nokwcommands = (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
131 b'add addremove annotate bundle export grep incoming init log'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
132 b' outgoing push tip verify convert email glog'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
133 )
6024
3121f0feefb4 keyword: nokwcommands, restricted string variables at top level
Christian Ebert <blacktrash@gmx.net>
parents: 6023
diff changeset
134
33065
0afdc1a4f925 keyword: make comparison webcommand suppress keyword expansion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33064
diff changeset
135 # webcommands that do not act on keywords
50784
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
136 nokwwebcommands = 'annotate changeset rev filediff diff comparison'
33065
0afdc1a4f925 keyword: make comparison webcommand suppress keyword expansion
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33064
diff changeset
137
5961
ed4d55c2366f keyword: detect restricted commands thru variable
Christian Ebert <blacktrash@gmx.net>
parents: 5946
diff changeset
138 # hg commands that trigger expansion only when writing to working dir,
ed4d55c2366f keyword: detect restricted commands thru variable
Christian Ebert <blacktrash@gmx.net>
parents: 5946
diff changeset
139 # not when reading filelog, and unexpand when reading from working dir
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
140 restricted = (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
141 b'merge kwexpand kwshrink record qrecord resolve transplant'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
142 b' unshelve rebase graft backout histedit fetch'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
143 )
5961
ed4d55c2366f keyword: detect restricted commands thru variable
Christian Ebert <blacktrash@gmx.net>
parents: 5946
diff changeset
144
11168
6d0d945f9e52 keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents: 11096
diff changeset
145 # names of extensions using dorecord
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
146 recordextensions = b'record'
11045
eb67196d20fa keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents: 11044
diff changeset
147
13078
69405131c968 keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 13072
diff changeset
148 colortable = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
149 b'kwfiles.enabled': b'green bold',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
150 b'kwfiles.deleted': b'cyan bold underline',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
151 b'kwfiles.enabledunknown': b'green',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
152 b'kwfiles.ignored': b'bold',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
153 b'kwfiles.ignoredunknown': b'none',
13078
69405131c968 keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 13072
diff changeset
154 }
69405131c968 keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 13072
diff changeset
155
28694
9a6fa1d93bc8 keyword: use templatefilter to mark a function as template filter
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28458
diff changeset
156 templatefilter = registrar.templatefilter()
9a6fa1d93bc8 keyword: use templatefilter to mark a function as template filter
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28458
diff changeset
157
34500
6c705bf6a8ff configitems: register the 'keywordset.svn' config
Boris Feld <boris.feld@octobus.net>
parents: 34086
diff changeset
158 configtable = {}
6c705bf6a8ff configitems: register the 'keywordset.svn' config
Boris Feld <boris.feld@octobus.net>
parents: 34086
diff changeset
159 configitem = registrar.configitem(configtable)
6c705bf6a8ff configitems: register the 'keywordset.svn' config
Boris Feld <boris.feld@octobus.net>
parents: 34086
diff changeset
160
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
161 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
162 b'keywordset',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
163 b'svn',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
164 default=False,
34500
6c705bf6a8ff configitems: register the 'keywordset.svn' config
Boris Feld <boris.feld@octobus.net>
parents: 34086
diff changeset
165 )
51703
ca7bde5dbafb black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents: 51700
diff changeset
166
ca7bde5dbafb black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents: 51700
diff changeset
167
11213
3d61813a300e keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents: 11193
diff changeset
168 # date like in cvs' $Date
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
169 @templatefilter(b'utcdate', intype=templateutil.date)
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
170 def utcdate(date):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
171 """Date. Returns a UTC-date in this format: "2009/08/18 11:00:13"."""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
172 dateformat = b'%Y/%m/%d %H:%M:%S'
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
173 return dateutil.datestr((date[0], 0), dateformat)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
174
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
175
11213
3d61813a300e keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents: 11193
diff changeset
176 # date like in svn's $Date
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
177 @templatefilter(b'svnisodate', intype=templateutil.date)
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
178 def svnisodate(date):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
179 """Date. Returns a date in this format: "2009-08-18 13:00:13
13633
20d13244f192 keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents: 13592
diff changeset
180 +0200 (Tue, 18 Aug 2009)".
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
181 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
182 return dateutil.datestr(date, b'%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
183
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
184
11213
3d61813a300e keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents: 11193
diff changeset
185 # date like in svn's $Id
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
186 @templatefilter(b'svnutcdate', intype=templateutil.date)
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
187 def svnutcdate(date):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
188 """Date. Returns a UTC-date in this format: "2009-08-18
13633
20d13244f192 keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents: 13592
diff changeset
189 11:00:13Z".
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
190 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
191 dateformat = b'%Y-%m-%d %H:%M:%SZ'
37228
a0b17f744cbc keyword: declare input type of date filters as date
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
192 return dateutil.datestr((date[0], 0), dateformat)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
193
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
194
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
195 # make keyword tools accessible
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
196 kwtools = {b'hgcmd': b''}
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
197
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
198
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
199 def _defaultkwmaps(ui):
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
200 '''Returns default keywordmaps according to keywordset configuration.'''
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
201 templates = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
202 b'Revision': b'{node|short}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
203 b'Author': b'{author|user}',
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
204 }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
205 kwsets = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
206 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
207 b'Date': b'{date|utcdate}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 b'RCSfile': b'{file|basename},v',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
209 b'RCSFile': b'{file|basename},v', # kept for backwards compatibility
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
210 # with hg-keyword
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
211 b'Source': b'{root}/{file},v',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
212 b'Id': b'{file|basename},v {node|short} {date|utcdate} {author|user}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
213 b'Header': b'{root}/{file},v {node|short} {date|utcdate} {author|user}',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
214 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
215 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
216 b'Date': b'{date|svnisodate}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
217 b'Id': b'{file|basename},v {node|short} {date|svnutcdate} {author|user}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
218 b'LastChangedRevision': b'{node|short}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
219 b'LastChangedBy': b'{author|user}',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
220 b'LastChangedDate': b'{date|svnisodate}',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
221 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
222 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
223 templates.update(kwsets[ui.configbool(b'keywordset', b'svn')])
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
224 return templates
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
225
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
226
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
227 def _shrinktext(text, subfunc):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
228 """Helper for keyword expansion removal in text.
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
229 Depending on subfunc also returns number of substitutions."""
39431
5bf99c27a7b6 py3: make regexes in hgext/keyword.py bytes
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39369
diff changeset
230 return subfunc(br'$\1$', text)
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
231
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
232
12723
eaa09d25e7c6 keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents: 12709
diff changeset
233 def _preselect(wstatus, changed):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
234 """Retrieves modified and added files from a working directory state
12723
eaa09d25e7c6 keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents: 12709
diff changeset
235 and returns the subset of each contained in given changed files
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
236 retrieved from a change context."""
22918
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
237 modified = [f for f in wstatus.modified if f in changed]
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
238 added = [f for f in wstatus.added if f in changed]
12723
eaa09d25e7c6 keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents: 12709
diff changeset
239 return modified, added
eaa09d25e7c6 keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents: 12709
diff changeset
240
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
241
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
242 class kwtemplater:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
243 """
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
244 Sets up keyword templates, corresponding keyword regex, and
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
245 provides keyword substitution functions.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
246 """
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
247
11678
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
248 def __init__(self, ui, repo, inc, exc):
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
249 self.ui = ui
33067
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
250 self._repo = weakref.ref(repo)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
251 self.match = match.match(repo.root, b'', [], inc, exc)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
252 self.restrict = kwtools[b'hgcmd'] in restricted.split()
16809
6b704fa2bea1 keyword: rename kwt.record attribute to kwt.postcommit
Christian Ebert <blacktrash@gmx.net>
parents: 16743
diff changeset
253 self.postcommit = False
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
254
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
255 kwmaps = self.ui.configitems(b'keywordmaps')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
256 if kwmaps: # override default templates
24987
fd7287f0b43c templater: remove noop calls of parsestring(s, quoted=False) (API)
Yuya Nishihara <yuya@tcha.org>
parents: 24905
diff changeset
257 self.templates = dict(kwmaps)
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
258 else:
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
259 self.templates = _defaultkwmaps(self.ui)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
260
33067
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
261 @property
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
262 def repo(self):
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
263 return self._repo()
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
264
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
265 @util.propertycache
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
266 def escape(self):
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
267 '''Returns bar-separated and escaped keywords.'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
268 return b'|'.join(map(stringutil.reescape, self.templates.keys()))
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
269
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
270 @util.propertycache
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
271 def rekw(self):
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
272 '''Returns regex for unexpanded keywords.'''
39431
5bf99c27a7b6 py3: make regexes in hgext/keyword.py bytes
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39369
diff changeset
273 return re.compile(br'\$(%s)\$' % self.escape)
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
274
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
275 @util.propertycache
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
276 def rekwexp(self):
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
277 '''Returns regex for expanded keywords.'''
39431
5bf99c27a7b6 py3: make regexes in hgext/keyword.py bytes
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39369
diff changeset
278 return re.compile(br'\$(%s): [^$\n\r]*? \$' % self.escape)
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
279
7375
9f1370130a45 keyword: be more efficient about ctx usage
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7369
diff changeset
280 def substitute(self, data, path, ctx, subfunc):
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
281 '''Replaces keywords in data with expanded template.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
282
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
283 def kwsub(mobj):
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
284 kw = mobj.group(1)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
285 ct = logcmdutil.maketemplater(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
286 self.ui, self.repo, self.templates[kw]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
287 )
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
288 self.ui.pushbuffer()
10894
26cf11f9f322 keyword: make the templater a local variable
Christian Ebert <blacktrash@gmx.net>
parents: 10844
diff changeset
289 ct.show(ctx, root=self.repo.root, file=path)
6023
ee7df90d1daa keyword: split line continuation in 2 steps (style)
Christian Ebert <blacktrash@gmx.net>
parents: 6022
diff changeset
290 ekw = templatefilters.firstline(self.ui.popbuffer())
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
291 return b'$%s: %s $' % (kw, ekw)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
292
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
293 return subfunc(kwsub, data)
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
294
12920
1fab4970354e keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
295 def linkctx(self, path, fileid):
1fab4970354e keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
296 '''Similar to filelog.linkrev, but returns a changectx.'''
1fab4970354e keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
297 return self.repo.filectx(path, fileid=fileid).changectx()
1fab4970354e keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
298
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
299 def expand(self, path, node, data):
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
300 '''Returns data with keywords expanded.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
301 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
302 not self.restrict
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
303 and self.match(path)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
304 and not stringutil.binary(data)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
305 ):
12920
1fab4970354e keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 12844
diff changeset
306 ctx = self.linkctx(path, node)
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
307 return self.substitute(data, path, ctx, self.rekw.sub)
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
308 return data
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
309
12627
7d9162892899 keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents: 12626
diff changeset
310 def iskwfile(self, cand, ctx):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
311 """Returns subset of candidates which are configured for keyword
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
312 expansion but are not symbolic links."""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
313 return [f for f in cand if self.match(f) and b'l' not in ctx.flags(f)]
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
314
12685
a247751652ba keyword: enforce subn method via boolean switch
Christian Ebert <blacktrash@gmx.net>
parents: 12684
diff changeset
315 def overwrite(self, ctx, candidates, lookup, expand, rekw=False):
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
316 '''Overwrites selected files expanding/shrinking keywords.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
317 if self.restrict or lookup or self.postcommit: # exclude kw_copy
12627
7d9162892899 keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents: 12626
diff changeset
318 candidates = self.iskwfile(candidates, ctx)
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
319 if not candidates:
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
320 return
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
321 kwcmd = self.restrict and lookup # kwexpand/kwshrink
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
322 if self.restrict or expand and lookup:
11350
5ea28187707e keyword: postpone manifest calculation in kwtemplater.overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 11321
diff changeset
323 mf = ctx.manifest()
15030
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
324 if self.restrict or rekw:
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
325 re_kw = self.rekw
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
326 else:
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
327 re_kw = self.rekwexp
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
328 if expand:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
329 msg = _(b'overwriting %s expanding keywords\n')
15030
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
330 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
331 msg = _(b'overwriting %s shrinking keywords\n')
48383
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
332 wctx = self.repo[None]
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
333 for f in candidates:
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
334 if self.restrict:
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
335 data = self.repo.file(f).read(mf[f])
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
336 else:
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
337 data = self.repo.wread(f)
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
338 if stringutil.binary(data):
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
339 continue
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
340 if expand:
23622
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
341 parents = ctx.parents()
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
342 if lookup:
15083
6e069366e27c keyword: use wopener(..., atomictemp=True) to overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 15072
diff changeset
343 ctx = self.linkctx(f, mf[f])
23622
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
344 elif self.restrict and len(parents) > 1:
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
345 # merge commit
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
346 # in case of conflict f is in modified state during
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
347 # merge, even if f does not differ from f in parent
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
348 for p in parents:
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
349 if f in p and not p[f].cmp(ctx[f]):
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
350 ctx = p[f].changectx()
cb9d845406e5 keyword: handle resolve to either parent
Christian Ebert <blacktrash@gmx.net>
parents: 23079
diff changeset
351 break
15083
6e069366e27c keyword: use wopener(..., atomictemp=True) to overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 15072
diff changeset
352 data, found = self.substitute(data, f, ctx, re_kw.subn)
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
353 elif self.restrict:
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
354 found = re_kw.search(data)
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
355 else:
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
356 data, found = _shrinktext(data, re_kw.subn)
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
357 if found:
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
358 self.ui.note(msg % f)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
359 fp = self.repo.wvfs(f, b"wb", atomictemp=True)
15083
6e069366e27c keyword: use wopener(..., atomictemp=True) to overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 15072
diff changeset
360 fp.write(data)
6e069366e27c keyword: use wopener(..., atomictemp=True) to overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 15072
diff changeset
361 fp.close()
12844
a1b49b9a0328 keyword: fix regressions introduced in d87f3ff904ba
Christian Ebert <blacktrash@gmx.net>
parents: 12732
diff changeset
362 if kwcmd:
48383
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
363 s = wctx[f].lstat()
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
364 mode = s.st_mode
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
365 size = s.st_size
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
366 mtime = timestamp.mtime_of(s)
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
367 cache_data = (mode, size, mtime)
4237be881bb6 status: adapt the "keyword" extensions to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47736
diff changeset
368 self.repo.dirstate.set_clean(f, cache_data)
16809
6b704fa2bea1 keyword: rename kwt.record attribute to kwt.postcommit
Christian Ebert <blacktrash@gmx.net>
parents: 16743
diff changeset
369 elif self.postcommit:
47736
b9086ec4d28b keyword: use `update_file_p1` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47711
diff changeset
370 self.repo.dirstate.update_file_p1(f, p1_tracked=True)
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
371
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
372 def shrink(self, fname, text):
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
373 '''Returns text with all keyword substitutions removed.'''
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
374 if self.match(fname) and not stringutil.binary(text):
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
375 return _shrinktext(text, self.rekwexp.sub)
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
376 return text
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
377
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
378 def shrinklines(self, fname, lines):
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
379 '''Returns lines with keyword substitutions removed.'''
8638
c6483eec6092 keyword: rename matcher() to match() mimicking changes in main
Christian Ebert <blacktrash@gmx.net>
parents: 8567
diff changeset
380 if self.match(fname):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
381 text = b''.join(lines)
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36887
diff changeset
382 if not stringutil.binary(text):
12926
edbe32efc89f keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents: 12920
diff changeset
383 return _shrinktext(text, self.rekwexp.sub).splitlines(True)
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
384 return lines
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
385
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
386 def wread(self, fname, data):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
387 """If in restricted mode returns data read from wdir with
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
388 keyword substitutions removed."""
15030
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
389 if self.restrict:
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
390 return self.shrink(fname, data)
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
391 return data
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
392
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
393
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
394 class kwfilelog(filelog.filelog):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
395 """
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
396 Subclass of filelog to hook into its read, add, cmp methods.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
397 Keywords are "stored" unexpanded, and processed on reading.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
398 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
399
6503
4572beeacff1 keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents: 6502
diff changeset
400 def __init__(self, opener, kwt, path):
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
401 super(kwfilelog, self).__init__(opener, path)
6503
4572beeacff1 keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents: 6502
diff changeset
402 self.kwt = kwt
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
403 self.path = path
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
404
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
405 def read(self, node):
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
406 '''Expands keywords when reading filelog.'''
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
407 data = super(kwfilelog, self).read(node)
12628
799cec3ba3b1 keyword: disable expansion in kwfilelog.read() if file renamed in node
Christian Ebert <blacktrash@gmx.net>
parents: 12627
diff changeset
408 if self.renamed(node):
799cec3ba3b1 keyword: disable expansion in kwfilelog.read() if file renamed in node
Christian Ebert <blacktrash@gmx.net>
parents: 12627
diff changeset
409 return data
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
410 return self.kwt.expand(self.path, node, data)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
411
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
412 def add(self, text, meta, tr, link, p1=None, p2=None):
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
413 '''Removes keyword substitutions when adding to filelog.'''
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
414 text = self.kwt.shrink(self.path, text)
6504
1be53f931c9c keyword: compact setting of optional arguments
Christian Ebert <blacktrash@gmx.net>
parents: 6503
diff changeset
415 return super(kwfilelog, self).add(text, meta, tr, link, p1, p2)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
416
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
417 def cmp(self, node, text):
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
418 '''Removes keyword substitutions for comparison.'''
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
419 text = self.kwt.shrink(self.path, text)
12628
799cec3ba3b1 keyword: disable expansion in kwfilelog.read() if file renamed in node
Christian Ebert <blacktrash@gmx.net>
parents: 12627
diff changeset
420 return super(kwfilelog, self).cmp(node, text)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
421
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
422
14835
ec4d4114e7fe keyword: reuse already present working contexts for match
Christian Ebert <blacktrash@gmx.net>
parents: 14671
diff changeset
423 def _status(ui, repo, wctx, kwt, *pats, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
424 """Bails out if [keyword] configuration is not active.
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
425 Returns status of working directory."""
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
426 if kwt:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
427 return repo.status(
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
428 match=scmutil.match(wctx, pats, pycompat.byteskwargs(opts)),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
429 clean=True,
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
430 unknown=opts.get('unknown') or opts.get('all'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
431 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
432 if ui.configitems(b'keyword'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
433 raise error.Abort(_(b'[keyword] patterns cannot match'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
434 raise error.Abort(_(b'no [keyword] patterns configured'))
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
435
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
436
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
437 def _kwfwrite(ui, repo, expand, *pats, **opts):
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
438 '''Selects files and passes them to kwtemplater.overwrite.'''
11320
e4274f9f97c8 keyword: pass context to kwtemplater.overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 11303
diff changeset
439 wctx = repo[None]
e4274f9f97c8 keyword: pass context to kwtemplater.overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 11303
diff changeset
440 if len(wctx.parents()) > 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
441 raise error.Abort(_(b'outstanding uncommitted merge'))
33070
735218be6122 keyword: use _keywordkwt of repository instead of kwtools['templater']
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33069
diff changeset
442 kwt = getattr(repo, '_keywordkwt', None)
50150
b09a0afcb975 keyword: wrap dirstate mutation in `changing_files` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50041
diff changeset
443 with repo.wlock(), repo.dirstate.changing_files(repo):
14835
ec4d4114e7fe keyword: reuse already present working contexts for match
Christian Ebert <blacktrash@gmx.net>
parents: 14671
diff changeset
444 status = _status(ui, repo, wctx, kwt, *pats, **opts)
22918
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
445 if status.modified or status.added or status.removed or status.deleted:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
446 raise error.Abort(_(b'outstanding uncommitted changes'))
22918
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
447 kwt.overwrite(wctx, status.clean, True, expand)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
448
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
449
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
450 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
451 b'kwdemo',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
452 [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
453 (b'd', b'default', None, _(b'show default keyword template maps')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
454 (b'f', b'rcfile', b'', _(b'read maps from rcfile'), _(b'FILE')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
455 ],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
456 _(b'hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
457 optionalrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
458 )
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
459 def demo(ui, repo, *args, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
460 """print [keywordmaps] configuration and an expansion example
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
461
7993
b83a11536fc6 keyword: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7853
diff changeset
462 Show current, custom, or default keyword template maps and their
8763
fccdf5ca5065 keyword: improve English
timeless <timeless@gmail.com>
parents: 8706
diff changeset
463 expansions.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
464
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
465 Extend the current configuration by specifying maps as arguments
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
466 and using -f/--rcfile to source an external hgrc file.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
467
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
468 Use -d/--default to disable current configuration.
9307
2715506d54e4 keyword: reference templating help, add utcdate filter example
Christian Ebert <blacktrash@gmx.net>
parents: 9305
diff changeset
469
11193
687c7d395f20 Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents: 11168
diff changeset
470 See :hg:`help templates` for information on templates and filters.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
471 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
472
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
473 def demoitems(section, items):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
474 ui.write(b'[%s]\n' % section)
9942
b6d484168350 keyword: sort demo output to ensure deterministic output
Martin Geisler <mg@lazybytes.net>
parents: 9494
diff changeset
475 for k, v in sorted(items):
40220
c7ffc53fbd19 py3: use stringutil.pprint() if we are printing bool values
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39548
diff changeset
476 if isinstance(v, bool):
c7ffc53fbd19 py3: use stringutil.pprint() if we are printing bool values
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39548
diff changeset
477 v = stringutil.pprint(v)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
478 ui.write(b'%s = %s\n' % (k, v))
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
479
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
480 fn = b'demo.txt'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
481 tmpdir = pycompat.mkdtemp(b'', b'kwdemo.')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
482 ui.note(_(b'creating temporary repository at %s\n') % tmpdir)
29634
8421cbebc783 keyword: avoid traceback when kwdemo is run outside a repo
Christian Ebert <blacktrash@gmx.net>
parents: 29397
diff changeset
483 if repo is None:
8421cbebc783 keyword: avoid traceback when kwdemo is run outside a repo
Christian Ebert <blacktrash@gmx.net>
parents: 29397
diff changeset
484 baseui = ui
8421cbebc783 keyword: avoid traceback when kwdemo is run outside a repo
Christian Ebert <blacktrash@gmx.net>
parents: 29397
diff changeset
485 else:
8421cbebc783 keyword: avoid traceback when kwdemo is run outside a repo
Christian Ebert <blacktrash@gmx.net>
parents: 29397
diff changeset
486 baseui = repo.baseui
39548
7ce9dea3a14a localrepo: move repo creation logic out of localrepository.__init__ (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39432
diff changeset
487 repo = localrepo.instance(baseui, tmpdir, create=True)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
488 ui.setconfig(b'keyword', fn, b'', b'keyword')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
489 svn = ui.configbool(b'keywordset', b'svn')
13298
f715e6bd8091 keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 13270
diff changeset
490 # explicitly set keywordset for demo output
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
491 ui.setconfig(b'keywordset', b'svn', svn, b'keyword')
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
492
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
493 uikwmaps = ui.configitems(b'keywordmaps')
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43105
diff changeset
494 if args or opts.get('rcfile'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
495 ui.status(_(b'\n\tconfiguration using custom keyword template maps\n'))
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
496 if uikwmaps:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
497 ui.status(_(b'\textending current template maps\n'))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43105
diff changeset
498 if opts.get('default') or not uikwmaps:
13298
f715e6bd8091 keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 13270
diff changeset
499 if svn:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
500 ui.status(_(b'\toverriding default svn keywordset\n'))
13298
f715e6bd8091 keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 13270
diff changeset
501 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
502 ui.status(_(b'\toverriding default cvs keywordset\n'))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43105
diff changeset
503 if opts.get('rcfile'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
504 ui.readconfig(opts.get(b'rcfile'))
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
505 if args:
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
506 # simulate hgrc parsing
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
507 rcmaps = b'[keywordmaps]\n%s\n' % b'\n'.join(args)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
508 repo.vfs.write(b'hgrc', rcmaps)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
509 ui.readconfig(repo.vfs.join(b'hgrc'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
510 kwmaps = dict(ui.configitems(b'keywordmaps'))
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43105
diff changeset
511 elif opts.get('default'):
13298
f715e6bd8091 keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 13270
diff changeset
512 if svn:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
513 ui.status(_(b'\n\tconfiguration using default svn keywordset\n'))
13298
f715e6bd8091 keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 13270
diff changeset
514 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
515 ui.status(_(b'\n\tconfiguration using default cvs keywordset\n'))
11214
b05ec0cc063e keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents: 11213
diff changeset
516 kwmaps = _defaultkwmaps(ui)
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
517 if uikwmaps:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
518 ui.status(_(b'\tdisabling current template maps\n'))
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
519 for k, v in kwmaps.items():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
520 ui.setconfig(b'keywordmaps', k, v, b'keyword')
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
521 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
522 ui.status(_(b'\n\tconfiguration using current keyword template maps\n'))
15030
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
523 if uikwmaps:
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
524 kwmaps = dict(uikwmaps)
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
525 else:
261482576c1e keyword: avoid x = a and b or c
Christian Ebert <blacktrash@gmx.net>
parents: 14835
diff changeset
526 kwmaps = _defaultkwmaps(ui)
9281
2a4131b264c3 keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents: 9264
diff changeset
527
6502
ba8a0338baf7 keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents: 6416
diff changeset
528 uisetup(ui)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
529 reposetup(ui, repo)
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43077
diff changeset
530 ui.writenoi18n(b'[extensions]\nkeyword =\n')
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
531 demoitems(b'keyword', ui.configitems(b'keyword'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
532 demoitems(b'keywordset', ui.configitems(b'keywordset'))
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
533 demoitems(b'keywordmaps', kwmaps.items())
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
534 keywords = b'$' + b'$\n$'.join(sorted(kwmaps.keys())) + b'$\n'
23879
b88278a308c6 localrepo: remove all external users of localrepo.wopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23878
diff changeset
535 repo.wvfs.write(fn, keywords)
27816
98391f38ceb8 with: use context manager for wlock in keyword demo
Bryan O'Sullivan <bryano@fb.com>
parents: 27815
diff changeset
536 with repo.wlock():
50041
1346db77e14d dirstate: use the `changing_files` context in the `keyword` demo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50009
diff changeset
537 with repo.dirstate.changing_files(repo):
1346db77e14d dirstate: use the `changing_files` context in the `keyword` demo
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50009
diff changeset
538 repo[None].add([fn])
50009
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
539 ui.note(_(b'\nkeywords written to %s:\n') % fn)
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
540 ui.note(keywords)
50258
dba3593555e5 branch: pass current transaction when writing branch in keyword
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50150
diff changeset
541 repo.dirstate.setbranch(b'demobranch', repo.currenttransaction())
50009
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
542 for name, cmd in ui.configitems(b'hooks'):
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
543 if name.split(b'.', 1)[0].find(b'commit') > -1:
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
544 repo.ui.setconfig(b'hooks', name, b'', b'keyword')
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
545 msg = _(b'hg keyword configuration and expansion example')
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
546 ui.note((b"hg ci -m '%s'\n" % msg))
115510658219 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49998
diff changeset
547 repo.commit(text=msg)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
548 ui.status(_(b'\n\tkeywords expanded\n'))
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
549 ui.write(repo.wread(fn))
24905
4ecbd88cde9a keyword: use wvfs.rmtree to remove kwdemo directory
Christian Ebert <blacktrash@gmx.net>
parents: 24370
diff changeset
550 repo.wvfs.rmtree(repo.root)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
551
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
552
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
553 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
554 b'kwexpand',
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
555 cmdutil.walkopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
556 _(b'hg kwexpand [OPTION]... [FILE]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
557 inferrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
558 )
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
559 def expand(ui, repo, *pats, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
560 """expand keywords in the working directory
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
561
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
562 Run after (re)enabling keyword expansion.
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
563
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
564 kwexpand refuses to run if given files contain local changes.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
565 """
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
566 # 3rd argument sets expansion to True
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
567 _kwfwrite(ui, repo, True, *pats, **opts)
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
568
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
569
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
570 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
571 b'kwfiles',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
572 [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
573 (b'A', b'all', None, _(b'show keyword status flags of all files')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
574 (b'i', b'ignore', None, _(b'show files excluded from expansion')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
575 (b'u', b'unknown', None, _(b'only show unknown (not tracked) files')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
576 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
577 + cmdutil.walkopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
578 _(b'hg kwfiles [OPTION]... [FILE]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
579 inferrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
580 )
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
581 def files(ui, repo, *pats, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
582 """show files configured for keyword expansion
8950
be6b57b2bdb8 keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents: 8939
diff changeset
583
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
584 List which files in the working directory are matched by the
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
585 [keyword] configuration patterns.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
586
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
587 Useful to prevent inadvertent keyword expansion and to speed up
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
588 execution by including only files that are actual candidates for
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
589 expansion.
8950
be6b57b2bdb8 keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents: 8939
diff changeset
590
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 10967
diff changeset
591 See :hg:`help keyword` on how to construct patterns both for
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
592 inclusion and exclusion of files.
8957
7672d8e13d0d keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents: 8956
diff changeset
593
9494
bdd8a41ea6f6 keyword: uppercase short option for kwfiles --all, like hg status -A
Christian Ebert <blacktrash@gmx.net>
parents: 9493
diff changeset
594 With -A/--all and -v/--verbose the codes used to show the status
9264
9abddf8c29c7 keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9219
diff changeset
595 of files are::
9195
8c719222ddd7 keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents: 9157
diff changeset
596
8c719222ddd7 keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents: 9157
diff changeset
597 K = keyword expansion candidate
9491
12e340b9f1bf keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents: 9467
diff changeset
598 k = keyword expansion candidate (not tracked)
9195
8c719222ddd7 keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents: 9157
diff changeset
599 I = ignored
9491
12e340b9f1bf keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents: 9467
diff changeset
600 i = ignored (not tracked)
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
601 """
33070
735218be6122 keyword: use _keywordkwt of repository instead of kwtools['templater']
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33069
diff changeset
602 kwt = getattr(repo, '_keywordkwt', None)
14835
ec4d4114e7fe keyword: reuse already present working contexts for match
Christian Ebert <blacktrash@gmx.net>
parents: 14671
diff changeset
603 wctx = repo[None]
ec4d4114e7fe keyword: reuse already present working contexts for match
Christian Ebert <blacktrash@gmx.net>
parents: 14671
diff changeset
604 status = _status(ui, repo, wctx, kwt, *pats, **opts)
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24272
diff changeset
605 if pats:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24272
diff changeset
606 cwd = repo.getcwd()
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24272
diff changeset
607 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
608 cwd = b''
9493
fe1ecd15c6bd keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents: 9492
diff changeset
609 files = []
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
610
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
611 if not opts.get('unknown') or opts.get('all'):
22918
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
612 files = sorted(status.modified + status.added + status.clean)
12627
7d9162892899 keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents: 12626
diff changeset
613 kwfiles = kwt.iskwfile(files, wctx)
22918
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
614 kwdeleted = kwt.iskwfile(status.deleted, wctx)
31f34a213384 keyword: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 21982
diff changeset
615 kwunknown = kwt.iskwfile(status.unknown, wctx)
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
616 if not opts.get('ignore') or opts.get('all'):
13079
f3a2bb1e4255 keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 13078
diff changeset
617 showfiles = kwfiles, kwdeleted, kwunknown
9493
fe1ecd15c6bd keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents: 9492
diff changeset
618 else:
13079
f3a2bb1e4255 keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 13078
diff changeset
619 showfiles = [], [], []
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
620 if opts.get('all') or opts.get('ignore'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
621 showfiles += (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
622 [f for f in files if f not in kwfiles],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
623 [f for f in status.unknown if f not in kwunknown],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
624 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
625 kwlabels = b'enabled deleted enabledunknown ignored ignoredunknown'.split()
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
626 kwstates = zip(kwlabels, pycompat.bytestr(b'K!kIi'), showfiles)
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
627 fm = ui.formatter(b'kwfiles', pycompat.byteskwargs(opts))
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
628 fmt = b'%.0s%s\n'
50879
7e6cd8472dc8 keyword: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50784
diff changeset
629 if opts.get('all') or ui.verbose:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
630 fmt = b'%s %s\n'
17057
9720c55d605b keyword: use ui.formatter for kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 16812
diff changeset
631 for kwstate, char, filenames in kwstates:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
632 label = b'kwfiles.' + kwstate
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
633 for f in filenames:
17057
9720c55d605b keyword: use ui.formatter for kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 16812
diff changeset
634 fm.startitem()
39369
34ba47117164 formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 38475
diff changeset
635 fm.data(kwstatus=char, path=f)
34ba47117164 formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 38475
diff changeset
636 fm.plain(fmt % (char, repo.pathto(f, cwd)), label=label)
17057
9720c55d605b keyword: use ui.formatter for kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents: 16812
diff changeset
637 fm.end()
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
638
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
639
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
640 @command(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
641 b'kwshrink',
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
642 cmdutil.walkopts,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
643 _(b'hg kwshrink [OPTION]... [FILE]...'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
644 inferrepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
645 )
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
646 def shrink(ui, repo, *pats, **opts):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
647 """revert expanded keywords in the working directory
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
648
13270
1e0d631b843b keyword: update documentation for kwshrink
Christian Ebert <blacktrash@gmx.net>
parents: 13079
diff changeset
649 Must be run before changing/disabling active keywords.
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
650
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
651 kwshrink refuses to run if given files contain local changes.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
652 """
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
653 # 3rd argument sets expansion to False
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
654 _kwfwrite(ui, repo, False, *pats, **opts)
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
655
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
656
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
657 # monkeypatches
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
658
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
659
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
660 def kwpatchfile_init(orig, self, ui, gp, backend, store, eolmode=None):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
661 """Monkeypatch/wrap patch.patchfile.__init__ to avoid
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
662 rejects or conflicts due to expanded keywords in working dir."""
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
663 orig(self, ui, gp, backend, store, eolmode)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
664 kwt = getattr(getattr(backend, 'repo', None), '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
665 if kwt:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
666 # shrink keywords read from working dir
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
667 self.lines = kwt.shrinklines(self.fname, self.lines)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
668
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
669
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
670 def kwdiff(orig, repo, *args, **kwargs):
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
671 '''Monkeypatch patch.diff to avoid expansion.'''
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
672 kwt = getattr(repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
673 if kwt:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
674 restrict = kwt.restrict
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
675 kwt.restrict = True
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
676 try:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
677 for chunk in orig(repo, *args, **kwargs):
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
678 yield chunk
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
679 finally:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
680 if kwt:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
681 kwt.restrict = restrict
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
682
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
683
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36880
diff changeset
684 def kwweb_skip(orig, web):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
685 '''Wraps webcommands.x turning off keyword expansion.'''
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
686 kwt = getattr(web.repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
687 if kwt:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
688 origmatch = kwt.match
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
689 kwt.match = util.never
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
690 try:
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36880
diff changeset
691 for chunk in orig(web):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
692 yield chunk
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
693 finally:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
694 if kwt:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
695 kwt.match = origmatch
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
696
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
697
34086
a39dce4a76b8 cmdutil: remove redundant commitfunc parameter in amend (API)
Saurabh Singh <singhsrb@fb.com>
parents: 33071
diff changeset
698 def kw_amend(orig, ui, repo, old, extra, pats, opts):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
699 '''Wraps cmdutil.amend expanding keywords after amend.'''
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
700 kwt = getattr(repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
701 if kwt is None:
34086
a39dce4a76b8 cmdutil: remove redundant commitfunc parameter in amend (API)
Saurabh Singh <singhsrb@fb.com>
parents: 33071
diff changeset
702 return orig(ui, repo, old, extra, pats, opts)
49961
7a8bfc05b691 dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
703 with repo.wlock(), repo.dirstate.changing_parents(repo):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
704 kwt.postcommit = True
34086
a39dce4a76b8 cmdutil: remove redundant commitfunc parameter in amend (API)
Saurabh Singh <singhsrb@fb.com>
parents: 33071
diff changeset
705 newid = orig(ui, repo, old, extra, pats, opts)
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
706 if newid != old.node():
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
707 ctx = repo[newid]
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
708 kwt.restrict = True
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
709 kwt.overwrite(ctx, ctx.files(), False, True)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
710 kwt.restrict = False
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
711 return newid
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
712
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
713
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
714 def kw_copy(orig, ui, repo, pats, opts, rename=False):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
715 """Wraps cmdutil.copy so that copy/rename destinations do not
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
716 contain expanded keywords.
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
717 Note that the source of a regular file destination may also be a
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
718 symlink:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
719 hg cp sym x -> x is symlink
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
720 cp sym x; hg cp -A sym x -> x is file (maybe expanded keywords)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
721 For the latter we have to follow the symlink to find out whether its
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
722 target is configured for expansion and we therefore must unexpand the
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
723 keywords in the destination."""
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
724 kwt = getattr(repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
725 if kwt is None:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
726 return orig(ui, repo, pats, opts, rename)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
727 with repo.wlock():
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
728 orig(ui, repo, pats, opts, rename)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
729 if opts.get(b'dry_run'):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
730 return
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
731 wctx = repo[None]
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
732 cwd = repo.getcwd()
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
733
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
734 def haskwsource(dest):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
735 """Returns true if dest is a regular file and configured for
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
736 expansion or a symlink which points to a file configured for
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
737 expansion."""
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
738 source = repo.dirstate.copied(dest)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
739 if b'l' in wctx.flags(source):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
740 source = pathutil.canonpath(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
741 repo.root, cwd, os.path.realpath(source)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
742 )
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
743 return kwt.match(source)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
744
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
745 candidates = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
746 f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
747 for f in repo.dirstate.copies()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
748 if b'l' not in wctx.flags(f) and haskwsource(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
749 ]
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
750 kwt.overwrite(wctx, candidates, False, False)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
751
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
752
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
753 def kw_dorecord(orig, ui, repo, commitfunc, *pats, **opts):
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
754 '''Wraps record.dorecord expanding keywords after recording.'''
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
755 kwt = getattr(repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
756 if kwt is None:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
757 return orig(ui, repo, commitfunc, *pats, **opts)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
758 with repo.wlock():
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
759 # record returns 0 even when nothing has changed
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
760 # therefore compare nodes before and after
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
761 kwt.postcommit = True
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
762 ctx = repo[b'.']
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
763 wstatus = ctx.status()
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
764 ret = orig(ui, repo, commitfunc, *pats, **opts)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
765 recctx = repo[b'.']
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
766 if ctx != recctx:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
767 modified, added = _preselect(wstatus, recctx.files())
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
768 kwt.restrict = False
49961
7a8bfc05b691 dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
769 with repo.dirstate.changing_parents(repo):
47736
b9086ec4d28b keyword: use `update_file_p1` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47711
diff changeset
770 kwt.overwrite(recctx, modified, False, True)
b9086ec4d28b keyword: use `update_file_p1` instead of `normallookup`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47711
diff changeset
771 kwt.overwrite(recctx, added, False, True, True)
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
772 kwt.restrict = True
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
773 return ret
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
774
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
775
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
776 def kwfilectx_cmp(orig, self, fctx):
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
777 if fctx._customcmp:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
778 return fctx.cmp(self)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
779 kwt = getattr(self._repo, '_keywordkwt', None)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
780 if kwt is None:
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
781 return orig(self, fctx)
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
782 # keyword affects data size, comparing wdir and filelog size does
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
783 # not make sense
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
784 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
785 fctx._filenode is None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
786 and (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
787 self._repo._encodefilterpats
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
788 or kwt.match(fctx.path())
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
789 and b'l' not in fctx.flags()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
790 or self.size() - 4 == fctx.size()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
791 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
792 or self.size() == fctx.size()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
793 ):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
794 return self._filelog.cmp(self._filenode, fctx.data())
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
795 return True
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
796
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
797
6502
ba8a0338baf7 keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents: 6416
diff changeset
798 def uisetup(ui):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
799 """Monkeypatches dispatch._parse to retrieve user command.
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
800 Overrides file method to return kwfilelog instead of filelog
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
801 if file matches user configuration.
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
802 Wraps commit to overwrite configured files with updated
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
803 keyword substitutions.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43506
diff changeset
804 Monkeypatches patch and webcommands."""
6502
ba8a0338baf7 keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents: 6416
diff changeset
805
11678
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
806 def kwdispatch_parse(orig, ui, args):
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
807 '''Monkeypatch dispatch._parse to obtain running hg command.'''
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
808 cmd, func, args, options, cmdoptions = orig(ui, args)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
809 kwtools[b'hgcmd'] = cmd
11678
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
810 return cmd, func, args, options, cmdoptions
6502
ba8a0338baf7 keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents: 6416
diff changeset
811
50784
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
812 extensions.wrapfunction(dispatch, '_parse', kwdispatch_parse)
6502
ba8a0338baf7 keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents: 6416
diff changeset
813
50784
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
814 extensions.wrapfunction(context.filectx, 'cmp', kwfilectx_cmp)
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
815 extensions.wrapfunction(patch.patchfile, '__init__', kwpatchfile_init)
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
816 extensions.wrapfunction(patch, 'diff', kwdiff)
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
817 extensions.wrapfunction(cmdutil, 'amend', kw_amend)
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
818 extensions.wrapfunction(cmdutil, 'copy', kw_copy)
fcb67b8c8107 wrapfunction: use sysstr instead of bytes as argument in "keyword"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50258
diff changeset
819 extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord)
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
820 for c in nokwwebcommands.split():
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
821 extensions.wrapfunction(webcommands, c, kwweb_skip)
52060
8b7123c8947b update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents: 51863
diff changeset
822 merge.MAYBE_USE_RUST_UPDATE = False
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
823
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
824
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
825 def reposetup(ui, repo):
33071
279c072a5c49 keyword: wrap functions only once at loading keyword extension
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33070
diff changeset
826 '''Sets up repo as kwrepo for keyword substitution.'''
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
827
7853
af062a9fea9b bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents: 7762
diff changeset
828 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
829 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
830 not repo.local()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
831 or kwtools[b'hgcmd'] in nokwcommands.split()
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
832 or b'.hg' in util.splitpath(repo.root)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
833 or repo._url.startswith(b'bundle:')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
834 ):
7853
af062a9fea9b bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents: 7762
diff changeset
835 return
af062a9fea9b bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents: 7762
diff changeset
836 except AttributeError:
af062a9fea9b bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents: 7762
diff changeset
837 pass
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
838
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
839 inc, exc = [], [b'.hg*']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
840 for pat, opt in ui.configitems(b'keyword'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
841 if opt != b'ignore':
11678
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
842 inc.append(pat)
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
843 else:
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
844 exc.append(pat)
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
845 if not inc:
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
846 return
f5aa20e177c0 keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents: 11350
diff changeset
847
33070
735218be6122 keyword: use _keywordkwt of repository instead of kwtools['templater']
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33069
diff changeset
848 kwt = kwtemplater(ui, repo, inc, exc)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
849
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
850 class kwrepo(repo.__class__):
6114
ee83510fe567 keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 6092
diff changeset
851 def file(self, f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
852 if f[0] == b'/':
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
853 f = f[1:]
23878
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23877
diff changeset
854 return kwfilelog(self.svfs, kwt, f)
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
855
5884
a139f141dcae keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents: 5831
diff changeset
856 def wread(self, filename):
a139f141dcae keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents: 5831
diff changeset
857 data = super(kwrepo, self).wread(filename)
6115
8121e9d7bfd2 keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents: 6114
diff changeset
858 return kwt.wread(filename, data)
5884
a139f141dcae keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents: 5831
diff changeset
859
9096
47bc92755b95 keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents: 8996
diff changeset
860 def commit(self, *args, **opts):
8996
23e941d7f507 keyword: make repo.commit use a custom commitctx wrapper
Christian Ebert <blacktrash@gmx.net>
parents: 8957
diff changeset
861 # use custom commitctx for user commands
23e941d7f507 keyword: make repo.commit use a custom commitctx wrapper
Christian Ebert <blacktrash@gmx.net>
parents: 8957
diff changeset
862 # other extensions can still wrap repo.commitctx directly
9096
47bc92755b95 keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents: 8996
diff changeset
863 self.commitctx = self.kwcommitctx
47bc92755b95 keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents: 8996
diff changeset
864 try:
10495
2c2d2f1354b4 keyword: do not postpone commit hooks
Christian Ebert <blacktrash@gmx.net>
parents: 10492
diff changeset
865 return super(kwrepo, self).commit(*args, **opts)
9096
47bc92755b95 keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents: 8996
diff changeset
866 finally:
47bc92755b95 keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents: 8996
diff changeset
867 del self.commitctx
8996
23e941d7f507 keyword: make repo.commit use a custom commitctx wrapper
Christian Ebert <blacktrash@gmx.net>
parents: 8957
diff changeset
868
42620
d98ec36be808 convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 40220
diff changeset
869 def kwcommitctx(self, ctx, error=False, origctx=None):
d98ec36be808 convert: add a config option to help doing identity hg->hg conversion
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 40220
diff changeset
870 n = super(kwrepo, self).commitctx(ctx, error, origctx)
10604
9a36d159595f keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents: 10603
diff changeset
871 # no lock needed, only called from repo.commit() which already locks
16809
6b704fa2bea1 keyword: rename kwt.record attribute to kwt.postcommit
Christian Ebert <blacktrash@gmx.net>
parents: 16743
diff changeset
872 if not kwt.postcommit:
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
873 restrict = kwt.restrict
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
874 kwt.restrict = True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
875 kwt.overwrite(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
876 self[n], sorted(ctx.added() + ctx.modified()), False, True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
877 )
12625
d87f3ff904ba keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents: 12605
diff changeset
878 kwt.restrict = restrict
10604
9a36d159595f keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents: 10603
diff changeset
879 return n
5815
0637d97a8cb4 Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
880
15183
59e8bc22506e rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents: 15083
diff changeset
881 def rollback(self, dryrun=False, force=False):
32935
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
882 with self.wlock():
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
883 origrestrict = kwt.restrict
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
884 try:
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
885 if not dryrun:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
886 changed = self[b'.'].files()
32935
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
887 ret = super(kwrepo, self).rollback(dryrun, force)
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
888 if not dryrun:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
889 ctx = self[b'.']
32935
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
890 modified, added = _preselect(ctx.status(), changed)
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
891 kwt.restrict = False
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
892 kwt.overwrite(ctx, modified, True, True)
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
893 kwt.overwrite(ctx, added, True, False)
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
894 return ret
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
895 finally:
69d1c3ea0d6f keyword: use context manager for rollback locking
Christian Ebert <blacktrash@gmx.net>
parents: 32837
diff changeset
896 kwt.restrict = origrestrict
12498
4846e8cd9327 keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents: 12497
diff changeset
897
33067
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
898 repo.__class__ = kwrepo
5a51db8bf41b keyword: make wrapped repository and kwtemplater refer to each other
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33065
diff changeset
899 repo._keywordkwt = kwt