annotate extensions/kwarchive.py @ 66:fe4feca5b136

The default user-filter of $Author$ is "user" now. Previously was "person".
author Franz Glasner <hg@dom66.de>
date Sun, 26 Nov 2017 17:29:49 +0100
parents bdb549d71148
children d0a1521cb164
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
34
7c4addd60935 Put keyword into the extensions itself
Franz Glasner <hg@dom66.de>
parents: 33
diff changeset
2 # $HGheader$
7c4addd60935 Put keyword into the extensions itself
Franz Glasner <hg@dom66.de>
parents: 33
diff changeset
3 #
60
eebebd7acc69 Wording of docu
Franz Glasner <hg@dom66.de>
parents: 57
diff changeset
4 """like :hg:`archive` but with keyword expansion within selected files
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
5
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
6 The patterns of files to to expanded are configured in an versioned
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
7 ``.hgkwarchive`` configuration file found in the root of the working
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
8 directory.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
9
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
10 The ``.hgkwarchive`` file uses the same syntax as all other Mercurial
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
11 configuration files.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
12
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
13 The ``[patterns]`` section specifies which files should have the keywords
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
14 expanded.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
15
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
16
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
17 Example::
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
18
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
19 [patterns]
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
20 # expand keywords in every python file except those matching "x*"
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
21 **.py =
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
22 x* = NO
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
23
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
24 A non-existing ``.hgkwarchive`` file deactivates keyword expansion as does
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
25 an empty ``[patterns]`` section.
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
26
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
27 """
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
29 from __future__ import absolute_import
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
30
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
31
42
b46ab29aefd8 Remove the "__version__" variable: use "__revision__" only instead
Franz Glasner <hg@dom66.de>
parents: 41
diff changeset
32 __revision__ = "$Revision$"
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
33
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
34 __author__ = "Franz Glasner"
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
35
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
36
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
37 import os
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
38 import itertools
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
39
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
40 from mercurial.i18n import _
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
41 from mercurial import (archival, commands, config, cmdutil, error, match,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
42 pycompat, scmutil, templatefilters, util)
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
43
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
44
57
f0c476047c29 It runs on Mercurial v4.3.1 also
Franz Glasner <hg@dom66.de>
parents: 56
diff changeset
45 testedwith = "4.3.1 4.3.2"
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
46
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
47
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
48 SHORTENED_HG_SCHEMES = {
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
49 "ssh": "hg+ssh",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
50 "http": "hg+http",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
51 "https": "hg+https",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
52 "file": "file",
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
53 }
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
54
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
55
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
56 cmdtable = {}
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
57
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
58 command = cmdutil.command(cmdtable)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
59
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
60
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
61 @command('kwarchive',
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
62 [('', 'no-decode', None, _('do not pass files through decoders')),
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
63 ('p', 'prefix', '', _('directory prefix for files in archive'),
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
64 _('PREFIX')),
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
65 ('r', 'rev', '', _('revision to distribute'), _('REV')),
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
66 ('t', 'type', '', _('type of distribution to create'), _('TYPE')),
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
67 ('', 'path', 'default', _('the canonical repository to use'), _('PATH')),
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
68 ('', "kwconfig", '', _('an alternate pattern configuration configuration file'), _('PATTERNCONFIG')),
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
69 ('', "no-shorten-path", None, _("don't shorten the path urls")),
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
70 ('', "user-filter", "user", _("the part of the user to be printed"), _("USERFILTER")),
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
71 ] + cmdutil.subrepoopts + cmdutil.walkopts,
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
72 _('[OPTION]... DEST'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
73 def kwarchive(ui, repo, dest, **opts):
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
74 '''create an unversioned archive of a repository revision with some keywords expanded
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
75
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
76 By default, the revision used is the parent of the working
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
77 directory; use -r/--rev to specify a different revision.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
78
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
79 The archive type is automatically detected based on file
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
80 extension (to override, use -t/--type).
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
81
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
82 .. container:: verbose
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
83
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
84 Examples:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
85
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
86 - create a zip file containing the 1.0 release::
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
87
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
88 hg archive -r 1.0 project-1.0.zip
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
89
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
90 - create a tarball excluding .hg files::
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
91
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
92 hg archive project.tar.gz -X ".hg*"
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
93
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
94 Valid types are:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
95
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
96 :``files``: a directory full of files (default)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
97 :``tar``: tar archive, uncompressed
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
98 :``tbz2``: tar archive, compressed using bzip2
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
99 :``tgz``: tar archive, compressed using gzip
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
100 :``uzip``: zip archive, uncompressed
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
101 :``zip``: zip archive, compressed using deflate
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
102
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
103 The exact name of the destination archive or directory is given
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
104 using a format string; see :hg:`help export` for details.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
105
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
106 Each member added to an archive file has a directory prefix
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
107 prepended. Use -p/--prefix to specify a format string for the
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
108 prefix. The default is the basename of the archive, with suffixes
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
109 removed.
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
110
41
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
111 Use --path to specify named path information from :hg:`paths` as
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
112 the canonical repository location. Use ``.`` for the current
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
113 repository root root. If no path is given then ``default`` is
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
114 assumed.
35
f29c98e54f50 Implement a "--path" option for kwarchive to select a repository to use as canonical one
Franz Glasner <hg@dom66.de>
parents: 34
diff changeset
115
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
116 Full path URLs are printed somewhat shortened by default. To use
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
117 them as-is use the --no-shorten-path option.
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
118
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
119 Allowed --user-filter values are:
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
120
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
121 :``user``: the short representation of a user name or email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
122 :``person``: the name before an email address as per RFC 5322
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
123 :``email``: the email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
124
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
125 Returns 0 on success.
41
c05d8dcb4bb0 Doku: Enhance
Franz Glasner <hg@dom66.de>
parents: 36
diff changeset
126
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
127 '''
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
128
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
129 opts = pycompat.byteskwargs(opts)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
130 ctx = scmutil.revsingle(repo, opts.get('rev'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
131 if not ctx:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
132 raise error.Abort(_('no working directory: please specify a revision'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
133 node = ctx.node()
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
134 dest = cmdutil.makefilename(repo, dest, node)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
135 if os.path.realpath(dest) == repo.root:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
136 raise error.Abort(_('repository root cannot be destination'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
137
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
138 kind = opts.get('type') or archival.guesskind(dest) or 'files'
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
139 prefix = opts.get('prefix')
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
140
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
141 if dest == '-':
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
142 if kind == 'files':
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
143 raise error.Abort(_('cannot archive plain files to stdout'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
144 dest = cmdutil.makefileobj(repo, dest)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
145 if not prefix:
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
146 prefix = os.path.basename(repo.root) + '-%h'
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
147
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
148 prefix = cmdutil.makefilename(repo, prefix, node)
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
149 matchfn = scmutil.match(ctx, [], opts)
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
150
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
151 #
31
0597395e2d18 Comment: better explanation of what is monkey-patched
Franz Glasner <hg@dom66.de>
parents: 30
diff changeset
152 # Monkey patch archival's archivers classes so that an archiver's "addfile()"
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
153 # expands keywords
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
154 #
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
155 for ac in ("fileit", "tarit", "zipit",):
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
156 patch_archiver_class(
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
157 ac,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
158 make_keyword_filter(
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
159 ui,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
160 repo,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
161 ctx,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
162 ac,
35
f29c98e54f50 Implement a "--path" option for kwarchive to select a repository to use as canonical one
Franz Glasner <hg@dom66.de>
parents: 34
diff changeset
163 archival.tidyprefix(dest, kind, prefix),
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
164 hgpath=opts.get("path"),
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
165 shorten_path_url=not opts.get("no_shorten_path"),
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
166 user_filter=get_checked_user_filter(opts),
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
167 kwconfig=opts.get("kwconfig")))
30
1670760f695f Monkey-patch all current archivers in mercurial.archival: fileit, tarit and ziptit
Franz Glasner <hg@dom66.de>
parents: 29
diff changeset
168
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
169 archival.archive(repo, dest, node, kind, not opts.get('no_decode'),
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
170 matchfn, prefix, subrepos=opts.get('subrepos'))
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
171
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
172 # XXX FIXME: Should the original methods be restored here?
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
173
46
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
174 # XXX FIXME: Should we automatically amend ".hg_archival.txt" with a
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
175 # path item? But this means shat we should know the complete
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
176 # configuration ("ui.archivemeta") and it's name and some
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
177 # output match filters (see archival.archive()).
4a0c26dfef3c Comment about automatically amending .hg_archival.txt with "path" items.
Franz Glasner <hg@dom66.de>
parents: 45
diff changeset
178
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
179
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
180 @command('kwprint',
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
181 [('r', 'rev', '', _('revision to distribute'), _('REV')),
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
182 ('', 'path', 'default', _('the canonical repository to use'), _('PATH')),
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
183 ('', "no-shorten-path", None, _("don't shorten the path urls")),
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
184 ('', "user-filter", "user", _("the part of the user to be printed"), _("USERFILTER")),
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
185 ] + cmdutil.subrepoopts + cmdutil.walkopts,
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
186 _('[OPTION]...'))
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
187 def kwprint(ui, repo, **opts):
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
188 '''print the file-independent keywords
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
189
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
190 By default, the revision used is the parent of the working
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
191 directory; use -r/--rev to specify a different revision.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
192
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
193 Use --path to specify named path information from :hg:`paths` as
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
194 the canonical repository location. Use ``.`` for the current
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
195 repository root root. If no path is given then ``default`` is
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
196 assumed.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
197
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
198 Full path URLs are printed somewhat shortened by default. To use
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
199 them as-is use the --no-shorten-path option.
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
200
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
201 Allowed --user-filter values are:
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
202
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
203 :``user``: the short representation of a user name or email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
204 :``person``: the name before an email address as per RFC 5322
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
205 :``email``: the email address
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
206
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
207 Returns 0 on success.
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
208
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
209 '''
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
210
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
211 opts = pycompat.byteskwargs(opts)
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
212 ctx = scmutil.revsingle(repo, opts.get('rev'))
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
213 if not ctx:
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
214 raise error.Abort(_('no working directory: please specify a revision'))
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
215 node = ctx.node()
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
216
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
217 prefix = cmdutil.makefilename(repo, "", node)
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
218
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
219 keywords = make_node_keywords(
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
220 ui, repo, ctx, prefix,
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
221 hgpath=opts.get("path"),
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
222 shorten_path_url=not opts.get("no_shorten_path"),
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
223 user_filter=get_checked_user_filter(opts))
45
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
224 for key in sorted(keywords.keys()):
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
225 ui.write("$%s: %s $\n" % (key, keywords[key]))
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
226
c077d30da0ee Implemented a "kwprint" command to print just some file-independent keywords
Franz Glasner <hg@dom66.de>
parents: 44
diff changeset
227
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
228 def patch_archiver_class(archivername, filter):
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
229 """Patch an archiver class and return the original unbound method"""
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
230
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
231 archiver_class = getattr(archival, archivername)
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
232 orig_addfile = getattr(archiver_class, "addfile")
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
233
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
234 def new_addfile(self, name, mode, isline, data):
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
235 return orig_addfile(self, name, mode, isline, filter(name, data))
32
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
236
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
237 setattr(archiver_class, "addfile", new_addfile)
cfa53f8a6607 Refactor the class' monkey-patching
Franz Glasner <hg@dom66.de>
parents: 31
diff changeset
238 return orig_addfile
29
58f47399691c New successful PoC: monkey-patch all relevant archiver's "addfile()" method
Franz Glasner <hg@dom66.de>
parents: 28
diff changeset
239
28
c8b7d0635656 PoC for archive with keyword expansion: works w/o touching subrepos
Franz Glasner <hg@dom66.de>
parents:
diff changeset
240
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
241 def make_keyword_filter(ui, repo, ctx, archive_class, prefix,
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
242 hgpath="default",
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
243 shorten_path_url=True,
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
244 user_filter="user",
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
245 kwconfig=""):
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
246 keywords = make_node_keywords(ui, repo, ctx, prefix,
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
247 hgpath=hgpath,
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
248 shorten_path_url=shorten_path_url,
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
249 user_filter=user_filter)
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
250 kwconfigdata = kwconfigname = None
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
251 if kwconfig:
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
252 kwconfigdata = open(kwconfig, "rb").read()
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
253 kwconfigname = kwconfig
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
254 try:
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
255 if kwconfigdata is None:
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
256 # .hgkwarchive
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
257 kwconfigdata = ctx[".hgkwarchive"].data()
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
258 kwconfigname = ".kwarchive"
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
259 except (IOError, LookupError):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
260 def _filter(name, data):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
261 return data
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
262 else:
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
263 #
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
264 # Parse the data in ".hgkwarchive" and generate a
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
265 # Mercurial matcher
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
266 #
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
267 cfg = config.config()
47
94ae433383a2 Allow an alternate patterns file (instead of .hgkwarchive) with the --kwconfig option.
Franz Glasner <hg@dom66.de>
parents: 46
diff changeset
268 cfg.parse(kwconfigname, kwconfigdata)
33
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
269 include = []
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
270 exclude = []
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
271 patterns = []
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
272 if cfg.items("patterns"):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
273 for pattern, style in cfg.items("patterns"):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
274 style = style.upper()
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
275 if style in ("YES", "INCLUDE",):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
276 include.append(pattern)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
277 if style in ("NO", "EXCLUDE",):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
278 exclude.append(pattern)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
279 else:
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
280 patterns.append(pattern)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
281 matcher = match.match(repo.root, '', patterns=patterns,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
282 include=include, exclude=exclude)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
283 else:
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
284 matcher = match.never(repo.root, '')
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
285
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
286 def _filter(name, data):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
287 real_name = name
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
288 if archive_class != "fileit":
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
289 if prefix:
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
290 assert name.startswith(prefix)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
291 real_name = name[len(prefix):]
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
292 if not matcher(real_name):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
293 return data
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
294 # file specific keywords
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
295 file_keywords = {
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
296 "HGsource": keywords["HGpath"] + '/' + real_name,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
297 "Source": real_name,
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
298 "File": templatefilters.basename(real_name),
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
299 "Header": "%s %s %s %s" % (real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
300 "HGid": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["Revision"], keywords["Date"], keywords["Author"]),
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
301 "HGheader": "%s %s %s %s" % (keywords["HGpath"] + '/' + real_name, keywords["HGrevision"], keywords["Date"], keywords["Author"]),
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
302 "Id": "%s %s %s %s" % (templatefilters.basename(real_name), keywords["Revision"], keywords["Date"], keywords["Author"]),
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
303 }
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
304 # This prevents unwanted keyword expansion here
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
305 _MARKER = '$'
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
306 for kw, value in itertools.chain(keywords.items(), file_keywords.items()):
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
307 filekw = _MARKER + kw + _MARKER
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
308 filevalue = "%s%s: %s %s" % (_MARKER, kw, value, _MARKER)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
309 data = data.replace(filekw, filevalue)
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
310 return data
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
311
dc8db9693262 kwarchive expands keyword on given files (.hgkwarchive with generic Mercurial patterns)
Franz Glasner <hg@dom66.de>
parents: 32
diff changeset
312 return _filter
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
313
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
314
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
315 def make_node_keywords(ui, repo, ctx, prefix,
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
316 hgpath="default",
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
317 shorten_path_url=True,
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
318 user_filter="user"):
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
319 """Make all the node-specific (i.e. file-path independent) keywords
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
320
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
321 """
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
322 if hgpath:
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
323 if hgpath == '.':
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
324 path_uri = repo.root
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
325 else:
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
326 try:
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
327 if shorten_path_url:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
328 path_url = util.url(ui.paths[hgpath].loc)
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
329 path_url.scheme = SHORTENED_HG_SCHEMES.get(path_url.scheme, "hg")
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
330 path_url.user = None
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
331 path_url.passwd = None
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
332 path_url.host = stripped_hostname(path_url.host)
56
333f98d045ab FIX: Remove the port information from a cleaned path url also
Franz Glasner <hg@dom66.de>
parents: 52
diff changeset
333 path_url.port = None
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
334 path_uri = bytes(path_url)
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
335 else:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
336 path_uri = util.hidepassword(ui.paths[hgpath].loc)
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
337 except LookupError:
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
338 raise error.Abort(_('repository %s not found') % hgpath)
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
339 else:
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
340 path_uri = repo.root
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
341 keywords = {
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
342 "HGpath": path_uri,
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
343 "HGrevision": ctx.hex(),
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
344 "Revision": templatefilters.short(ctx.hex()),
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
345 "Date": templatefilters.isodatesec(ctx.date()),
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
346 }
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
347 if user_filter == "user":
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
348 keywords["Author"] = templatefilters.userfilter(ctx.user())
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
349 elif user_filter == "person":
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
350 keywords["Author"] = templatefilters.utf8(templatefilters.person(ctx.user()).replace(' ', '+'))
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
351 elif user_filter == "email":
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
352 keywords["Author"] = templatefilters.email(ctx.user())
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
353
44
71b321436cc1 Refactor: generate all node-specific keywords (file-path independent) in a dedicated function
Franz Glasner <hg@dom66.de>
parents: 42
diff changeset
354 return keywords
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
355
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
356
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
357 def stripped_hostname(hostname):
56
333f98d045ab FIX: Remove the port information from a cleaned path url also
Franz Glasner <hg@dom66.de>
parents: 52
diff changeset
358 """Return `hostname` without any domain port information"""
51
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
359 if not hostname:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
360 return hostname
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
361 idx = hostname.find('.')
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
362 if idx < 0:
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
363 return hostname
3807a60ee0dd Shorten path urls by default when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 47
diff changeset
364 return hostname[:idx]
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
365
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
366
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
367 def get_checked_user_filter(opts):
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
368 uf = opts.get("user_filter")
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
369 if not uf in ("person", "user", "email"):
66
fe4feca5b136 The default user-filter of $Author$ is "user" now.
Franz Glasner <hg@dom66.de>
parents: 65
diff changeset
370 raise error.Abort(_("user filter must be any of `user', `person' or `email'"))
65
bdb549d71148 Allow customization of the $Author$ output when expanding keywords.
Franz Glasner <hg@dom66.de>
parents: 64
diff changeset
371 return uf