Mercurial > hg
annotate hgext/keyword.py @ 14451:c78d41db6f88
patch: refactor file creation/removal detection
The patcher has to know if a file is being created or removed to check if the
target already exists, or to actually unlink the file when a hunk emptying it
is applied. This was done by embedding the creation/removal information in the
first (and only) hunk attached to the file.
There are two problems with this approach:
- creation/removal is really a property of the file being patched and not its
hunk.
- for regular patches, file creation cannot be deduced at parsing time: there
are case where the *stripped* file paths must be compared. Modifying hunks
after their creation is clumsy and prevent further refactorings related to
copies handling.
Instead, we delegate this job to selectfile() which has all the relevant
information, and remove the hunk createfile() and rmfile() methods.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Fri, 27 May 2011 21:50:09 +0200 |
parents | 468d7d1744b4 |
children | ee574cfd0c32 |
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 # |
10653
4f559a469972
keyword: update copyright
Christian Ebert <blacktrash@gmx.net>
parents:
10652
diff
changeset
|
3 # Copyright 2007-2010 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 | 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 # |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
10 # Keyword expansion hack against the grain of a DSCM |
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 |
8936
1de6e7e1bb9f
change wiki/bts URLs to point to new hostname
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8894
diff
changeset
|
18 # <http://mercurial.selenic.com/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 # |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
27 # Run "hg help keyword" and "hg kwdemo" to get info on configuration. |
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:: |
aff4afdcfd2b
Use more note admonitions in help texts
Christian Ebert <blacktrash@gmx.net>
parents:
12207
diff
changeset
|
56 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
|
57 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
|
58 |
9264
9abddf8c29c7
keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
59 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
|
60 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
|
61 available templates and filters. |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
62 |
13885
5d115ea4030b
keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents:
13634
diff
changeset
|
63 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
|
64 |
13885
5d115ea4030b
keyword: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents:
13634
diff
changeset
|
65 :``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
|
66 :``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
|
67 :``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
|
68 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10967
diff
changeset
|
69 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
|
70 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
|
71 :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
|
72 |
13270
1e0d631b843b
keyword: update documentation for kwshrink
Christian Ebert <blacktrash@gmx.net>
parents:
13079
diff
changeset
|
73 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
|
74 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
|
75 |
9264
9abddf8c29c7
keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
76 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
|
77 :hg:`kwexpand`. |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
78 |
9264
9abddf8c29c7
keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
79 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
|
80 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
|
81 {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
|
82 ''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
83 |
12709
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12685
diff
changeset
|
84 from mercurial import commands, context, cmdutil, dispatch, filelog, extensions |
12628
799cec3ba3b1
keyword: disable expansion in kwfilelog.read() if file renamed in node
Christian Ebert <blacktrash@gmx.net>
parents:
12627
diff
changeset
|
85 from mercurial import localrepo, match, patch, templatefilters, templater, util |
13971
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13885
diff
changeset
|
86 from mercurial import scmutil |
6072
e521ec1ad985
keyword: no expansion in web diffs
Christian Ebert <blacktrash@gmx.net>
parents:
6071
diff
changeset
|
87 from mercurial.hgweb import webcommands |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
88 from mercurial.i18n import _ |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
89 import os, re, shutil, tempfile |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
90 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
91 commands.optionalrepo += ' kwdemo' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
92 |
14300
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
93 cmdtable = {} |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
94 command = cmdutil.command(cmdtable) |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
95 |
6024
3121f0feefb4
keyword: nokwcommands, restricted string variables at top level
Christian Ebert <blacktrash@gmx.net>
parents:
6023
diff
changeset
|
96 # hg commands that do not act on keywords |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
97 nokwcommands = ('add addremove annotate bundle export grep incoming init log' |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
98 ' outgoing push tip verify convert email glog') |
6024
3121f0feefb4
keyword: nokwcommands, restricted string variables at top level
Christian Ebert <blacktrash@gmx.net>
parents:
6023
diff
changeset
|
99 |
5961
ed4d55c2366f
keyword: detect restricted commands thru variable
Christian Ebert <blacktrash@gmx.net>
parents:
5946
diff
changeset
|
100 # 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
|
101 # not when reading filelog, and unexpand when reading from working dir |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
102 restricted = 'merge kwexpand kwshrink record qrecord resolve transplant' |
5961
ed4d55c2366f
keyword: detect restricted commands thru variable
Christian Ebert <blacktrash@gmx.net>
parents:
5946
diff
changeset
|
103 |
11168
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
104 # names of extensions using dorecord |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
105 recordextensions = 'record' |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
106 |
13078
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
107 colortable = { |
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
108 'kwfiles.enabled': 'green bold', |
13079
f3a2bb1e4255
keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
13078
diff
changeset
|
109 'kwfiles.deleted': 'cyan bold underline', |
13078
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
110 'kwfiles.enabledunknown': 'green', |
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
111 'kwfiles.ignored': 'bold', |
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
112 'kwfiles.ignoredunknown': 'none' |
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
113 } |
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
114 |
11213
3d61813a300e
keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents:
11193
diff
changeset
|
115 # date like in cvs' $Date |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
116 def utcdate(text): |
13633
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
117 ''':utcdate: Date. Returns a UTC-date in this format: "2009/08/18 11:00:13". |
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
118 ''' |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
119 return util.datestr((text[0], 0), '%Y/%m/%d %H:%M:%S') |
11213
3d61813a300e
keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents:
11193
diff
changeset
|
120 # date like in svn's $Date |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
121 def svnisodate(text): |
13633
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
122 ''':svnisodate: Date. Returns a date in this format: "2009-08-18 13:00:13 |
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
123 +0200 (Tue, 18 Aug 2009)". |
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
124 ''' |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
125 return util.datestr(text, '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') |
11213
3d61813a300e
keyword: add 2 svn-like date filters
Christian Ebert <blacktrash@gmx.net>
parents:
11193
diff
changeset
|
126 # date like in svn's $Id |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
127 def svnutcdate(text): |
13633
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
128 ''':svnutcdate: Date. Returns a UTC-date in this format: "2009-08-18 |
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
129 11:00:13Z". |
20d13244f192
keyword: docstrings for additional date filters
Christian Ebert <blacktrash@gmx.net>
parents:
13592
diff
changeset
|
130 ''' |
13592
ad2ee188f4a5
templates: document missing keywords or filters
Patrick Mezard <pmezard@gmail.com>
parents:
13299
diff
changeset
|
131 return util.datestr((text[0], 0), '%Y-%m-%d %H:%M:%SZ') |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
132 |
13634
15470463f932
keyword: offer additional datefilters when the extension is enabled
Christian Ebert <blacktrash@gmx.net>
parents:
13633
diff
changeset
|
133 templatefilters.filters.update({'utcdate': utcdate, |
15470463f932
keyword: offer additional datefilters when the extension is enabled
Christian Ebert <blacktrash@gmx.net>
parents:
13633
diff
changeset
|
134 'svnisodate': svnisodate, |
15470463f932
keyword: offer additional datefilters when the extension is enabled
Christian Ebert <blacktrash@gmx.net>
parents:
13633
diff
changeset
|
135 'svnutcdate': svnutcdate}) |
15470463f932
keyword: offer additional datefilters when the extension is enabled
Christian Ebert <blacktrash@gmx.net>
parents:
13633
diff
changeset
|
136 |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
137 # make keyword tools accessible |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
138 kwtools = {'templater': None, 'hgcmd': ''} |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
139 |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
140 def _defaultkwmaps(ui): |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
141 '''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
|
142 templates = { |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
143 'Revision': '{node|short}', |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
144 'Author': '{author|user}', |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
145 } |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
146 kwsets = ({ |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
147 'Date': '{date|utcdate}', |
9943
f8d779791161
keyword: the CVS keyword is $RCSfile$, not $RCSFile$
Christian Ebert <blacktrash@gmx.net>
parents:
9942
diff
changeset
|
148 'RCSfile': '{file|basename},v', |
9950
af5f99d8195e
keyword: clarify object of backwards compatibility
timeless
parents:
9943
diff
changeset
|
149 'RCSFile': '{file|basename},v', # kept for backwards compatibility |
af5f99d8195e
keyword: clarify object of backwards compatibility
timeless
parents:
9943
diff
changeset
|
150 # with hg-keyword |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
151 'Source': '{root}/{file},v', |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
152 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
153 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
154 }, { |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
155 'Date': '{date|svnisodate}', |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
156 'Id': '{file|basename},v {node|short} {date|svnutcdate} {author|user}', |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
157 'LastChangedRevision': '{node|short}', |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
158 'LastChangedBy': '{author|user}', |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
159 'LastChangedDate': '{date|svnisodate}', |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
160 }) |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
161 templates.update(kwsets[ui.configbool('keywordset', 'svn')]) |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
162 return templates |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
163 |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
164 def _shrinktext(text, subfunc): |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
165 '''Helper for keyword expansion removal in text. |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
166 Depending on subfunc also returns number of substitutions.''' |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
167 return subfunc(r'$\1$', text) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
168 |
12723
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
169 def _preselect(wstatus, changed): |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
170 '''Retrieves modfied and added files from a working directory state |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
171 and returns the subset of each contained in given changed files |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
172 retrieved from a change context.''' |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
173 modified, added = wstatus[:2] |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
174 modified = [f for f in modified if f in changed] |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
175 added = [f for f in added if f in changed] |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
176 return modified, added |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
177 |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
178 |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
179 class kwtemplater(object): |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
180 ''' |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
181 Sets up keyword templates, corresponding keyword regex, and |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
182 provides keyword substitution functions. |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
183 ''' |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
184 |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
185 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
|
186 self.ui = ui |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
187 self.repo = repo |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
188 self.match = match.match(repo.root, '', [], inc, exc) |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
189 self.restrict = kwtools['hgcmd'] in restricted.split() |
12631
7b34fdffed65
keyword: switch kwtemplater.record in kw_dorecord()
Christian Ebert <blacktrash@gmx.net>
parents:
12630
diff
changeset
|
190 self.record = False |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
191 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
192 kwmaps = self.ui.configitems('keywordmaps') |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
193 if kwmaps: # override default templates |
9081
d8e8447a4b7b
keyword: collect kwmaps using a generator expression
Christian Ebert <blacktrash@gmx.net>
parents:
9066
diff
changeset
|
194 self.templates = dict((k, templater.parsestring(v, False)) |
d8e8447a4b7b
keyword: collect kwmaps using a generator expression
Christian Ebert <blacktrash@gmx.net>
parents:
9066
diff
changeset
|
195 for k, v in kwmaps) |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
196 else: |
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
197 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
|
198 |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
199 @util.propertycache |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
200 def escape(self): |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
201 '''Returns bar-separated and escaped keywords.''' |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
202 return '|'.join(map(re.escape, self.templates.keys())) |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
203 |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
204 @util.propertycache |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
205 def rekw(self): |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
206 '''Returns regex for unexpanded keywords.''' |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
207 return re.compile(r'\$(%s)\$' % self.escape) |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
208 |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
209 @util.propertycache |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
210 def rekwexp(self): |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
211 '''Returns regex for expanded keywords.''' |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
212 return re.compile(r'\$(%s): [^$\n\r]*? \$' % self.escape) |
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
213 |
7375
9f1370130a45
keyword: be more efficient about ctx usage
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7369
diff
changeset
|
214 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
|
215 '''Replaces keywords in data with expanded template.''' |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
216 def kwsub(mobj): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
217 kw = mobj.group(1) |
10894
26cf11f9f322
keyword: make the templater a local variable
Christian Ebert <blacktrash@gmx.net>
parents:
10844
diff
changeset
|
218 ct = cmdutil.changeset_templater(self.ui, self.repo, |
26cf11f9f322
keyword: make the templater a local variable
Christian Ebert <blacktrash@gmx.net>
parents:
10844
diff
changeset
|
219 False, None, '', False) |
26cf11f9f322
keyword: make the templater a local variable
Christian Ebert <blacktrash@gmx.net>
parents:
10844
diff
changeset
|
220 ct.use_template(self.templates[kw]) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
221 self.ui.pushbuffer() |
10894
26cf11f9f322
keyword: make the templater a local variable
Christian Ebert <blacktrash@gmx.net>
parents:
10844
diff
changeset
|
222 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
|
223 ekw = templatefilters.firstline(self.ui.popbuffer()) |
ee7df90d1daa
keyword: split line continuation in 2 steps (style)
Christian Ebert <blacktrash@gmx.net>
parents:
6022
diff
changeset
|
224 return '$%s: %s $' % (kw, ekw) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
225 return subfunc(kwsub, data) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
226 |
12920
1fab4970354e
keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
12844
diff
changeset
|
227 def linkctx(self, path, fileid): |
1fab4970354e
keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
12844
diff
changeset
|
228 '''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
|
229 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
|
230 |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
231 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
|
232 '''Returns data with keywords expanded.''' |
8638
c6483eec6092
keyword: rename matcher() to match() mimicking changes in main
Christian Ebert <blacktrash@gmx.net>
parents:
8567
diff
changeset
|
233 if not self.restrict and self.match(path) and not util.binary(data): |
12920
1fab4970354e
keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
12844
diff
changeset
|
234 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
|
235 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
|
236 return data |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
237 |
12627
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
238 def iskwfile(self, cand, ctx): |
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
239 '''Returns subset of candidates which are configured for keyword |
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
240 expansion are not symbolic links.''' |
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
241 return [f for f in cand if self.match(f) and not 'l' in ctx.flags(f)] |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
242 |
12685
a247751652ba
keyword: enforce subn method via boolean switch
Christian Ebert <blacktrash@gmx.net>
parents:
12684
diff
changeset
|
243 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
|
244 '''Overwrites selected files expanding/shrinking keywords.''' |
12844
a1b49b9a0328
keyword: fix regressions introduced in d87f3ff904ba
Christian Ebert <blacktrash@gmx.net>
parents:
12732
diff
changeset
|
245 if self.restrict or lookup or self.record: # 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
|
246 candidates = self.iskwfile(candidates, ctx) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
247 if not candidates: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
248 return |
12844
a1b49b9a0328
keyword: fix regressions introduced in d87f3ff904ba
Christian Ebert <blacktrash@gmx.net>
parents:
12732
diff
changeset
|
249 kwcmd = self.restrict and lookup # kwexpand/kwshrink |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
250 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
|
251 mf = ctx.manifest() |
12920
1fab4970354e
keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
12844
diff
changeset
|
252 lctx = ctx |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
253 re_kw = (self.restrict or rekw) and self.rekw or self.rekwexp |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
254 msg = (expand and _('overwriting %s expanding keywords\n') |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
255 or _('overwriting %s shrinking keywords\n')) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
256 for f in candidates: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
257 if self.restrict: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
258 data = self.repo.file(f).read(mf[f]) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
259 else: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
260 data = self.repo.wread(f) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
261 if util.binary(data): |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
262 continue |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
263 if expand: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
264 if lookup: |
12920
1fab4970354e
keyword: function to look up changectx for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
12844
diff
changeset
|
265 lctx = self.linkctx(f, mf[f]) |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
266 data, found = self.substitute(data, f, lctx, re_kw.subn) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
267 elif self.restrict: |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
268 found = re_kw.search(data) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
269 else: |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
270 data, found = _shrinktext(data, re_kw.subn) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
271 if found: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
272 self.ui.note(msg % f) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
273 self.repo.wwrite(f, data, ctx.flags(f)) |
12844
a1b49b9a0328
keyword: fix regressions introduced in d87f3ff904ba
Christian Ebert <blacktrash@gmx.net>
parents:
12732
diff
changeset
|
274 if kwcmd: |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
275 self.repo.dirstate.normal(f) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
276 elif self.record: |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
277 self.repo.dirstate.normallookup(f) |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
278 |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
279 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
|
280 '''Returns text with all keyword substitutions removed.''' |
8638
c6483eec6092
keyword: rename matcher() to match() mimicking changes in main
Christian Ebert <blacktrash@gmx.net>
parents:
8567
diff
changeset
|
281 if self.match(fname) and not util.binary(text): |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
282 return _shrinktext(text, self.rekwexp.sub) |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
283 return text |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
284 |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
285 def shrinklines(self, fname, lines): |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
286 '''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
|
287 if self.match(fname): |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
288 text = ''.join(lines) |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6506
diff
changeset
|
289 if not util.binary(text): |
12926
edbe32efc89f
keyword: turn regexes and escaped keywords into a propertycache
Christian Ebert <blacktrash@gmx.net>
parents:
12920
diff
changeset
|
290 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
|
291 return lines |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
292 |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
293 def wread(self, fname, data): |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
294 '''If in restricted mode returns data read from wdir with |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
295 keyword substitutions removed.''' |
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
296 return self.restrict and self.shrink(fname, data) or data |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
297 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
298 class kwfilelog(filelog.filelog): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
299 ''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
300 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
|
301 Keywords are "stored" unexpanded, and processed on reading. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
302 ''' |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
303 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
|
304 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
|
305 self.kwt = kwt |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
306 self.path = path |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
307 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
308 def read(self, node): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
309 '''Expands keywords when reading filelog.''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
310 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
|
311 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
|
312 return data |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
313 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
|
314 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
315 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
|
316 '''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
|
317 text = self.kwt.shrink(self.path, text) |
6504
1be53f931c9c
keyword: compact setting of optional arguments
Christian Ebert <blacktrash@gmx.net>
parents:
6503
diff
changeset
|
318 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
|
319 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
320 def cmp(self, node, text): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
321 '''Removes keyword substitutions for comparison.''' |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
322 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
|
323 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
|
324 |
9491
12e340b9f1bf
keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents:
9467
diff
changeset
|
325 def _status(ui, repo, kwt, *pats, **opts): |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
326 '''Bails out if [keyword] configuration is not active. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
327 Returns status of working directory.''' |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
328 if kwt: |
14322
a90131b85fd8
scmutil: drop aliases in cmdutil for match functions
Matt Mackall <mpm@selenic.com>
parents:
14300
diff
changeset
|
329 return repo.status(match=scmutil.match(repo, pats, opts), clean=True, |
10652
e7f840e4ac7d
keyword: remove deprecated options
Christian Ebert <blacktrash@gmx.net>
parents:
10604
diff
changeset
|
330 unknown=opts.get('unknown') or opts.get('all')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
331 if ui.configitems('keyword'): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
332 raise util.Abort(_('[keyword] patterns cannot match')) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
333 raise util.Abort(_('no [keyword] patterns configured')) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
334 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
335 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
|
336 '''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
|
337 wctx = repo[None] |
e4274f9f97c8
keyword: pass context to kwtemplater.overwrite
Christian Ebert <blacktrash@gmx.net>
parents:
11303
diff
changeset
|
338 if len(wctx.parents()) > 1: |
6672
6004eedb13f4
keyword: mimic cmdutil.bail_if_changed even more
Christian Ebert <blacktrash@gmx.net>
parents:
6667
diff
changeset
|
339 raise util.Abort(_('outstanding uncommitted merge')) |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
340 kwt = kwtools['templater'] |
10604
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
341 wlock = repo.wlock() |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
342 try: |
10604
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
343 status = _status(ui, repo, kwt, *pats, **opts) |
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
344 modified, added, removed, deleted, unknown, ignored, clean = status |
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
345 if modified or added or removed or deleted: |
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
346 raise util.Abort(_('outstanding uncommitted changes')) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
347 kwt.overwrite(wctx, clean, True, expand) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
348 finally: |
10604
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
349 wlock.release() |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
350 |
14300
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
351 @command('kwdemo', |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
352 [('d', 'default', None, _('show default keyword template maps')), |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
353 ('f', 'rcfile', '', |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
354 _('read maps from rcfile'), _('FILE'))], |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
355 _('hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
356 def demo(ui, repo, *args, **opts): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
357 '''print [keywordmaps] configuration and an expansion example |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
358 |
7993
b83a11536fc6
keyword: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7853
diff
changeset
|
359 Show current, custom, or default keyword template maps and their |
8763 | 360 expansions. |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
361 |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
362 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
|
363 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
|
364 |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
365 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
|
366 |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11168
diff
changeset
|
367 See :hg:`help templates` for information on templates and filters. |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
368 ''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
369 def demoitems(section, items): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
370 ui.write('[%s]\n' % section) |
9942
b6d484168350
keyword: sort demo output to ensure deterministic output
Martin Geisler <mg@lazybytes.net>
parents:
9494
diff
changeset
|
371 for k, v in sorted(items): |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
372 ui.write('%s = %s\n' % (k, v)) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
373 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
374 fn = 'demo.txt' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
375 tmpdir = tempfile.mkdtemp('', 'kwdemo.') |
8027
9c7ca86fc658
expand "repo" to "repository" in help texts
Martin Geisler <mg@lazybytes.net>
parents:
7993
diff
changeset
|
376 ui.note(_('creating temporary repository at %s\n') % tmpdir) |
6504
1be53f931c9c
keyword: compact setting of optional arguments
Christian Ebert <blacktrash@gmx.net>
parents:
6503
diff
changeset
|
377 repo = localrepo.localrepository(ui, tmpdir, True) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
378 ui.setconfig('keyword', fn, '') |
13298
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
379 svn = ui.configbool('keywordset', 'svn') |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
380 # explicitly set keywordset for demo output |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
381 ui.setconfig('keywordset', 'svn', svn) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
382 |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
383 uikwmaps = ui.configitems('keywordmaps') |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
384 if args or opts.get('rcfile'): |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
385 ui.status(_('\n\tconfiguration using custom keyword template maps\n')) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
386 if uikwmaps: |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
387 ui.status(_('\textending current template maps\n')) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
388 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
|
389 if svn: |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
390 ui.status(_('\toverriding default svn keywordset\n')) |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
391 else: |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
392 ui.status(_('\toverriding default cvs keywordset\n')) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
393 if opts.get('rcfile'): |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
394 ui.readconfig(opts.get('rcfile')) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
395 if args: |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
396 # simulate hgrc parsing |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
397 rcmaps = ['[keywordmaps]\n'] + [a + '\n' for a in args] |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
398 fp = repo.opener('hgrc', 'w') |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
399 fp.writelines(rcmaps) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
400 fp.close() |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
401 ui.readconfig(repo.join('hgrc')) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
402 kwmaps = dict(ui.configitems('keywordmaps')) |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
403 elif opts.get('default'): |
13298
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
404 if svn: |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
405 ui.status(_('\n\tconfiguration using default svn keywordset\n')) |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
406 else: |
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
407 ui.status(_('\n\tconfiguration using default cvs keywordset\n')) |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
408 kwmaps = _defaultkwmaps(ui) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
409 if uikwmaps: |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
410 ui.status(_('\tdisabling current template maps\n')) |
5946
ee0dc0f3804b
keyword: improve use of dicts
Christian Ebert <blacktrash@gmx.net>
parents:
5945
diff
changeset
|
411 for k, v in kwmaps.iteritems(): |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
412 ui.setconfig('keywordmaps', k, v) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
413 else: |
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
414 ui.status(_('\n\tconfiguration using current keyword template maps\n')) |
11214
b05ec0cc063e
keyword: offer svn-like default keywordmaps
Christian Ebert <blacktrash@gmx.net>
parents:
11213
diff
changeset
|
415 kwmaps = dict(uikwmaps) or _defaultkwmaps(ui) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
416 |
6502
ba8a0338baf7
keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents:
6416
diff
changeset
|
417 uisetup(ui) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
418 reposetup(ui, repo) |
10714
9c0a1887bd4b
keyword: do not bother about detecting extension path in demo
Christian Ebert <blacktrash@gmx.net>
parents:
10713
diff
changeset
|
419 ui.write('[extensions]\nkeyword =\n') |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
420 demoitems('keyword', ui.configitems('keyword')) |
13298
f715e6bd8091
keyword: inform user about current keywordset in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents:
13270
diff
changeset
|
421 demoitems('keywordset', ui.configitems('keywordset')) |
5946
ee0dc0f3804b
keyword: improve use of dicts
Christian Ebert <blacktrash@gmx.net>
parents:
5945
diff
changeset
|
422 demoitems('keywordmaps', kwmaps.iteritems()) |
9942
b6d484168350
keyword: sort demo output to ensure deterministic output
Martin Geisler <mg@lazybytes.net>
parents:
9494
diff
changeset
|
423 keywords = '$' + '$\n$'.join(sorted(kwmaps.keys())) + '$\n' |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13971
diff
changeset
|
424 repo.wopener.write(fn, keywords) |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11296
diff
changeset
|
425 repo[None].add([fn]) |
10713
b9c3f8e88e4f
keyword: make kwdemo less verbose
Christian Ebert <blacktrash@gmx.net>
parents:
10712
diff
changeset
|
426 ui.note(_('\nkeywords written to %s:\n') % fn) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
427 ui.note(keywords) |
10713
b9c3f8e88e4f
keyword: make kwdemo less verbose
Christian Ebert <blacktrash@gmx.net>
parents:
10712
diff
changeset
|
428 repo.dirstate.setbranch('demobranch') |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
429 for name, cmd in ui.configitems('hooks'): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
430 if name.split('.', 1)[0].find('commit') > -1: |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
431 repo.ui.setconfig('hooks', name, '') |
10499
4401b0dfee88
keyword: mark improved demo commit message for translation
Christian Ebert <blacktrash@gmx.net>
parents:
10495
diff
changeset
|
432 msg = _('hg keyword configuration and expansion example') |
10713
b9c3f8e88e4f
keyword: make kwdemo less verbose
Christian Ebert <blacktrash@gmx.net>
parents:
10712
diff
changeset
|
433 ui.note("hg ci -m '%s'\n" % msg) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
434 repo.commit(text=msg) |
9281
2a4131b264c3
keyword: refactor kwdemo and make output translatable
Christian Ebert <blacktrash@gmx.net>
parents:
9264
diff
changeset
|
435 ui.status(_('\n\tkeywords expanded\n')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
436 ui.write(repo.wread(fn)) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
437 shutil.rmtree(tmpdir, ignore_errors=True) |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
438 |
14300
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
439 @command('kwexpand', commands.walkopts, _('hg kwexpand [OPTION]... [FILE]...')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
440 def expand(ui, repo, *pats, **opts): |
8763 | 441 '''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
|
442 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
443 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
|
444 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
445 kwexpand refuses to run if given files contain local changes. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
446 ''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
447 # 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
|
448 _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
|
449 |
14300
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
450 @command('kwfiles', |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
451 [('A', 'all', None, _('show keyword status flags of all files')), |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
452 ('i', 'ignore', None, _('show files excluded from expansion')), |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
453 ('u', 'unknown', None, _('only show unknown (not tracked) files')), |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
454 ] + commands.walkopts, |
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
455 _('hg kwfiles [OPTION]... [FILE]...')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
456 def files(ui, repo, *pats, **opts): |
8957
7672d8e13d0d
keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents:
8956
diff
changeset
|
457 '''show files configured for keyword expansion |
8950
be6b57b2bdb8
keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents:
8939
diff
changeset
|
458 |
9264
9abddf8c29c7
keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
459 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
|
460 [keyword] configuration patterns. |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
461 |
9264
9abddf8c29c7
keyword: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
462 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
|
463 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
|
464 expansion. |
8950
be6b57b2bdb8
keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents:
8939
diff
changeset
|
465 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10967
diff
changeset
|
466 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
|
467 inclusion and exclusion of files. |
8957
7672d8e13d0d
keyword: improve help for kwfiles
Christian Ebert <blacktrash@gmx.net>
parents:
8956
diff
changeset
|
468 |
9494
bdd8a41ea6f6
keyword: uppercase short option for kwfiles --all, like hg status -A
Christian Ebert <blacktrash@gmx.net>
parents:
9493
diff
changeset
|
469 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
|
470 of files are:: |
9195
8c719222ddd7
keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents:
9157
diff
changeset
|
471 |
8c719222ddd7
keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents:
9157
diff
changeset
|
472 K = keyword expansion candidate |
9491
12e340b9f1bf
keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents:
9467
diff
changeset
|
473 k = keyword expansion candidate (not tracked) |
9195
8c719222ddd7
keyword: reformat kwfiles help for minirst parser
Christian Ebert <blacktrash@gmx.net>
parents:
9157
diff
changeset
|
474 I = ignored |
9491
12e340b9f1bf
keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents:
9467
diff
changeset
|
475 i = ignored (not tracked) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
476 ''' |
6115
8121e9d7bfd2
keyword: make main class and hg command accessible
Christian Ebert <blacktrash@gmx.net>
parents:
6114
diff
changeset
|
477 kwt = kwtools['templater'] |
9491
12e340b9f1bf
keyword: kwfiles --unknown instead of --untracked
Christian Ebert <blacktrash@gmx.net>
parents:
9467
diff
changeset
|
478 status = _status(ui, repo, kwt, *pats, **opts) |
9493
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
479 cwd = pats and repo.getcwd() or '' |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
480 modified, added, removed, deleted, unknown, ignored, clean = status |
9493
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
481 files = [] |
10652
e7f840e4ac7d
keyword: remove deprecated options
Christian Ebert <blacktrash@gmx.net>
parents:
10604
diff
changeset
|
482 if not opts.get('unknown') or opts.get('all'): |
9493
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
483 files = sorted(modified + added + clean) |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
484 wctx = repo[None] |
12627
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
485 kwfiles = kwt.iskwfile(files, wctx) |
13079
f3a2bb1e4255
keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
13078
diff
changeset
|
486 kwdeleted = kwt.iskwfile(deleted, wctx) |
12627
7d9162892899
keyword: make iskwfile() a weeding method in lieu of a boolean
Christian Ebert <blacktrash@gmx.net>
parents:
12626
diff
changeset
|
487 kwunknown = kwt.iskwfile(unknown, wctx) |
9493
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
488 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
|
489 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
|
490 else: |
13079
f3a2bb1e4255
keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
13078
diff
changeset
|
491 showfiles = [], [], [] |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
492 if opts.get('all') or opts.get('ignore'): |
9493
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
493 showfiles += ([f for f in files if f not in kwfiles], |
fe1ecd15c6bd
keyword: make kwfiles -u show untracked files only (like status)
Christian Ebert <blacktrash@gmx.net>
parents:
9492
diff
changeset
|
494 [f for f in unknown if f not in kwunknown]) |
13079
f3a2bb1e4255
keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
13078
diff
changeset
|
495 kwlabels = 'enabled deleted enabledunknown ignored ignoredunknown'.split() |
f3a2bb1e4255
keyword: make kwfiles show deleted files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents:
13078
diff
changeset
|
496 kwstates = zip('K!kIi', showfiles, kwlabels) |
13078
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
497 for char, filenames, kwstate in kwstates: |
7417
d3f1d316b72b
keyword: do not shadow builtin format (detected by pychecker)
Christian Ebert <blacktrash@gmx.net>
parents:
7391
diff
changeset
|
498 fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n' |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
499 for f in filenames: |
13078
69405131c968
keyword: colorize hg kwfiles output
Christian Ebert <blacktrash@gmx.net>
parents:
13072
diff
changeset
|
500 ui.write(fmt % repo.pathto(f, cwd), label='kwfiles.' + kwstate) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
501 |
14300
1b8e421d8e42
keyword: use cmdutil.command decorator
Martin Geisler <mg@aragost.com>
parents:
14168
diff
changeset
|
502 @command('kwshrink', commands.walkopts, _('hg kwshrink [OPTION]... [FILE]...')) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
503 def shrink(ui, repo, *pats, **opts): |
8763 | 504 '''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
|
505 |
13270
1e0d631b843b
keyword: update documentation for kwshrink
Christian Ebert <blacktrash@gmx.net>
parents:
13079
diff
changeset
|
506 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
|
507 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
508 kwshrink refuses to run if given files contain local changes. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
509 ''' |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
510 # 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
|
511 _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
|
512 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
513 |
6502
ba8a0338baf7
keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents:
6416
diff
changeset
|
514 def uisetup(ui): |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
515 ''' Monkeypatches dispatch._parse to retrieve user command.''' |
6502
ba8a0338baf7
keyword: collect filename patterns, wrap dispatch._parse in uisetup
Christian Ebert <blacktrash@gmx.net>
parents:
6416
diff
changeset
|
516 |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
517 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
|
518 '''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
|
519 cmd, func, args, options, cmdoptions = orig(ui, args) |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
520 kwtools['hgcmd'] = cmd |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
521 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
|
522 |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
523 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
|
524 |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
525 def reposetup(ui, repo): |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
526 '''Sets up repo as kwrepo for keyword substitution. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
527 Overrides file method to return kwfilelog instead of filelog |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
528 if file matches user configuration. |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
529 Wraps commit to overwrite configured files with updated |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
530 keyword substitutions. |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
531 Monkeypatches patch and webcommands.''' |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
532 |
7853
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
533 try: |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
534 if (not repo.local() or kwtools['hgcmd'] in nokwcommands.split() |
7853
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
535 or '.hg' in util.splitpath(repo.root) |
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
536 or repo._url.startswith('bundle:')): |
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
537 return |
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
538 except AttributeError: |
af062a9fea9b
bundlerepo: reintroduce dirstate
Matt Mackall <mpm@selenic.com>
parents:
7762
diff
changeset
|
539 pass |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
540 |
11678
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
541 inc, exc = [], ['.hg*'] |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
542 for pat, opt in ui.configitems('keyword'): |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
543 if opt != 'ignore': |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
544 inc.append(pat) |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
545 else: |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
546 exc.append(pat) |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
547 if not inc: |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
548 return |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
549 |
f5aa20e177c0
keyword: move collecting of [keyword] patterns to reposetup (issue2303)
Christian Ebert <blacktrash@gmx.net>
parents:
11350
diff
changeset
|
550 kwtools['templater'] = 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
|
551 |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
552 class kwrepo(repo.__class__): |
6114
ee83510fe567
keyword: move expand/shrink decisions into kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents:
6092
diff
changeset
|
553 def file(self, f): |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
554 if f[0] == '/': |
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
555 f = f[1:] |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
556 return kwfilelog(self.sopener, kwt, f) |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
557 |
5884
a139f141dcae
keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents:
5831
diff
changeset
|
558 def wread(self, filename): |
a139f141dcae
keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents:
5831
diff
changeset
|
559 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
|
560 return kwt.wread(filename, data) |
5884
a139f141dcae
keyword: support mq; handle (q)record more gracefully
Christian Ebert <blacktrash@gmx.net>
parents:
5831
diff
changeset
|
561 |
9096
47bc92755b95
keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents:
8996
diff
changeset
|
562 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
|
563 # 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
|
564 # 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
|
565 self.commitctx = self.kwcommitctx |
47bc92755b95
keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents:
8996
diff
changeset
|
566 try: |
10495
2c2d2f1354b4
keyword: do not postpone commit hooks
Christian Ebert <blacktrash@gmx.net>
parents:
10492
diff
changeset
|
567 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
|
568 finally: |
47bc92755b95
keyword: eliminate potential reference cycles from kwrepo
Christian Ebert <blacktrash@gmx.net>
parents:
8996
diff
changeset
|
569 del self.commitctx |
8996
23e941d7f507
keyword: make repo.commit use a custom commitctx wrapper
Christian Ebert <blacktrash@gmx.net>
parents:
8957
diff
changeset
|
570 |
23e941d7f507
keyword: make repo.commit use a custom commitctx wrapper
Christian Ebert <blacktrash@gmx.net>
parents:
8957
diff
changeset
|
571 def kwcommitctx(self, ctx, error=False): |
10604
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
572 n = super(kwrepo, self).commitctx(ctx, error) |
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
573 # no lock needed, only called from repo.commit() which already locks |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
574 if not kwt.record: |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
575 restrict = kwt.restrict |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
576 kwt.restrict = True |
11320
e4274f9f97c8
keyword: pass context to kwtemplater.overwrite
Christian Ebert <blacktrash@gmx.net>
parents:
11303
diff
changeset
|
577 kwt.overwrite(self[n], sorted(ctx.added() + ctx.modified()), |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
578 False, True) |
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
579 kwt.restrict = restrict |
10604
9a36d159595f
keyword: remove spurious locks, improve handling of wlock
Christian Ebert <blacktrash@gmx.net>
parents:
10603
diff
changeset
|
580 return n |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
581 |
12498
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
582 def rollback(self, dryrun=False): |
12723
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
583 wlock = self.wlock() |
12498
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
584 try: |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
585 if not dryrun: |
12604
415ab8911724
keyword: rename variable "cfiles" to "changed" for clarity
Christian Ebert <blacktrash@gmx.net>
parents:
12498
diff
changeset
|
586 changed = self['.'].files() |
12498
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
587 ret = super(kwrepo, self).rollback(dryrun) |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
588 if not dryrun: |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
589 ctx = self['.'] |
12723
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
590 modified, added = _preselect(self[None].status(), changed) |
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
591 kwt.overwrite(ctx, modified, True, True) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
592 kwt.overwrite(ctx, added, True, False) |
12498
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
593 return ret |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
594 finally: |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
595 wlock.release() |
4846e8cd9327
keyword: support rollback by restoring expansion to previous values
Christian Ebert <blacktrash@gmx.net>
parents:
12497
diff
changeset
|
596 |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
597 # monkeypatches |
14451
c78d41db6f88
patch: refactor file creation/removal detection
Patrick Mezard <pmezard@gmail.com>
parents:
14367
diff
changeset
|
598 def kwpatchfile_init(orig, self, ui, fname, backend, mode, create, remove, |
10967
479f15f3faa9
keyword: monkeypatch patch so that optional args can be passed as kwargs
Augie Fackler <durin42@gmail.com>
parents:
10894
diff
changeset
|
599 missing=False, eolmode=None): |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
600 '''Monkeypatch/wrap patch.patchfile.__init__ to avoid |
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
601 rejects or conflicts due to expanded keywords in working dir.''' |
14451
c78d41db6f88
patch: refactor file creation/removal detection
Patrick Mezard <pmezard@gmail.com>
parents:
14367
diff
changeset
|
602 orig(self, ui, fname, backend, mode, create, remove, missing, eolmode) |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
603 # shrink keywords read from working dir |
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
604 self.lines = kwt.shrinklines(self.fname, self.lines) |
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
605 |
7308
b6f5490effbf
patch: turn patch.diff() into a generator
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7216
diff
changeset
|
606 def kw_diff(orig, repo, node1=None, node2=None, match=None, changes=None, |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
11681
diff
changeset
|
607 opts=None, prefix=''): |
12497
5d00a35ea2ea
keyword: do not expand at all during diff
Christian Ebert <blacktrash@gmx.net>
parents:
12496
diff
changeset
|
608 '''Monkeypatch patch.diff to avoid expansion.''' |
5d00a35ea2ea
keyword: do not expand at all during diff
Christian Ebert <blacktrash@gmx.net>
parents:
12496
diff
changeset
|
609 kwt.restrict = True |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
11681
diff
changeset
|
610 return orig(repo, node1, node2, match, changes, opts, prefix) |
6667
01e95d4bc66c
keyword: disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents:
6603
diff
changeset
|
611 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
612 def kwweb_skip(orig, web, req, tmpl): |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
613 '''Wraps webcommands.x turning off keyword expansion.''' |
8638
c6483eec6092
keyword: rename matcher() to match() mimicking changes in main
Christian Ebert <blacktrash@gmx.net>
parents:
8567
diff
changeset
|
614 kwt.match = util.never |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
615 return orig(web, req, tmpl) |
6503
4572beeacff1
keyword: privatize remaining monkeypatches by moving them into reposetup
Christian Ebert <blacktrash@gmx.net>
parents:
6502
diff
changeset
|
616 |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
617 def kw_copy(orig, ui, repo, pats, opts, rename=False): |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
618 '''Wraps cmdutil.copy so that copy/rename destinations do not |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
619 contain expanded keywords. |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
620 Note that the source of a regular file destination may also be a |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
621 symlink: |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
622 hg cp sym x -> x is symlink |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
623 cp sym x; hg cp -A sym x -> x is file (maybe expanded keywords) |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
624 For the latter we have to follow the symlink to find out whether its |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
625 target is configured for expansion and we therefore must unexpand the |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
626 keywords in the destination.''' |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
627 orig(ui, repo, pats, opts, rename) |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
628 if opts.get('dry_run'): |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
629 return |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
630 wctx = repo[None] |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
631 cwd = repo.getcwd() |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
632 |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
633 def haskwsource(dest): |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
634 '''Returns true if dest is a regular file and configured for |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
635 expansion or a symlink which points to a file configured for |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
636 expansion. ''' |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
637 source = repo.dirstate.copied(dest) |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
638 if 'l' in wctx.flags(source): |
13971
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13885
diff
changeset
|
639 source = scmutil.canonpath(repo.root, cwd, |
bfeaa88b875d
move canonpath from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13885
diff
changeset
|
640 os.path.realpath(source)) |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
641 return kwt.match(source) |
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
642 |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
643 candidates = [f for f in repo.dirstate.copies() if |
13069
6aff4f144ad3
keyword: copy: when copied source is a symlink, follow it
Christian Ebert <blacktrash@gmx.net>
parents:
13025
diff
changeset
|
644 not 'l' in wctx.flags(f) and haskwsource(f)] |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
645 kwt.overwrite(wctx, candidates, False, False) |
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
646 |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
647 def kw_dorecord(orig, ui, repo, commitfunc, *pats, **opts): |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
648 '''Wraps record.dorecord expanding keywords after recording.''' |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
649 wlock = repo.wlock() |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
650 try: |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
651 # record returns 0 even when nothing has changed |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
652 # therefore compare nodes before and after |
12631
7b34fdffed65
keyword: switch kwtemplater.record in kw_dorecord()
Christian Ebert <blacktrash@gmx.net>
parents:
12630
diff
changeset
|
653 kwt.record = True |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
654 ctx = repo['.'] |
12723
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
655 wstatus = repo[None].status() |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
656 ret = orig(ui, repo, commitfunc, *pats, **opts) |
12630
94926263b7ab
keyword: specific regular expressions depending on read mode
Christian Ebert <blacktrash@gmx.net>
parents:
12628
diff
changeset
|
657 recctx = repo['.'] |
94926263b7ab
keyword: specific regular expressions depending on read mode
Christian Ebert <blacktrash@gmx.net>
parents:
12628
diff
changeset
|
658 if ctx != recctx: |
12723
eaa09d25e7c6
keyword: code cleanup
Christian Ebert <blacktrash@gmx.net>
parents:
12709
diff
changeset
|
659 modified, added = _preselect(wstatus, recctx.files()) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
660 kwt.restrict = False |
12685
a247751652ba
keyword: enforce subn method via boolean switch
Christian Ebert <blacktrash@gmx.net>
parents:
12684
diff
changeset
|
661 kwt.overwrite(recctx, modified, False, True) |
a247751652ba
keyword: enforce subn method via boolean switch
Christian Ebert <blacktrash@gmx.net>
parents:
12684
diff
changeset
|
662 kwt.overwrite(recctx, added, False, True, True) |
12625
d87f3ff904ba
keyword: refactor kwtemplater.overwrite()
Christian Ebert <blacktrash@gmx.net>
parents:
12605
diff
changeset
|
663 kwt.restrict = True |
11045
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
664 return ret |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
665 finally: |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
666 wlock.release() |
eb67196d20fa
keyword: support (q)record
Christian Ebert <blacktrash@gmx.net>
parents:
11044
diff
changeset
|
667 |
12709
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12685
diff
changeset
|
668 def kwfilectx_cmp(orig, self, fctx): |
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12685
diff
changeset
|
669 # keyword affects data size, comparing wdir and filelog size does |
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12685
diff
changeset
|
670 # not make sense |
12732
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
671 if (fctx._filerev is None and |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
672 (self._repo._encodefilterpats or |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
673 kwt.match(fctx.path()) and not 'l' in fctx.flags()) or |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
674 self.size() == fctx.size()): |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
675 return self._filelog.cmp(self._filenode, fctx.data()) |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
676 return True |
4bca87c29445
keyword: only use expensive fctx.cmp when needed
Christian Ebert <blacktrash@gmx.net>
parents:
12723
diff
changeset
|
677 |
12709
4147a292c508
filectx: use ctx.size comparisons to speed up ctx.cmp
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12685
diff
changeset
|
678 extensions.wrapfunction(context.filectx, 'cmp', kwfilectx_cmp) |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
679 extensions.wrapfunction(patch.patchfile, '__init__', kwpatchfile_init) |
12497
5d00a35ea2ea
keyword: do not expand at all during diff
Christian Ebert <blacktrash@gmx.net>
parents:
12496
diff
changeset
|
680 extensions.wrapfunction(patch, 'diff', kw_diff) |
12626
41df968a54c9
keyword: support copy and rename
Christian Ebert <blacktrash@gmx.net>
parents:
12625
diff
changeset
|
681 extensions.wrapfunction(cmdutil, 'copy', kw_copy) |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
682 for c in 'annotate changeset rev filediff diff'.split(): |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
6933
diff
changeset
|
683 extensions.wrapfunction(webcommands, c, kwweb_skip) |
11168
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
684 for name in recordextensions.split(): |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
685 try: |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
686 record = extensions.find(name) |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
687 extensions.wrapfunction(record, 'dorecord', kw_dorecord) |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
688 except KeyError: |
6d0d945f9e52
keyword: support extensions using dorecord, e.g. crecord
Christian Ebert <blacktrash@gmx.net>
parents:
11096
diff
changeset
|
689 pass |
5815
0637d97a8cb4
Add extension for filewise RCS-keyword expansion in working dir
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
690 |
13299
f24ea9356e7d
keyword: move repo.__class__ assignment out of monkeypatch context
Christian Ebert <blacktrash@gmx.net>
parents:
13298
diff
changeset
|
691 repo.__class__ = kwrepo |