hgkw/keyword.py
author Christian Ebert <blacktrash@gmx.net>
Fri, 22 Aug 2008 11:53:30 +0200
branch0.9.2compat
changeset 486 a6f4e1367978
parent 480 c5e1178401c5
child 519 22a306a7b411
permissions -rw-r--r--
(0.9.2compat) add merge, resolve to restricted This is not really backwards compatible (test only as comment) and doesn't prevent extra conflicts with older Hg versions. On the other hand it doesn't do any damage either and provides the 3-way merge ease if possible.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
     1
# keyword.py - $Keyword$ expansion for Mercurial
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     2
#
339
98336da24c5e (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 332
diff changeset
     3
# Copyright 2007, 2008 Christian Ebert <blacktrash@gmx.net>
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     4
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     5
# This software may be used and distributed according to the terms
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     6
# of the GNU General Public License, incorporated herein by reference.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     7
#
82
9bf0f7db5928 Add keyword; comment backwards compatible import
Christian Ebert <blacktrash@gmx.net>
parents: 81
diff changeset
     8
# $Id$
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
     9
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    10
# Keyword expansion hack against the grain of a DSCM
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    11
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    12
# There are many good reasons why this is not needed in a distributed
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    13
# SCM, still it may be useful in very small projects based on single
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    14
# files (like LaTeX packages), that are mostly addressed to an audience
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    15
# not running a version control system.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    16
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    17
# For in-depth discussion refer to
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    18
# <http://www.selenic.com/mercurial/wiki/index.cgi/KeywordPlan>.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    19
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    20
# Keyword expansion is based on Mercurial's changeset template mappings.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    21
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    22
# Binary files are not touched.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    23
#
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    24
# Setup in hgrc:
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    25
#
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    26
#   [extensions]
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    27
#   # enable extension
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    28
#   keyword = /full/path/to/hgkw/keyword.py
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    29
#   # or, if script in canonical hgext folder:
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    30
#   # hgext.keyword =
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    31
#
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    32
# Files to act upon/ignore are specified in the [keyword] section.
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    33
# Customized keyword template mappings in the [keywordmaps] section.
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    34
#
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    35
# Run "hg help keyword" and "hg kwdemo" to get info on configuration.
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    36
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    37
'''keyword expansion in local repositories
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    38
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    39
This extension expands RCS/CVS-like or self-customized $Keywords$
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    40
in tracked text files selected by your configuration.
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    41
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    42
Keywords are only expanded in local repositories and not stored in
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    43
the change history. The mechanism can be regarded as a convenience
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    44
for the current user or for archive distribution.
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    45
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    46
Configuration is done in the [keyword] and [keywordmaps] sections
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    47
of hgrc files.
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    48
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    49
Example:
146
df9de07ce002 Move config examples into help
Christian Ebert <blacktrash@gmx.net>
parents: 145
diff changeset
    50
178
4a27c306c6a2 Add kwdemo command as online config help
Christian Ebert <blacktrash@gmx.net>
parents: 177
diff changeset
    51
    [keyword]
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    52
    # expand keywords in every python file except those matching "x*"
178
4a27c306c6a2 Add kwdemo command as online config help
Christian Ebert <blacktrash@gmx.net>
parents: 177
diff changeset
    53
    **.py =
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    54
    x*    = ignore
146
df9de07ce002 Move config examples into help
Christian Ebert <blacktrash@gmx.net>
parents: 145
diff changeset
    55
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    56
Note: the more specific you are in your filename patterns
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    57
      the less you lose speed in huge repos.
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    58
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    59
For [keywordmaps] template mapping and expansion demonstration and
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    60
control run "hg kwdemo".
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    61
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    62
An additional date template filter {date|utcdate} is provided.
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    63
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    64
The default template mappings (view with "hg kwdemo -d") can be replaced
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    65
with customized keywords and templates.
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    66
Again, run "hg kwdemo" to control the results of your config changes.
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
    67
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    68
Before changing/disabling active keywords, run "hg kwshrink" to avoid
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    69
the risk of inadvertedly storing expanded keywords in the change history.
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    70
211
110c76a94d1c help: no need for kwexpand after import, but after config change
Christian Ebert <blacktrash@gmx.net>
parents: 210
diff changeset
    71
To force expansion after enabling it, or a configuration change, run
110c76a94d1c help: no need for kwexpand after import, but after config change
Christian Ebert <blacktrash@gmx.net>
parents: 210
diff changeset
    72
"hg kwexpand".
110c76a94d1c help: no need for kwexpand after import, but after config change
Christian Ebert <blacktrash@gmx.net>
parents: 210
diff changeset
    73
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
    74
Also, when committing with the record extension or using mq's qrecord, be aware
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
    75
that keywords cannot be updated. Again, run "hg kwexpand" on the files in
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
    76
question to update keyword expansions after all changes have been checked in.
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
    77
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    78
Expansions spanning more than one line and incremental expansions,
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
    79
like CVS' $Log$, are not supported. A keyword template map
201
e826c3cdc52d Make sure there are no newlines in expansion
Christian Ebert <blacktrash@gmx.net>
parents: 192
diff changeset
    80
"Log = {desc}" expands to the first line of the changeset description.
e826c3cdc52d Make sure there are no newlines in expansion
Christian Ebert <blacktrash@gmx.net>
parents: 192
diff changeset
    81
360
ed06223f88fc (0.9.2compat) clean import handling when patchfile class available
Christian Ebert <blacktrash@gmx.net>
parents: 359
diff changeset
    82
Caveat: With Mercurial versions prior to 4574925db5c0 "hg import" might
ed06223f88fc (0.9.2compat) clean import handling when patchfile class available
Christian Ebert <blacktrash@gmx.net>
parents: 359
diff changeset
    83
        cause rejects if the patch context contains an active keyword.
ed06223f88fc (0.9.2compat) clean import handling when patchfile class available
Christian Ebert <blacktrash@gmx.net>
parents: 359
diff changeset
    84
        In that case run "hg kwshrink", and then reimport.
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
    85
        Or, better, use bundle/unbundle to share changes.
48
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    86
'''
59fedb6b41da add header and start documentation
Christian Ebert <blacktrash@gmx.net>
parents: 47
diff changeset
    87
477
03268523c017 (0.9.2compat) ddb8a222249b is backwards compatible
Christian Ebert <blacktrash@gmx.net>
parents: 464
diff changeset
    88
from mercurial import commands, cmdutil, fancyopts, filelog
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
    89
from mercurial import localrepo, patch, revlog, templater, util
422
c9899d769cdb (0.9.2compat) expand * import
Christian Ebert <blacktrash@gmx.net>
parents: 420
diff changeset
    90
from mercurial.node import nullid, hex
159
28fd5b5eb3ad Simplify backward compatible import
Christian Ebert <blacktrash@gmx.net>
parents: 158
diff changeset
    91
from mercurial.i18n import gettext as _
397
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
    92
import getopt, os, re, shutil, tempfile, time
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
    93
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
    94
commands.optionalrepo += ' kwdemo'
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
    95
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
    96
# hg commands that do not act on keywords
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
    97
nokwcommands = ('add addremove annotate bundle copy export grep incoming init'
480
c5e1178401c5 (0.9.2compat) add verify to nokwcommands
Christian Ebert <blacktrash@gmx.net>
parents: 478
diff changeset
    98
                ' log outgoing push rename rollback tip verify'
402
5e3707030bce (0.9.2compat) add glog to nokwcommands
Christian Ebert <blacktrash@gmx.net>
parents: 400
diff changeset
    99
                ' convert email glog')
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   100
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   101
# hg commands that trigger expansion only when writing to working dir,
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   102
# not when reading filelog, and unexpand when reading from working dir
486
a6f4e1367978 (0.9.2compat) add merge, resolve to restricted
Christian Ebert <blacktrash@gmx.net>
parents: 480
diff changeset
   103
restricted = 'merge record resolve qfold qimport qnew qpush qrefresh qrecord'
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   104
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   105
def utcdate(date):
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   106
    '''Returns hgdate in cvs-like UTC format.'''
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   107
    return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0]))
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   108
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   109
def textsafe(s):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   110
    '''Safe version of util.binary with reversed logic.
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   111
    Note: argument may not be None, which is allowed for util.binary.'''
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   112
    return '\0' not in s
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   113
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   114
# make keyword tools accessible
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   115
kwtools = {'templater': None, 'hgcmd': None}
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   116
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   117
# monkeypatch argument parsing
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   118
# due to backwards compatibility this can't be done in uisetup
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   119
# uisetup introduced with extensions module in 930ed513c864
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   120
def _kwdispatch_parse(ui, args):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   121
    '''Monkeypatch dispatch._parse to obtain running hg command.'''
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   122
    cmd, func, args, options, cmdoptions = _dispatch_parse(ui, args)
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   123
    kwtools['hgcmd'] = cmd
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   124
    return cmd, func, args, options, cmdoptions
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   125
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   126
try:
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   127
    # cmdutil.parse moves to dispatch._parse in 18a9fbb5cd78
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   128
    from mercurial import dispatch
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   129
    _dispatch_parse = dispatch._parse
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   130
    dispatch._parse = _kwdispatch_parse
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   131
except ImportError:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   132
    try:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   133
        # commands.parse moves to cmdutil.parse in 0c61124ad877
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   134
        _dispatch_parse = cmdutil.parse
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   135
        cmdutil.parse = _kwdispatch_parse
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   136
    except AttributeError:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   137
        _dispatch_parse = commands.parse
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   138
        commands.parse = _kwdispatch_parse
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   139
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   140
try:
366
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   141
    # templatefilters module introduced in 9f1e6ab76069
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   142
    from mercurial import templatefilters
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   143
    template_filters = templatefilters.filters
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   144
    template_firstline = templatefilters.firstline
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   145
except ImportError:
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   146
    template_filters = templater.common_filters
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   147
    template_firstline = templater.firstline
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   148
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   149
def _wwrite(repo, f, data, mf):
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   150
    '''Makes repo.wwrite backwards compatible.'''
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   151
    # 656e06eebda7 removed file descriptor argument
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   152
    # 67982d3ee76c added flags argument
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   153
    try:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   154
        repo.wwrite(f, data, mf.flags(f))
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   155
    except (AttributeError, TypeError):
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   156
        repo.wwrite(f, data)
370
a8983fed9a9e (0.9.2compat) expand keywords in raw web output, and other changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 366
diff changeset
   157
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   158
def _normal(repo, files):
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   159
    '''Backwards compatible repo.dirstate.normal/update.'''
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   160
    # 6fd953d5faea introduced dirstate.normal()
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   161
    try:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   162
        for f in files:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   163
            repo.dirstate.normal(f)
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   164
    except AttributeError:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   165
        repo.dirstate.update(files, 'n')
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   166
278
232df68a0bcc cwd optional argument of _pathto to simplify _kwfwrite
Christian Ebert <blacktrash@gmx.net>
parents: 277
diff changeset
   167
def _pathto(repo, f, cwd=None):
264
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   168
    '''kwfiles behaves similar to status, using pathto since 78b6add1f966.'''
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   169
    try:
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   170
        return repo.pathto(f, cwd)
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   171
    except AttributeError:
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   172
        return f
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   173
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   174
'''Default match argument for commit, depending on version.'''
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   175
if hasattr(cmdutil, 'match'):
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   176
    _defmatch = None
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   177
else:
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   178
    _defmatch = util.always
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   179
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   180
# commands.parse/cmdutil.parse returned nothing for
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   181
# "hg diff --rev" before 88803a69b24a due to bug in fancyopts
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   182
def _fancyopts(args, options, state):
312
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   183
    '''Fixed fancyopts from a9b7e425674f.'''
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   184
    namelist = []
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   185
    shortlist = ''
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   186
    argmap = {}
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   187
    defmap = {}
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   188
312
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   189
    for short, name, default, comment in options:
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   190
        # convert opts to getopt format
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   191
        oname = name
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   192
        name = name.replace('-', '_')
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   193
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   194
        argmap['-' + short] = argmap['--' + oname] = name
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   195
        defmap[name] = default
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   196
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   197
        # copy defaults to state
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   198
        if isinstance(default, list):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   199
            state[name] = default[:]
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   200
        elif callable(default):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   201
            print "whoa", name, default
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   202
            state[name] = None
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   203
        else:
312
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   204
            state[name] = default
59
94b26168791d Only 1 all-purpose regex, compiled at load
Christian Ebert <blacktrash@gmx.net>
parents: 58
diff changeset
   205
312
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   206
        # does it take a parameter?
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   207
        if not (default is None or default is True or default is False):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   208
            if short: short += ':'
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   209
            if oname: oname += '='
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   210
        if short:
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   211
            shortlist += short
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   212
        if name:
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   213
            namelist.append(oname)
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   214
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   215
    # parse arguments
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   216
    opts, args = getopt.getopt(args, shortlist, namelist)
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   217
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   218
    # transfer result to state
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   219
    for opt, val in opts:
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   220
        name = argmap[opt]
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   221
        t = type(defmap[name])
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   222
        if t is type(fancyopts):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   223
            state[name] = defmap[name](val)
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   224
        elif t is type(1):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   225
            state[name] = int(val)
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   226
        elif t is type(''):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   227
            state[name] = val
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   228
        elif t is type([]):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   229
            state[name].append(val)
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   230
        elif t is type(None) or t is type(False):
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   231
            state[name] = True
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   232
b92767fb8fb5 (0.9.2compat) use updated fancyopts from 88803a69b24a
Christian Ebert <blacktrash@gmx.net>
parents: 311
diff changeset
   233
    # return unparsed args
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   234
    return args
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   235
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   236
fancyopts.fancyopts = _fancyopts
227
8ae160f24b9f cmdutil.parse moves to dispatch._parse; use fancyopts bugfix
Christian Ebert <blacktrash@gmx.net>
parents: 226
diff changeset
   237
92
3c7c187e4001 Init context.filectx only once per file with class kwfilectx
Christian Ebert <blacktrash@gmx.net>
parents: 90
diff changeset
   238
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   239
class kwtemplater(object):
92
3c7c187e4001 Init context.filectx only once per file with class kwfilectx
Christian Ebert <blacktrash@gmx.net>
parents: 90
diff changeset
   240
    '''
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   241
    Sets up keyword templates, corresponding keyword regex, and
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   242
    provides keyword substitution functions.
92
3c7c187e4001 Init context.filectx only once per file with class kwfilectx
Christian Ebert <blacktrash@gmx.net>
parents: 90
diff changeset
   243
    '''
222
f956a8301c25 Shorten template setup
Christian Ebert <blacktrash@gmx.net>
parents: 221
diff changeset
   244
    templates = {
204
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   245
        'Revision': '{node|short}',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   246
        'Author': '{author|user}',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   247
        'Date': '{date|utcdate}',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   248
        'RCSFile': '{file|basename},v',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   249
        'Source': '{root}/{file},v',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   250
        'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   251
        'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}',
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   252
    }
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   253
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   254
    def __init__(self, ui, repo, inc, exc):
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   255
        self.ui = ui
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   256
        self.repo = repo
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   257
        self.matcher = util.matcher(repo.root, inc=inc, exc=exc)[1]
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   258
        self.restrict = kwtools['hgcmd'] in restricted.split()
204
2d089b691b31 Add grep, init to nokwcommands; make variables, getcmd local
Christian Ebert <blacktrash@gmx.net>
parents: 203
diff changeset
   259
222
f956a8301c25 Shorten template setup
Christian Ebert <blacktrash@gmx.net>
parents: 221
diff changeset
   260
        kwmaps = self.ui.configitems('keywordmaps')
253
22e08d0f25dc List comprehension instead of loop to create ui template dictionary
Christian Ebert <blacktrash@gmx.net>
parents: 252
diff changeset
   261
        if kwmaps: # override default templates
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   262
            kwmaps = [(k, templater.parsestring(v, False))
253
22e08d0f25dc List comprehension instead of loop to create ui template dictionary
Christian Ebert <blacktrash@gmx.net>
parents: 252
diff changeset
   263
                      for (k, v) in kwmaps]
22e08d0f25dc List comprehension instead of loop to create ui template dictionary
Christian Ebert <blacktrash@gmx.net>
parents: 252
diff changeset
   264
            self.templates = dict(kwmaps)
254
474eccf2964f Map re.escape
Christian Ebert <blacktrash@gmx.net>
parents: 253
diff changeset
   265
        escaped = map(re.escape, self.templates.keys())
252
001902b60bdd String format keyword pattern before compilation
Christian Ebert <blacktrash@gmx.net>
parents: 251
diff changeset
   266
        kwpat = r'\$(%s)(: [^$\n\r]*? )??\$' % '|'.join(escaped)
001902b60bdd String format keyword pattern before compilation
Christian Ebert <blacktrash@gmx.net>
parents: 251
diff changeset
   267
        self.re_kw = re.compile(kwpat)
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   268
366
b1105cc0982f (0.9.2compat) use templatefilters module if available; bail out in mq dir
Christian Ebert <blacktrash@gmx.net>
parents: 360
diff changeset
   269
        template_filters['utcdate'] = utcdate
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   270
        self.ct = self._changeset_templater()
233
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   271
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   272
    def _changeset_templater(self):
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   273
        '''Backwards compatible cmdutil.changeset_templater.'''
237
0a0049700af5 Document revisions of interface changes
Christian Ebert <blacktrash@gmx.net>
parents: 236
diff changeset
   274
        # before 1e0b94cfba0e there was an extra "brinfo" argument
233
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   275
        try:
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   276
            return cmdutil.changeset_templater(self.ui, self.repo,
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   277
                                               False, '', False)
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   278
        except TypeError:
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   279
            return cmdutil.changeset_templater(self.ui, self.repo,
e60fdc1990e3 Compatible changeset_templater in own function
Christian Ebert <blacktrash@gmx.net>
parents: 232
diff changeset
   280
                                               False, None, '', False)
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   281
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   282
    def getnode(self, path, fnode):
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   283
        '''Derives changenode from file path and filenode.'''
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   284
        # used by kwfilelog.read and kwexpand
477
03268523c017 (0.9.2compat) ddb8a222249b is backwards compatible
Christian Ebert <blacktrash@gmx.net>
parents: 464
diff changeset
   285
        c = self.repo.filectx(path, fileid=fnode)
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   286
        return c.node()
303
46ccec2f325f (0.9.2compat) do not bother about debug templates
Christian Ebert <blacktrash@gmx.net>
parents: 299
diff changeset
   287
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   288
    def substitute(self, data, path, node, subfunc):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   289
        '''Replaces keywords in data with expanded template.'''
303
46ccec2f325f (0.9.2compat) do not bother about debug templates
Christian Ebert <blacktrash@gmx.net>
parents: 299
diff changeset
   290
        def kwsub(mobj):
46ccec2f325f (0.9.2compat) do not bother about debug templates
Christian Ebert <blacktrash@gmx.net>
parents: 299
diff changeset
   291
            kw = mobj.group(1)
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   292
            self.ct.use_template(self.templates[kw])
303
46ccec2f325f (0.9.2compat) do not bother about debug templates
Christian Ebert <blacktrash@gmx.net>
parents: 299
diff changeset
   293
            self.ui.pushbuffer()
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   294
            self.ct.show(changenode=node, root=self.repo.root, file=path)
379
290d023e8306 (0.9.2compat) get changes from stable branch
Christian Ebert <blacktrash@gmx.net>
parents: 348
diff changeset
   295
            return '$%s: %s $' % (kw, template_firstline(self.ui.popbuffer()))
303
46ccec2f325f (0.9.2compat) do not bother about debug templates
Christian Ebert <blacktrash@gmx.net>
parents: 299
diff changeset
   296
        return subfunc(kwsub, data)
255
c4f37735be9b Turn off debug while expanding
Christian Ebert <blacktrash@gmx.net>
parents: 254
diff changeset
   297
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   298
    def expand(self, path, node, data):
186
c1b7b1d052de Avoid global vars by passing opt args to kwrepo.file
Christian Ebert <blacktrash@gmx.net>
parents: 185
diff changeset
   299
        '''Returns data with keywords expanded.'''
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   300
        if not self.restrict and self.matcher(path) and textsafe(data):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   301
            changenode = self.getnode(path, node)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   302
            return self.substitute(data, path, changenode, self.re_kw.sub)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   303
        return data
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   304
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   305
    def iskwfile(self, path, islink):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   306
        '''Returns true if path matches [keyword] pattern
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   307
        and is not a symbolic link.
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   308
        Caveat: localrepository._link fails on Windows.'''
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   309
        return self.matcher(path) and not islink(path)
134
f869c65156f7 2 expand methods including binary check in kwtemplater
Christian Ebert <blacktrash@gmx.net>
parents: 133
diff changeset
   310
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   311
    def overwrite(self, node, expand, files):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   312
        '''Overwrites selected files expanding/shrinking keywords.'''
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   313
        # repo[changeid] introduced in f6c00b17387c
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   314
        if node is not None:     # commit
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   315
            try:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   316
                ctx = self.repo[node]
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   317
            except TypeError:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   318
                ctx = self.repo.changectx(node)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   319
            mf = ctx.manifest()
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   320
            files = [f for f in ctx.files() if f in mf]
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   321
            notify = self.ui.debug
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   322
        else:                    # kwexpand/kwshrink
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   323
            try:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   324
                ctx = self.repo['.']
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   325
            except TypeError:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   326
                ctx = self.repo.changectx()
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   327
            mf = ctx.manifest()
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   328
            notify = self.ui.note
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   329
        if hasattr(ctx, 'flags'):
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   330
            # 51b0e799352f
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   331
            islink = lambda p: 'l' in ctx.flags(p)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   332
        else:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   333
            islink = mf.linkf
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   334
        candidates = [f for f in files if self.iskwfile(f, islink)]
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   335
        if candidates:
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   336
            self.restrict = True # do not expand when reading
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   337
            candidates.sort()
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   338
            action = expand and 'expanding' or 'shrinking'
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   339
            overwritten = []
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   340
            for f in candidates:
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   341
                fp = self.repo.file(f)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   342
                data = fp.read(mf[f])
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   343
                if not textsafe(data):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   344
                    continue
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   345
                if expand:
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   346
                    changenode = node or self.getnode(f, mf[f])
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   347
                    data, found = self.substitute(data, f, changenode,
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   348
                                                  self.re_kw.subn)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   349
                else:
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   350
                    found = self.re_kw.search(data)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   351
                if found:
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   352
                    notify(_('overwriting %s %s keywords\n') % (f, action))
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   353
                    self.repo.wwrite(f, data, mf.flags(f))
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   354
                    overwritten.append(f)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   355
            _normal(self.repo, overwritten)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   356
            self.restrict = False
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   357
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   358
    def shrinktext(self, text):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   359
        '''Unconditionally removes all keyword substitutions from text.'''
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   360
        return self.re_kw.sub(r'$\1$', text)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   361
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   362
    def shrink(self, fname, text):
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   363
        '''Returns text with all keyword substitutions removed.'''
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   364
        if self.matcher(fname) and textsafe(text):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   365
            return self.shrinktext(text)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   366
        return text
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   367
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   368
    def shrinklines(self, fname, lines):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   369
        '''Returns lines with keyword substitutions removed.'''
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   370
        if self.matcher(fname):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   371
            text = ''.join(lines)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   372
            if textsafe(text):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   373
                return self.shrinktext(text).splitlines(True)
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   374
        return lines
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   375
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   376
    def wread(self, fname, data):
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   377
        '''If in restricted mode returns data read from wdir with
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   378
        keyword substitutions removed.'''
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   379
        return self.restrict and self.shrink(fname, data) or data
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   380
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   381
class kwfilelog(filelog.filelog):
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   382
    '''
173
5329863fb64e filectx does not need filelog; more nokwcommands
Christian Ebert <blacktrash@gmx.net>
parents: 172
diff changeset
   383
    Subclass of filelog to hook into its read, add, cmp methods.
186
c1b7b1d052de Avoid global vars by passing opt args to kwrepo.file
Christian Ebert <blacktrash@gmx.net>
parents: 185
diff changeset
   384
    Keywords are "stored" unexpanded, and processed on reading.
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   385
    '''
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   386
    def __init__(self, opener, kwt, path):
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   387
        super(kwfilelog, self).__init__(opener, path)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   388
        self.kwt = kwt
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   389
        self.path = path
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   390
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   391
    def read(self, node):
265
1b6b7835e3f9 Count keywords in a customized kwfilelog read method
Christian Ebert <blacktrash@gmx.net>
parents: 264
diff changeset
   392
        '''Expands keywords when reading filelog.'''
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   393
        data = super(kwfilelog, self).read(node)
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   394
        return self.kwt.expand(self.path, node, data)
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   395
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   396
    def add(self, text, meta, tr, link, p1=None, p2=None):
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   397
        '''Removes keyword substitutions when adding to filelog.'''
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   398
        text = self.kwt.shrink(self.path, text)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   399
        return super(kwfilelog, self).add(text, meta, tr, link, p1, p2)
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   400
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   401
    def cmp(self, node, text):
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   402
        '''Removes keyword substitutions for comparison.'''
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   403
        text = self.kwt.shrink(self.path, text)
174
c5f655d5d8b4 Handle rename and copy properly
Christian Ebert <blacktrash@gmx.net>
parents: 173
diff changeset
   404
        if self.renamed(node):
c5f655d5d8b4 Handle rename and copy properly
Christian Ebert <blacktrash@gmx.net>
parents: 173
diff changeset
   405
            t2 = super(kwfilelog, self).read(node)
c5f655d5d8b4 Handle rename and copy properly
Christian Ebert <blacktrash@gmx.net>
parents: 173
diff changeset
   406
            return t2 != text
248
2c222367dab3 Use revlog.cmp to avoid checking for rename twice
Christian Ebert <blacktrash@gmx.net>
parents: 246
diff changeset
   407
        return revlog.revlog.cmp(self, node, text)
92
3c7c187e4001 Init context.filectx only once per file with class kwfilectx
Christian Ebert <blacktrash@gmx.net>
parents: 90
diff changeset
   408
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   409
def _status(ui, repo, kwt, unknown, *pats, **opts):
295
5b4039ca6867 (0.9.2compat) update doc strings
Christian Ebert <blacktrash@gmx.net>
parents: 291
diff changeset
   410
    '''Bails out if [keyword] configuration is not active.
5b4039ca6867 (0.9.2compat) update doc strings
Christian Ebert <blacktrash@gmx.net>
parents: 291
diff changeset
   411
    Returns status of working directory.'''
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   412
    if kwt:
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   413
        try:
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   414
            # 0159b7a36184 ff.
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   415
            matcher = cmdutil.match(repo, pats, opts)
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   416
            try:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   417
                # 4faaa0535ea7
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   418
                return repo.status(match=matcher, unknown=unknown, clean=True)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   419
            except TypeError:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   420
                return repo.status(match=matcher, list_clean=True)
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   421
        except AttributeError:
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   422
            files, match, anypats = cmdutil.matchpats(repo, pats, opts)
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   423
            return repo.status(files=files, match=match, list_clean=True)
271
35f43e2ce5b6 For overwriting commands use node and manifest to speed up walk
Christian Ebert <blacktrash@gmx.net>
parents: 270
diff changeset
   424
    if ui.configitems('keyword'):
35f43e2ce5b6 For overwriting commands use node and manifest to speed up walk
Christian Ebert <blacktrash@gmx.net>
parents: 270
diff changeset
   425
        raise util.Abort(_('[keyword] patterns cannot match'))
35f43e2ce5b6 For overwriting commands use node and manifest to speed up walk
Christian Ebert <blacktrash@gmx.net>
parents: 270
diff changeset
   426
    raise util.Abort(_('no [keyword] patterns configured'))
263
fc7f60b109b6 kwfiles notifies if there are no files configured for expansion
Christian Ebert <blacktrash@gmx.net>
parents: 262
diff changeset
   427
275
cb2b11e63906 _overwrite method for kwrepo.commit, kwexpand, kwshrink
Christian Ebert <blacktrash@gmx.net>
parents: 274
diff changeset
   428
def _kwfwrite(ui, repo, expand, *pats, **opts):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   429
    '''Selects files and passes them to kwtemplater.overwrite.'''
458
dd5eca480af6 (0.9.2compat) get some changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 453
diff changeset
   430
    if repo.dirstate.parents()[1] != nullid:
dd5eca480af6 (0.9.2compat) get some changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 453
diff changeset
   431
        raise util.Abort(_('outstanding uncommitted merge'))
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   432
    kwt = kwtools['templater']
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   433
    status = _status(ui, repo, kwt, False, *pats, **opts)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   434
    modified, added, removed, deleted = status[:4]
280
2088e409d360 Revert to using status for kw-commands
Christian Ebert <blacktrash@gmx.net>
parents: 278
diff changeset
   435
    if modified or added or removed or deleted:
458
dd5eca480af6 (0.9.2compat) get some changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 453
diff changeset
   436
        raise util.Abort(_('outstanding uncommitted changes'))
209
430837dbe7f4 Adapt to recent changes in Hg (locks handling, dirstate.update gone)
Christian Ebert <blacktrash@gmx.net>
parents: 208
diff changeset
   437
    wlock = lock = None
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
   438
    try:
206
8d16b70359da Treat wlock the recommended way
Christian Ebert <blacktrash@gmx.net>
parents: 205
diff changeset
   439
        wlock = repo.wlock()
209
430837dbe7f4 Adapt to recent changes in Hg (locks handling, dirstate.update gone)
Christian Ebert <blacktrash@gmx.net>
parents: 208
diff changeset
   440
        lock = repo.lock()
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   441
        kwt.overwrite(None, expand, status[6])
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
   442
    finally:
209
430837dbe7f4 Adapt to recent changes in Hg (locks handling, dirstate.update gone)
Christian Ebert <blacktrash@gmx.net>
parents: 208
diff changeset
   443
        del wlock, lock
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
   444
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
   445
187
a01a0392f648 kwdemo accepts maps as arguments, reads from optional rcfile
Christian Ebert <blacktrash@gmx.net>
parents: 186
diff changeset
   446
def demo(ui, repo, *args, **opts):
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   447
    '''print [keywordmaps] configuration and an expansion example
185
bc5cd6cf69bc Implement kwshrink/kwexpand commands to deal with config, import issues
Christian Ebert <blacktrash@gmx.net>
parents: 184
diff changeset
   448
260
af9ddafeeb96 Unlowercase command help
Christian Ebert <blacktrash@gmx.net>
parents: 258
diff changeset
   449
    Show current, custom, or default keyword template maps
af9ddafeeb96 Unlowercase command help
Christian Ebert <blacktrash@gmx.net>
parents: 258
diff changeset
   450
    and their expansion.
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   451
260
af9ddafeeb96 Unlowercase command help
Christian Ebert <blacktrash@gmx.net>
parents: 258
diff changeset
   452
    Extend current configuration by specifying maps as arguments
af9ddafeeb96 Unlowercase command help
Christian Ebert <blacktrash@gmx.net>
parents: 258
diff changeset
   453
    and optionally by reading from an additional hgrc file.
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   454
260
af9ddafeeb96 Unlowercase command help
Christian Ebert <blacktrash@gmx.net>
parents: 258
diff changeset
   455
    Override current keyword template maps with "default" option.
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   456
    '''
266
50ce25f8c676 Underscore prefixes only for names at top level, or compatibility wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 265
diff changeset
   457
    def demostatus(stat):
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   458
        ui.status(_('\n\t%s\n') % stat)
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   459
266
50ce25f8c676 Underscore prefixes only for names at top level, or compatibility wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 265
diff changeset
   460
    def demoitems(section, items):
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   461
        ui.write('[%s]\n' % section)
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   462
        for k, v in items:
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   463
            ui.write('%s = %s\n' % (k, v))
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   464
183
80fa00250c6d Use ui.note to get verbosity switch; tweak kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 182
diff changeset
   465
    msg = 'hg keyword config and expansion example'
187
a01a0392f648 kwdemo accepts maps as arguments, reads from optional rcfile
Christian Ebert <blacktrash@gmx.net>
parents: 186
diff changeset
   466
    kwstatus = 'current'
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   467
    fn = 'demo.txt'
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   468
    branchname = 'demobranch'
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   469
    tmpdir = tempfile.mkdtemp('', 'kwdemo.')
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   470
    ui.note(_('creating temporary repo at %s\n') % tmpdir)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   471
    repo = localrepo.localrepository(ui, tmpdir, True)
184
30b3e6a09a9d Set ui to repo.ui at once where needed for backwards compatibility
Christian Ebert <blacktrash@gmx.net>
parents: 183
diff changeset
   472
    ui.setconfig('keyword', fn, '')
322
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   473
    if args or opts.get('rcfile'):
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   474
        kwstatus = 'custom'
322
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   475
    if opts.get('rcfile'):
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   476
        ui.readconfig(opts.get('rcfile'))
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   477
    if opts.get('default'):
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   478
        kwstatus = 'default'
222
f956a8301c25 Shorten template setup
Christian Ebert <blacktrash@gmx.net>
parents: 221
diff changeset
   479
        kwmaps = kwtemplater.templates
205
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   480
        if ui.configitems('keywordmaps'):
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   481
            # override maps from optional rcfile
348
63ebc698d06b Get changes from default branch; update test output
Christian Ebert <blacktrash@gmx.net>
parents: 343
diff changeset
   482
            for k, v in kwmaps.iteritems():
205
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   483
                ui.setconfig('keywordmaps', k, v)
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   484
    elif args:
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   485
        # simulate hgrc parsing
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   486
        rcmaps = ['[keywordmaps]\n'] + [a + '\n' for a in args]
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   487
        fp = repo.opener('hgrc', 'w')
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   488
        fp.writelines(rcmaps)
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   489
        fp.close()
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   490
        ui.readconfig(repo.join('hgrc'))
322
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   491
    if not opts.get('default'):
222
f956a8301c25 Shorten template setup
Christian Ebert <blacktrash@gmx.net>
parents: 221
diff changeset
   492
        kwmaps = dict(ui.configitems('keywordmaps')) or kwtemplater.templates
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   493
    reposetup(ui, repo)
208
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
   494
    for k, v in ui.configitems('extensions'):
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
   495
        if k.endswith('keyword'):
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
   496
            extension = '%s = %s' % (k, v)
5afdcec8a01f Show extension in kwdemo; flag helpers; rephrase doc
Christian Ebert <blacktrash@gmx.net>
parents: 207
diff changeset
   497
            break
266
50ce25f8c676 Underscore prefixes only for names at top level, or compatibility wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 265
diff changeset
   498
    demostatus('config using %s keyword template maps' % kwstatus)
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   499
    ui.write('[extensions]\n%s\n' % extension)
266
50ce25f8c676 Underscore prefixes only for names at top level, or compatibility wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 265
diff changeset
   500
    demoitems('keyword', ui.configitems('keyword'))
348
63ebc698d06b Get changes from default branch; update test output
Christian Ebert <blacktrash@gmx.net>
parents: 343
diff changeset
   501
    demoitems('keywordmaps', kwmaps.iteritems())
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   502
    keywords = '$' + '$\n$'.join(kwmaps.keys()) + '$\n'
205
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   503
    repo.wopener(fn, 'w').write(keywords)
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   504
    repo.add([fn])
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   505
    path = repo.wjoin(fn)
183
80fa00250c6d Use ui.note to get verbosity switch; tweak kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 182
diff changeset
   506
    ui.note(_('\n%s keywords written to %s:\n') % (kwstatus, path))
80fa00250c6d Use ui.note to get verbosity switch; tweak kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 182
diff changeset
   507
    ui.note(keywords)
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   508
    ui.note('\nhg -R "%s" branch "%s"\n' % (tmpdir, branchname))
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   509
    # silence branch command if not verbose
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   510
    quiet = ui.quiet
329
27f2e2126447 (0.9.2compat) obtain simplifications from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 322
diff changeset
   511
    ui.quiet = not ui.verbose
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   512
    commands.branch(ui, repo, branchname)
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   513
    ui.quiet = quiet
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   514
    for name, cmd in ui.configitems('hooks'):
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   515
        if name.split('.', 1)[0].find('commit') > -1:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   516
            repo.ui.setconfig('hooks', name, '')
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   517
    ui.note(_('unhooked all commit hooks\n'))
210
304f9ac35869 kwdemo fixes and tweaks
Christian Ebert <blacktrash@gmx.net>
parents: 209
diff changeset
   518
    ui.note('hg -R "%s" ci -m "%s"\n' % (tmpdir, msg))
205
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   519
    repo.commit(text=msg)
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   520
    format = ui.verbose and ' in %s' % path or ''
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   521
    demostatus('%s keywords expanded%s' % (kwstatus, format))
205
f2d2e36053f9 kwdemo: clear up repo, ui inheritance; show commit log in debug output
Christian Ebert <blacktrash@gmx.net>
parents: 204
diff changeset
   522
    ui.write(repo.wread(fn))
183
80fa00250c6d Use ui.note to get verbosity switch; tweak kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 182
diff changeset
   523
    ui.debug(_('\nremoving temporary repo %s\n') % tmpdir)
251
b37f2f065a9c Ignore errors when removing temp dir in kwdemo
Christian Ebert <blacktrash@gmx.net>
parents: 250
diff changeset
   524
    shutil.rmtree(tmpdir, ignore_errors=True)
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   525
285
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   526
def expand(ui, repo, *pats, **opts):
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   527
    '''expand keywords in working directory
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   528
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   529
    Run after (re)enabling keyword expansion.
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   530
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   531
    kwexpand refuses to run if given files contain local changes.
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   532
    '''
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   533
    # 3rd argument sets expansion to True
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   534
    _kwfwrite(ui, repo, True, *pats, **opts)
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   535
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   536
def files(ui, repo, *pats, **opts):
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   537
    '''print files currently configured for keyword expansion
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   538
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   539
    Crosscheck which files in working directory are potential targets for
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   540
    keyword expansion.
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   541
    That is, files matched by [keyword] config patterns but not symlinks.
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   542
    '''
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   543
    kwt = kwtools['templater']
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   544
    status = _status(ui, repo, kwt, opts.get('untracked'), *pats, **opts)
285
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   545
    modified, added, removed, deleted, unknown, ignored, clean = status
478
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   546
    try:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   547
        # f67d1468ac50
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   548
        files = util.sort(modified + added + clean + unknown)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   549
    except AttributeError:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   550
        files = modified + added + clean
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   551
        if opts.get('untracked'):
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   552
            files += unknown
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   553
        files.sort()
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   554
    try:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   555
        # f6c00b17387c
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   556
        wctx = repo[None]
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   557
    except TypeError:
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   558
        wctx = repo.workingctx()
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   559
    if hasattr(wctx, 'flags'):
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   560
        islink = lambda p: 'l' in wctx.flags(p)
a3b8a3a03cc7 (0.9.2compat) context, status refactor keeping backwards compatible fallback
Christian Ebert <blacktrash@gmx.net>
parents: 477
diff changeset
   561
    elif hasattr(wctx, 'fileflags'):
397
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
   562
        islink = lambda p: 'l' in wctx.fileflags(p)
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
   563
    else:
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
   564
        mf = wctx.manifest()
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
   565
        islink = mf.linkf
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   566
    kwfiles = [f for f in files if kwt.iskwfile(f, islink)]
285
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   567
    cwd = pats and repo.getcwd() or ''
322
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   568
    kwfstats = not opts.get('ignore') and (('K', kwfiles),) or ()
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   569
    if opts.get('all') or opts.get('ignore'):
299
50bb27cfd926 (0.9.2compat) kwfiles print code similar to commands.status
Christian Ebert <blacktrash@gmx.net>
parents: 295
diff changeset
   570
        kwfstats += (('I', [f for f in files if f not in kwfiles]),)
50bb27cfd926 (0.9.2compat) kwfiles print code similar to commands.status
Christian Ebert <blacktrash@gmx.net>
parents: 295
diff changeset
   571
    for char, filenames in kwfstats:
322
b1ac738404f8 (0.9.2compat) get backwards compatible changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 312
diff changeset
   572
        format = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n'
299
50bb27cfd926 (0.9.2compat) kwfiles print code similar to commands.status
Christian Ebert <blacktrash@gmx.net>
parents: 295
diff changeset
   573
        for f in filenames:
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   574
            ui.write(format % _pathto(repo, f, cwd))
285
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   575
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   576
def shrink(ui, repo, *pats, **opts):
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   577
    '''revert expanded keywords in working directory
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   578
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   579
    Run before changing/disabling active keywords
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   580
    or if you experience problems with "hg import" or "hg merge".
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   581
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   582
    kwshrink refuses to run if given files contain local changes.
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   583
    '''
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   584
    # 3rd argument sets expansion to False
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   585
    _kwfwrite(ui, repo, False, *pats, **opts)
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   586
42
ba000e29ecf3 Implement near CVS compability with more than one keyword
Christian Ebert <blacktrash@gmx.net>
parents: 41
diff changeset
   587
33
ebb39c6a1476 Add original keyword extension by Thomas Arendsen Hain
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
   588
def reposetup(ui, repo):
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   589
    '''Sets up repo as kwrepo for keyword substitution.
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   590
    Overrides file method to return kwfilelog instead of filelog
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   591
    if file matches user configuration.
144
19b3d1de3db0 Move kwfilelog out of reposetup; only use kwfilelog if file matches
Christian Ebert <blacktrash@gmx.net>
parents: 143
diff changeset
   592
    Wraps commit to overwrite configured files with updated
19b3d1de3db0 Move kwfilelog out of reposetup; only use kwfilelog if file matches
Christian Ebert <blacktrash@gmx.net>
parents: 143
diff changeset
   593
    keyword substitutions.
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   594
    This is done for local repos only, and only if there are
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   595
    files configured at all for keyword substitution.'''
64
4cd7b993c5f8 Imports specific to functions
Christian Ebert <blacktrash@gmx.net>
parents: 63
diff changeset
   596
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   597
    try:
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   598
        if (not repo.local() or kwtools['hgcmd'] in nokwcommands.split()
397
db7cc16560d4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 388
diff changeset
   599
            or '.hg' in repo.root.split(os.sep)
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   600
            or repo._url.startswith('bundle:')):
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   601
            return
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   602
    except AttributeError:
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   603
        pass
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   604
387
ecb2935f9bb8 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 380
diff changeset
   605
    inc, exc = [], ['.hg*']
261
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   606
    for pat, opt in ui.configitems('keyword'):
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   607
        if opt != 'ignore':
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   608
            inc.append(pat)
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   609
        else:
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   610
            exc.append(pat)
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   611
    if not inc:
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   612
        return
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   613
417
e089672ef9b4 (0.9.2compat) incorporate changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 414
diff changeset
   614
    kwtools['templater'] = kwt = kwtemplater(ui, repo, inc, exc)
261
28e64bebc298 Make kwfmatcher an ui attribute
Christian Ebert <blacktrash@gmx.net>
parents: 260
diff changeset
   615
33
ebb39c6a1476 Add original keyword extension by Thomas Arendsen Hain
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
   616
    class kwrepo(repo.__class__):
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   617
        def file(self, f):
33
ebb39c6a1476 Add original keyword extension by Thomas Arendsen Hain
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
   618
            if f[0] == '/':
ebb39c6a1476 Add original keyword extension by Thomas Arendsen Hain
Christian Ebert <blacktrash@gmx.net>
parents:
diff changeset
   619
                f = f[1:]
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   620
            return kwfilelog(self.sopener, kwt, f)
359
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   621
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   622
        def wread(self, filename):
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   623
            data = super(kwrepo, self).wread(filename)
411
b1a7f5eddeba (0.9.2compat) get changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 402
diff changeset
   624
            return kwt.wread(filename, data)
343
f5927e5574e6 (0.9.2compat) get mq support, improved diff output from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 339
diff changeset
   625
230
9fe9a9839387 Move backwards compatible commit fork into private kwrepo function
Christian Ebert <blacktrash@gmx.net>
parents: 229
diff changeset
   626
        def _commit(self, files, text, user, date, match, force, lock, wlock,
359
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   627
                    force_editor, p1, p2, extra, empty_ok):
230
9fe9a9839387 Move backwards compatible commit fork into private kwrepo function
Christian Ebert <blacktrash@gmx.net>
parents: 229
diff changeset
   628
            '''Private commit wrapper for backwards compatibility.'''
9fe9a9839387 Move backwards compatible commit fork into private kwrepo function
Christian Ebert <blacktrash@gmx.net>
parents: 229
diff changeset
   629
            try:
464
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   630
                return super(kwrepo,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   631
                             self).commit(files=files, text=text,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   632
                                          user=user, date=date, match=match,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   633
                                          force=force, lock=lock, wlock=wlock,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   634
                                          force_editor=force_editor,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   635
                                          p1=p1, p2=p2, extra=extra)
230
9fe9a9839387 Move backwards compatible commit fork into private kwrepo function
Christian Ebert <blacktrash@gmx.net>
parents: 229
diff changeset
   636
            except TypeError:
359
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   637
                try:
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   638
                    return super(kwrepo,
464
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   639
                                 self).commit(files=files, text=text,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   640
                                              user=user, date=date,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   641
                                              match=match, force=force,
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   642
                                              force_editor=force_editor,
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   643
                                              p1=p1, p2=p2, extra=extra,
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   644
                                              empty_ok=empty_ok)
359
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   645
                except TypeError:
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   646
                    return super(kwrepo,
464
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   647
                                 self).commit(files=files, text=text,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   648
                                              user=user, date=date,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   649
                                              match=match, force=force,
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   650
                                              force_editor=force_editor,
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   651
                                              p1=p1, p2=p2, extra=extra)
230
9fe9a9839387 Move backwards compatible commit fork into private kwrepo function
Christian Ebert <blacktrash@gmx.net>
parents: 229
diff changeset
   652
176
3aed363c9eaf Cosmetic changes for overwrite condition, single quotes
Christian Ebert <blacktrash@gmx.net>
parents: 175
diff changeset
   653
        def commit(self, files=None, text='', user=None, date=None,
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   654
                   match=_defmatch, force=False, lock=None, wlock=None,
359
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   655
                   force_editor=False, p1=None, p2=None, extra={},
4ac7e51443fe (0.9.2compat) restructure based on wwread/wwrite methods as in default branch
Christian Ebert <blacktrash@gmx.net>
parents: 352
diff changeset
   656
                   empty_ok=False):
229
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   657
            # (w)lock arguments removed in 126f527b3ba3
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   658
            # so they are None or what was passed to commit
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   659
            # use private _(w)lock for deletion
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   660
            _lock = lock
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   661
            _wlock = wlock
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   662
            del wlock, lock
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   663
            _p1 = _p2 = None
143
3485b0ef99c4 Add wlock during overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 142
diff changeset
   664
            try:
229
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   665
                if not _wlock:
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   666
                    _wlock = self.wlock()
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   667
                if not _lock:
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   668
                    _lock = self.lock()
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   669
                # store and postpone commit hooks
348
63ebc698d06b Get changes from default branch; update test output
Christian Ebert <blacktrash@gmx.net>
parents: 343
diff changeset
   670
                commithooks = {}
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   671
                for name, cmd in ui.configitems('hooks'):
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   672
                    if name.split('.', 1)[0] == 'commit':
348
63ebc698d06b Get changes from default branch; update test output
Christian Ebert <blacktrash@gmx.net>
parents: 343
diff changeset
   673
                        commithooks[name] = cmd
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   674
                        ui.setconfig('hooks', name, '')
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   675
                if commithooks:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   676
                    # store parents for commit hook environment
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   677
                    if p1 is None:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   678
                        _p1, _p2 = repo.dirstate.parents()
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   679
                    else:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   680
                        _p1, _p2 = p1, p2 or nullid
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   681
                    _p1 = hex(_p1)
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   682
                    if _p2 == nullid:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   683
                        _p2 = ''
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   684
                    else:
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   685
                        _p2 = hex(_p2)
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   686
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   687
                n = self._commit(files, text, user, date, match, force, _lock,
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   688
                                 _wlock, force_editor, p1, p2, extra, empty_ok)
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   689
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   690
                # restore commit hooks
348
63ebc698d06b Get changes from default branch; update test output
Christian Ebert <blacktrash@gmx.net>
parents: 343
diff changeset
   691
                for name, cmd in commithooks.iteritems():
311
6160401f94f2 (0.9.2compat) implement context based changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 303
diff changeset
   692
                    ui.setconfig('hooks', name, cmd)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   693
                if n is not None:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   694
                    kwt.overwrite(n, True, None)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   695
                    repo.hook('commit', node=n, parent1=_p1, parent2=_p2)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   696
                return n
143
3485b0ef99c4 Add wlock during overwrite
Christian Ebert <blacktrash@gmx.net>
parents: 142
diff changeset
   697
            finally:
229
8e5ba738e36d Remove spurious NameError checking for locks
Christian Ebert <blacktrash@gmx.net>
parents: 228
diff changeset
   698
                del _wlock, _lock
129
15e8cd7f5295 Wrap commit instead of calling pretxncommit hook
Christian Ebert <blacktrash@gmx.net>
parents: 128
diff changeset
   699
157
64dce6787d82 Incorporate changes in self_initializing_hook branch
Christian Ebert <blacktrash@gmx.net>
parents: 98
diff changeset
   700
    repo.__class__ = kwrepo
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   701
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   702
    # monkeypatches
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   703
    try:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   704
        # avoid spurious rejects if patchfile is available
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   705
        def kwpatchfile_init(self, ui, fname, missing=False):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   706
            '''Monkeypatch/wrap patch.patchfile.__init__ to avoid
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   707
            rejects or conflicts due to expanded keywords in working dir.'''
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   708
            try:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   709
                patchfile_init(self, ui, fname, missing)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   710
            except TypeError:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   711
                # "missing" arg added in e90e72c6b4c7
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   712
                patchfile_init(self, ui, fname)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   713
            self.lines = kwt.shrinklines(self.fname, self.lines)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   714
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   715
        patchfile_init = patch.patchfile.__init__
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   716
        patch.patchfile.__init__ = kwpatchfile_init
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   717
    except AttributeError:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   718
        pass
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   719
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   720
    def kw_diff(repo, node1=None, node2=None, files=None, match=_defmatch,
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   721
                 fp=None, changes=None, opts=None):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   722
        # only expand if comparing against working dir
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   723
        if node2 is not None:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   724
            kwt.matcher = util.never
458
dd5eca480af6 (0.9.2compat) get some changes from default branch
Christian Ebert <blacktrash@gmx.net>
parents: 453
diff changeset
   725
        elif node1 is not None and node1 != repo.dirstate.parents()[0]:
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   726
            kwt.restrict = True
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   727
        try:
464
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   728
            patch_diff(repo, node1=node1, node2=node2, files=files,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   729
                       match=match, fp=fp, changes=changes, opts=opts)
453
0804ead55da7 Incorporate latest changes in backwards compatible way
Christian Ebert <blacktrash@gmx.net>
parents: 444
diff changeset
   730
        except TypeError:
464
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   731
            patch_diff(repo, node1=node1, node2=node2, match=match, fp=fp,
509fbcac51c7 (0.9.2compat) secure keyword arguments in backwards compatible wrappers
Christian Ebert <blacktrash@gmx.net>
parents: 462
diff changeset
   732
                       changes=changes, opts=opts)
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   733
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   734
    patch_diff = patch.diff
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   735
    patch.diff = kw_diff
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   736
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   737
    try:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   738
        from mercurial.hgweb import webcommands
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   739
        def kwweb_annotate(web, req, tmpl):
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   740
            '''Wraps webcommands.annotate turning off keyword expansion.'''
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   741
            kwt.matcher = util.never
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   742
            return webcommands_annotate(web, req, tmpl)
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   743
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   744
        def kwweb_changeset(web, req, tmpl):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   745
            '''Wraps webcommands.changeset turning off keyword expansion.'''
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   746
            kwt.matcher = util.never
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   747
            return webcommands_changeset(web, req, tmpl)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   748
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   749
        def kwweb_filediff(web, req, tmpl):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   750
            '''Wraps webcommands.filediff turning off keyword expansion.'''
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   751
            kwt.matcher = util.never
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   752
            return webcommands_filediff(web, req, tmpl)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   753
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   754
        webcommands_annotate = webcommands.annotate
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   755
        webcommands_changeset = webcommands.changeset
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   756
        webcommands_filediff = webcommands.filediff
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   757
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   758
        webcommands.annotate = kwweb_annotate
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   759
        webcommands.changeset = webcommands.rev = kwweb_changeset
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   760
        webcommands.filediff = webcommands.diff = kwweb_filediff
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   761
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   762
    except ImportError:
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   763
        from mercurial.hgweb.hgweb_mod import hgweb
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   764
        def kwweb_do_annotate(self, req):
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   765
            kwt.matcher = util.never
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   766
            hgweb_do_annotate(self, req)
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   767
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   768
        def kwweb_do_changeset(self, req):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   769
            kwt.matcher = util.never
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   770
            hgweb_do_changeset(self, req)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   771
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   772
        def kwweb_do_filediff(self, req):
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   773
            kwt.matcher = util.never
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   774
            hgweb_do_filediff(self, req)
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   775
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   776
        hgweb_do_annotate = hgweb.do_annotate
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   777
        hgweb_do_changeset = hgweb.do_changeset
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   778
        hgweb_do_filediff = hgweb.do_filediff
462
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   779
f65280d03582 (0.9.2compat) disable expansion for annotate
Christian Ebert <blacktrash@gmx.net>
parents: 458
diff changeset
   780
        hgweb.do_annotate = kwweb_do_annotate
444
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   781
        hgweb.do_changeset = hgweb.do_rev = kwweb_do_changeset
987648c1ff69 (0.9.2compat) backwards compatible changes from default
Christian Ebert <blacktrash@gmx.net>
parents: 435
diff changeset
   782
        hgweb.do_filediff = hgweb.do_diff = kwweb_do_filediff
42
ba000e29ecf3 Implement near CVS compability with more than one keyword
Christian Ebert <blacktrash@gmx.net>
parents: 41
diff changeset
   783
81
fd5d3a974ea7 Implement self initializing pretxncommit hook
Christian Ebert <blacktrash@gmx.net>
parents: 80
diff changeset
   784
178
4a27c306c6a2 Add kwdemo command as online config help
Christian Ebert <blacktrash@gmx.net>
parents: 177
diff changeset
   785
cmdtable = {
4a27c306c6a2 Add kwdemo command as online config help
Christian Ebert <blacktrash@gmx.net>
parents: 177
diff changeset
   786
    'kwdemo':
181
8019554adbb2 kwdemo is demo internally; rearrange code
Christian Ebert <blacktrash@gmx.net>
parents: 180
diff changeset
   787
        (demo,
187
a01a0392f648 kwdemo accepts maps as arguments, reads from optional rcfile
Christian Ebert <blacktrash@gmx.net>
parents: 186
diff changeset
   788
         [('d', 'default', None, _('show default keyword template maps')),
283
071bfbd482b4 Respect Mercurial conventions in kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 282
diff changeset
   789
          ('f', 'rcfile', [], _('read maps from rcfile'))],
071bfbd482b4 Respect Mercurial conventions in kwdemo help
Christian Ebert <blacktrash@gmx.net>
parents: 282
diff changeset
   790
         _('hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]...')),
285
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   791
    'kwexpand': (expand, commands.walkopts,
0aa02d36b3b1 Arrange commands and cmdtable in alphabetical order
Christian Ebert <blacktrash@gmx.net>
parents: 284
diff changeset
   792
                 _('hg kwexpand [OPTION]... [FILE]...')),
264
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   793
    'kwfiles':
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   794
        (files,
270
371ce7fe5f13 kwfiles: change option "ignored" to "ignore", add option "untracked"
Christian Ebert <blacktrash@gmx.net>
parents: 269
diff changeset
   795
         [('a', 'all', None, _('show keyword status flags of all files')),
371ce7fe5f13 kwfiles: change option "ignored" to "ignore", add option "untracked"
Christian Ebert <blacktrash@gmx.net>
parents: 269
diff changeset
   796
          ('i', 'ignore', None, _('show files excluded from expansion')),
371ce7fe5f13 kwfiles: change option "ignored" to "ignore", add option "untracked"
Christian Ebert <blacktrash@gmx.net>
parents: 269
diff changeset
   797
          ('u', 'untracked', None, _('additionally show untracked files')),
264
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   798
         ] + commands.walkopts,
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   799
         _('hg kwfiles [OPTION]... [FILE]...')),
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   800
    'kwshrink': (shrink, commands.walkopts,
7c637046c0e2 walkopts for kwexpand, kwshrink, kwfiles commands
Christian Ebert <blacktrash@gmx.net>
parents: 263
diff changeset
   801
                 _('hg kwshrink [OPTION]... [FILE]...')),
178
4a27c306c6a2 Add kwdemo command as online config help
Christian Ebert <blacktrash@gmx.net>
parents: 177
diff changeset
   802
}