mercurial/commands.py
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Tue, 30 Jan 2007 20:37:58 -0200
changeset 4063 96863fc3036a
parent 4056 f1622b4f467d
child 4064 5d9ede002453
permissions -rw-r--r--
Open bundle files in binary mode
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     1
# commands.py - command processing for mercurial
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     2
#
2859
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2858
diff changeset
     3
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     4
#
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     5
# This software may be used and distributed according to the terms
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     6
# of the GNU General Public License, incorporated herein by reference.
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     7
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
     8
from demandload import demandload
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
     9
from node import *
1400
cf9a1233738a i18n first part: make '_' available for files who need it
Benoit Boissinot <benoit.boissinot@ens-lyon.org
parents: 1395
diff changeset
    10
from i18n import gettext as _
3786
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
    11
demandload(globals(), "bisect os re sys signal imp urllib pdb shlex stat")
3643
b4ad640a3bcf templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3631
diff changeset
    12
demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo")
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
    13
demandload(globals(), "difflib patch time help mdiff tempfile")
4013
54fa628b8c78 catch socket.error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4010
diff changeset
    14
demandload(globals(), "traceback errno version atexit socket")
3627
44e75d9fa654 remove unused imports
Matt Mackall <mpm@selenic.com>
parents: 3619
diff changeset
    15
demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    16
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    17
class UnknownCommand(Exception):
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    18
    """Exception raised if command is not in the command table."""
1518
ac4ca6bf2383 Improved error message for ambiguous command shortcuts.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1517
diff changeset
    19
class AmbiguousCommand(Exception):
ac4ca6bf2383 Improved error message for ambiguous command shortcuts.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1517
diff changeset
    20
    """Exception raised if command shortcut matches more than one command."""
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    21
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    22
def bail_if_changed(repo):
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
    23
    modified, added, removed, deleted = repo.status()[:4]
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    24
    if modified or added or removed or deleted:
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    25
        raise util.Abort(_("outstanding uncommitted changes"))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    26
2799
bd8a9a94139f commands.logmessage: simplify calling.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2789
diff changeset
    27
def logmessage(opts):
2694
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    28
    """ get the log message according to -m and -l option """
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    29
    message = opts['message']
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    30
    logfile = opts['logfile']
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    31
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    32
    if message and logfile:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    33
        raise util.Abort(_('options --message and --logfile are mutually '
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    34
                           'exclusive'))
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    35
    if not message and logfile:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    36
        try:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    37
            if logfile == '-':
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    38
                message = sys.stdin.read()
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    39
            else:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    40
                message = open(logfile).read()
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    41
        except IOError, inst:
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    42
            raise util.Abort(_("can't read commit message '%s': %s") %
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    43
                             (logfile, inst.strerror))
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    44
    return message
0fb28dbf0dc7 MQ: uniformise message and logfile option.
"Mathieu Clabaut <mathieu.clabaut@gmail.com>"
parents: 2673
diff changeset
    45
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    46
def setremoteconfig(ui, opts):
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    47
    "copy remote options to ui tree"
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    48
    if opts.get('ssh'):
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    49
        ui.setconfig("ui", "ssh", opts['ssh'])
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    50
    if opts.get('remotecmd'):
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    51
        ui.setconfig("ui", "remotecmd", opts['remotecmd'])
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
    52
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
    53
# Commands start here, listed alphabetically
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    54
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    55
def add(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    56
    """add the specified files on the next commit
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    57
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    58
    Schedule files to be version controlled and added to the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    59
3829
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
    60
    The files will be added to the repository at the next commit. To
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
    61
    undo an add before that, see hg revert.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    62
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    63
    If no names are given, add all files in the repository.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    64
    """
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    65
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    66
    names = []
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
    67
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts):
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
    68
        if exact:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
    69
            if ui.verbose:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
    70
                ui.status(_('adding %s\n') % rel)
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    71
            names.append(abs)
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    72
        elif repo.dirstate.state(abs) == '?':
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
    73
            ui.status(_('adding %s\n') % rel)
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    74
            names.append(abs)
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
    75
    if not opts.get('dry_run'):
2411
734df6333ca4 add: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2410
diff changeset
    76
        repo.add(names)
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
    77
766
b444a7e053f1 Get addremove to use new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 764
diff changeset
    78
def addremove(ui, repo, *pats, **opts):
3181
3637d5d17cbc Documentation fixes for addremove.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3172
diff changeset
    79
    """add all new files, delete all missing files
2181
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
    80
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    81
    Add all new files and remove all missing files from the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    82
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    83
    New files are ignored if they match any of the patterns in .hgignore. As
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    84
    with add, these changes take effect at the next commit.
2958
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    85
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    86
    Use the -s option to detect renamed files.  With a parameter > 0,
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    87
    this compares every removed file with every added file and records
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    88
    those similar enough as renames.  This option takes a percentage
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    89
    between 0 (disabled) and 100 (files must be identical) as its
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    90
    parameter.  Detecting renamed files this way can be expensive.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    91
    """
2958
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    92
    sim = float(opts.get('similarity') or 0)
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    93
    if sim < 0 or sim > 100:
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    94
        raise util.Abort(_('similarity must be between 0 and 100'))
ff3ea21a981a addremove: add -s/--similarity option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2956
diff changeset
    95
    return cmdutil.addremove(repo, pats, opts, similarity=sim/100.)
219
8ff4532376a4 hg checkout: refuse to checkout if there are outstanding changes
mpm@selenic.com
parents: 214
diff changeset
    96
733
1966c553f652 Convert annotate over to walk interface.
Bryan O'Sullivan <bos@serpentine.com>
parents: 732
diff changeset
    97
def annotate(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    98
    """show changeset information per file line
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
    99
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   100
    List changes in files, showing the revision id responsible for each line
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   101
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   102
    This command is useful to discover who did a change or when a change took
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   103
    place.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   104
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   105
    Without the -a option, annotate will avoid processing files it
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   106
    detects as binary. With -a, annotate will generate an annotation
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   107
    anyway, probably with undesirable results.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   108
    """
3146
e69a0cbe268e filectx.annotate: return filectx for each line instead of rev
Brendan Cully <brendan@kublai.com>
parents: 3132
diff changeset
   109
    getdate = util.cachefunc(lambda x: util.datestr(x.date()))
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   110
744
3d88f6dd1ed4 Handle empty file list for annotate
mpm@selenic.com
parents: 743
diff changeset
   111
    if not pats:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   112
        raise util.Abort(_('at least one file name or pattern required'))
744
3d88f6dd1ed4 Handle empty file list for annotate
mpm@selenic.com
parents: 743
diff changeset
   113
3146
e69a0cbe268e filectx.annotate: return filectx for each line instead of rev
Brendan Cully <brendan@kublai.com>
parents: 3132
diff changeset
   114
    opmap = [['user', lambda x: ui.shortuser(x.user())],
3403
372999405787 Back out d8eba1c3ce9b and a004164dbeef
Brendan Cully <brendan@kublai.com>
parents: 3402
diff changeset
   115
             ['number', lambda x: str(x.rev())],
3146
e69a0cbe268e filectx.annotate: return filectx for each line instead of rev
Brendan Cully <brendan@kublai.com>
parents: 3132
diff changeset
   116
             ['changeset', lambda x: short(x.node())],
3172
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3159
diff changeset
   117
             ['date', getdate], ['follow', lambda x: x.path()]]
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3159
diff changeset
   118
    if (not opts['user'] and not opts['changeset'] and not opts['date']
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3159
diff changeset
   119
        and not opts['follow']):
714
29fcd195e056 Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 712
diff changeset
   120
        opts['number'] = 1
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   121
3132
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
   122
    ctx = repo.changectx(opts['rev'])
1016
836667830fee Teach annotate about binary files
mpm@selenic.com
parents: 1015
diff changeset
   123
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   124
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   125
                                             node=ctx.node()):
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   126
        fctx = ctx.filectx(abs)
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   127
        if not opts['text'] and util.binary(fctx.data()):
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
   128
            ui.write(_("%s: binary file\n") % ((pats and rel) or abs))
1016
836667830fee Teach annotate about binary files
mpm@selenic.com
parents: 1015
diff changeset
   129
            continue
836667830fee Teach annotate about binary files
mpm@selenic.com
parents: 1015
diff changeset
   130
3172
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3159
diff changeset
   131
        lines = fctx.annotate(follow=opts.get('follow'))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   132
        pieces = []
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   133
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   134
        for o, f in opmap:
714
29fcd195e056 Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 712
diff changeset
   135
            if opts[o]:
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   136
                l = [f(n) for n, dummy in lines]
771
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   137
                if l:
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   138
                    m = max(map(len, l))
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   139
                    pieces.append(["%*s" % (m, x) for x in l])
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   140
771
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   141
        if pieces:
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   142
            for p, l in zip(zip(*pieces), lines):
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   143
                ui.write("%s: %s" % (" ".join(p), l[1]))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   144
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   145
def archive(ui, repo, dest, **opts):
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   146
    '''create unversioned archive of a repository revision
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   147
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   148
    By default, the revision used is the parent of the working
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   149
    directory; use "-r" to specify a different revision.
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   150
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   151
    To specify the type of archive to create, use "-t".  Valid
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   152
    types are:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   153
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   154
    "files" (default): a directory full of files
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   155
    "tar": tar archive, uncompressed
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   156
    "tbz2": tar archive, compressed using bzip2
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   157
    "tgz": tar archive, compressed using gzip
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   158
    "uzip": zip archive, uncompressed
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   159
    "zip": zip archive, compressed using deflate
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   160
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   161
    The exact name of the destination archive or directory is given
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   162
    using a format string; see "hg help export" for details.
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   163
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   164
    Each member added to an archive file has a directory prefix
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   165
    prepended.  Use "-p" to specify a format string for the prefix.
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   166
    The default is the basename of the archive, with suffixes removed.
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   167
    '''
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   168
3132
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
   169
    node = repo.changectx(opts['rev']).node()
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
   170
    dest = cmdutil.make_filename(repo, dest, node)
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   171
    if os.path.realpath(dest) == repo.root:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   172
        raise util.Abort(_('repository root cannot be destination'))
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   173
    dummy, matchfn, dummy = cmdutil.matchpats(repo, [], opts)
2476
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   174
    kind = opts.get('type') or 'files'
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   175
    prefix = opts['prefix']
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   176
    if dest == '-':
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   177
        if kind == 'files':
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   178
            raise util.Abort(_('cannot archive plain files to stdout'))
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   179
        dest = sys.stdout
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   180
        if not prefix: prefix = os.path.basename(repo.root) + '-%h'
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
   181
    prefix = cmdutil.make_filename(repo, prefix, node)
2476
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   182
    archival.archive(repo, dest, node, kind, not opts['no_decode'],
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   183
                     matchfn, prefix)
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   184
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   185
def backout(ui, repo, rev, **opts):
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   186
    '''reverse effect of earlier changeset
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   187
2254
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   188
    Commit the backed out changes as a new changeset.  The new
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   189
    changeset is a child of the backed out changeset.
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   190
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   191
    If you back out a changeset other than the tip, a new head is
2254
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   192
    created.  This head is the parent of the working directory.  If
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   193
    you back out an old changeset, your working directory will appear
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   194
    old after the backout.  You should merge the backout changeset
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   195
    with another head.
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   196
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   197
    The --merge option remembers the parent of the working directory
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   198
    before starting the backout, then merges the new head with that
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   199
    changeset afterwards.  This saves you from doing the merge by
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   200
    hand.  The result of this merge is not committed, as for a normal
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   201
    merge.'''
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   202
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   203
    bail_if_changed(repo)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   204
    op1, op2 = repo.dirstate.parents()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   205
    if op2 != nullid:
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   206
        raise util.Abort(_('outstanding uncommitted merge'))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   207
    node = repo.lookup(rev)
2614
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   208
    p1, p2 = repo.changelog.parents(node)
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   209
    if p1 == nullid:
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   210
        raise util.Abort(_('cannot back out a change with no parents'))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   211
    if p2 != nullid:
2614
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   212
        if not opts['parent']:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   213
            raise util.Abort(_('cannot back out a merge changeset without '
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   214
                               '--parent'))
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   215
        p = repo.lookup(opts['parent'])
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   216
        if p not in (p1, p2):
3679
2956948b81f3 fix warnings generated by pygettext.py.
Marcos Chaves <marcos.nospam@gmail.com>
parents: 3673
diff changeset
   217
            raise util.Abort(_('%s is not a parent of %s') %
3680
69cf255a55a1 Indentation cleanups for 2956948b81f3.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3679
diff changeset
   218
                             (short(p), short(node)))
2614
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   219
        parent = p
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   220
    else:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   221
        if opts['parent']:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   222
            raise util.Abort(_('cannot use --parent on non-merge changeset'))
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   223
        parent = p1
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
   224
    hg.clean(repo, node, show_stats=False)
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   225
    revert_opts = opts.copy()
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
   226
    revert_opts['date'] = None
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
   227
    revert_opts['all'] = True
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   228
    revert_opts['rev'] = hex(parent)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   229
    revert(ui, repo, **revert_opts)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   230
    commit_opts = opts.copy()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   231
    commit_opts['addremove'] = False
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
   232
    if not commit_opts['message'] and not commit_opts['logfile']:
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   233
        commit_opts['message'] = _("Backed out changeset %s") % (hex(node))
2268
6c9305fbebaf fix coding style of backout editor change.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2267
diff changeset
   234
        commit_opts['force_editor'] = True
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   235
    commit(ui, repo, **commit_opts)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   236
    def nice(node):
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   237
        return '%d:%s' % (repo.changelog.rev(node), short(node))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   238
    ui.status(_('changeset %s backs out changeset %s\n') %
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   239
              (nice(repo.changelog.tip()), nice(node)))
2493
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   240
    if op1 != node:
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   241
        if opts['merge']:
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   242
            ui.status(_('merging with changeset %s\n') % nice(op1))
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
   243
            n = _lookup(repo, hex(op1))
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
   244
            hg.merge(repo, n)
2493
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   245
        else:
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   246
            ui.status(_('the backout changeset is a new head - '
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   247
                        'do not forget to merge\n'))
2761
0aa458261901 fix hg backup option recommendation for auto-merge
Christian Ebert <blacktrash@gmx.net>
parents: 2760
diff changeset
   248
            ui.status(_('(use "backout --merge" '
0aa458261901 fix hg backup option recommendation for auto-merge
Christian Ebert <blacktrash@gmx.net>
parents: 2760
diff changeset
   249
                        'if you want to auto-merge)\n'))
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   250
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   251
def branch(ui, repo, label=None):
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   252
    """set or show the current branch name
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   253
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   254
    With <name>, set the current branch name. Otherwise, show the
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   255
    current branch name.
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   256
    """
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   257
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   258
    if label is not None:
3862
46abbed02b2d Use UTF-8 in .hg/branch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3859
diff changeset
   259
        repo.opener("branch", "w").write(util.fromlocal(label) + '\n')
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   260
    else:
3862
46abbed02b2d Use UTF-8 in .hg/branch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3859
diff changeset
   261
        b = util.tolocal(repo.workingctx().branch())
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   262
        if b:
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   263
            ui.write("%s\n" % b)
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   264
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   265
def branches(ui, repo):
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   266
    """list repository named branches
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   267
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   268
    List the repository's named branches.
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   269
    """
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   270
    b = repo.branchtags()
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3672
diff changeset
   271
    l = [(-repo.changelog.rev(n), n, t) for t, n in b.items()]
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   272
    l.sort()
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   273
    for r, n, t in l:
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   274
        hexfunc = ui.debugflag and hex or short
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   275
        if ui.quiet:
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   276
            ui.write("%s\n" % t)
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   277
        else:
3773
b1eeaeb936ae Handle transcoding of branch names
Matt Mackall <mpm@selenic.com>
parents: 3772
diff changeset
   278
            t = util.localsub(t, 30)
b1eeaeb936ae Handle transcoding of branch names
Matt Mackall <mpm@selenic.com>
parents: 3772
diff changeset
   279
            t += " " * (30 - util.locallen(t))
b1eeaeb936ae Handle transcoding of branch names
Matt Mackall <mpm@selenic.com>
parents: 3772
diff changeset
   280
            ui.write("%s %s:%s\n" % (t, -r, hexfunc(n)))
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
   281
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
   282
def bundle(ui, repo, fname, dest=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   283
    """create a changegroup file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   284
3511
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   285
    Generate a compressed changegroup file collecting changesets not
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   286
    found in the other repository.
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   287
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   288
    If no destination repository is specified the destination is assumed
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   289
    to have all the nodes specified by one or more --base parameters.
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   290
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   291
    The bundle file can then be transferred using conventional means and
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   292
    applied to another repository with the unbundle or pull command.
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   293
    This is useful when direct push and pull are not available or when
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   294
    exporting an entire repository is undesirable.
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   295
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   296
    Applying bundles preserves all changeset contents including
aa8f086cb141 Corrected help text for bundle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3510
diff changeset
   297
    permissions, copy/rename information, and revision history.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   298
    """
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   299
    revs = opts.get('rev') or None
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   300
    if revs:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   301
        revs = [repo.lookup(rev) for rev in revs]
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   302
    base = opts.get('base')
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   303
    if base:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   304
        if dest:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   305
            raise util.Abort(_("--base is incompatible with specifiying "
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   306
                               "a destination"))
3318
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   307
        base = [repo.lookup(rev) for rev in base]
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   308
        # create the right base
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   309
        # XXX: nodesbetween / changegroup* should be "fixed" instead
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   310
        o = []
3649
e50891e461e4 Consolidate brinfo handling
Matt Mackall <mpm@selenic.com>
parents: 3645
diff changeset
   311
        has = {nullid: None}
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   312
        for n in base:
3631
770c4fc03b8e bundle: don't use sets.Set
Matt Mackall <mpm@selenic.com>
parents: 3629
diff changeset
   313
            has.update(repo.changelog.reachable(n))
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   314
        if revs:
3318
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   315
            visit = list(revs)
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   316
        else:
3318
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   317
            visit = repo.changelog.heads()
3631
770c4fc03b8e bundle: don't use sets.Set
Matt Mackall <mpm@selenic.com>
parents: 3629
diff changeset
   318
        seen = {}
3318
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   319
        while visit:
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   320
            n = visit.pop(0)
3631
770c4fc03b8e bundle: don't use sets.Set
Matt Mackall <mpm@selenic.com>
parents: 3629
diff changeset
   321
            parents = [p for p in repo.changelog.parents(n) if p not in has]
3318
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   322
            if len(parents) == 0:
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   323
                o.insert(0, n)
a225055b3b59 bundle --base: use the right set for the base
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3284
diff changeset
   324
            else:
3512
630e0b216192 fix graph traversal in commands.bundle (it wasn't O(n))
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3511
diff changeset
   325
                for p in parents:
630e0b216192 fix graph traversal in commands.bundle (it wasn't O(n))
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3511
diff changeset
   326
                    if p not in seen:
3631
770c4fc03b8e bundle: don't use sets.Set
Matt Mackall <mpm@selenic.com>
parents: 3629
diff changeset
   327
                        seen[p] = 1
3512
630e0b216192 fix graph traversal in commands.bundle (it wasn't O(n))
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3511
diff changeset
   328
                        visit.append(p)
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   329
    else:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   330
        setremoteconfig(ui, opts)
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   331
        dest = ui.expandpath(dest or 'default-push', dest or 'default')
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   332
        other = hg.repository(ui, dest)
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   333
        o = repo.findoutgoing(other, force=opts['force'])
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   334
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   335
    if revs:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   336
        cg = repo.changegroupsubset(o, revs, 'bundle')
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   337
    else:
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
   338
        cg = repo.changegroup(o, 'bundle')
3704
9c1737a3e254 fix writebundle for bz2 bundles
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3680
diff changeset
   339
    changegroup.writebundle(cg, fname, "HG10BZ")
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
   340
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   341
def cat(ui, repo, file1, *pats, **opts):
3914
283ee8971570 doc string fix: hg cat and manifest default to current parent revision.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3900
diff changeset
   342
    """output the current or given revision of files
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   343
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   344
    Print the specified files as they were at the given revision.
3915
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
   345
    If no revision is given, the parent of the working directory is used,
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
   346
    or tip if no revision is checked out.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   347
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   348
    Output may be to a file, in which case the name of the file is
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   349
    given using a format string.  The formatting rules are the same as
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   350
    for the export command, with the following additions:
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   351
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   352
    %s   basename of file being printed
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   353
    %d   dirname of file being printed, or '.' if in repo root
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   354
    %p   root-relative path name of file being printed
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   355
    """
3132
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
   356
    ctx = repo.changectx(opts['rev'])
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   357
    for src, abs, rel, exact in cmdutil.walk(repo, (file1,) + pats, opts,
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   358
                                             ctx.node()):
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
   359
        fp = cmdutil.make_file(repo, opts['output'], ctx.node(), pathname=abs)
2565
7f78ca2c7977 convert hg cat to new context api
Matt Mackall <mpm@selenic.com>
parents: 2562
diff changeset
   360
        fp.write(ctx.filectx(abs).data())
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
   361
698
df78d8ccac4c Use python function instead of external 'cp' command when cloning repos.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 697
diff changeset
   362
def clone(ui, source, dest=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   363
    """make a copy of an existing repository
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   364
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   365
    Create a copy of an existing repository in a new directory.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   366
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   367
    If no destination directory name is specified, it defaults to the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   368
    basename of the source.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   369
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   370
    The location of the source is added to the new repository's
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   371
    .hg/hgrc file, as the default to be used for future pulls.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   372
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   373
    For efficiency, hardlinks are used for cloning whenever the source
2762
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   374
    and destination are on the same filesystem (note this applies only
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   375
    to the repository data, not to the checked out files).  Some
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   376
    filesystems, such as AFS, implement hardlinking incorrectly, but
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   377
    do not report errors.  In these cases, use the --pull option to
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   378
    avoid hardlinking.
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   379
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   380
    You can safely clone repositories and checked out files using full
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   381
    hardlinks with
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   382
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   383
      $ cp -al REPO REPOCLONE
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   384
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   385
    which is the fastest way to clone. However, the operation is not
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   386
    atomic (making sure REPO is not modified during the operation is
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   387
    up to you) and you have to make sure your editor breaks hardlinks
2df98f616645 Expand clone help with hardlink information
Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
parents: 2761
diff changeset
   388
    (Emacs and most Linux Kernel tools do so).
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
   389
2764
71029a3247cb clone: replace long help string of inaky with doc comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2763
diff changeset
   390
    If you use the -r option to clone up to a specific revision, no
71029a3247cb clone: replace long help string of inaky with doc comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2763
diff changeset
   391
    subsequent revisions will be present in the cloned repository.
71029a3247cb clone: replace long help string of inaky with doc comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2763
diff changeset
   392
    This option implies --pull, even on local repositories.
71029a3247cb clone: replace long help string of inaky with doc comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2763
diff changeset
   393
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
   394
    See pull for valid source format details.
2590
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
   395
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
   396
    It is possible to specify an ssh:// URL as the destination, but no
3583
8ee579885d23 doc: clone doesn't create a working directory in remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3578
diff changeset
   397
    .hg/hgrc and working directory will be created on the remote side.
8ee579885d23 doc: clone doesn't create a working directory in remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3578
diff changeset
   398
    Look at the help text for the pull command for important details
8ee579885d23 doc: clone doesn't create a working directory in remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3578
diff changeset
   399
    about ssh:// URLs.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   400
    """
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
   401
    setremoteconfig(ui, opts)
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   402
    hg.clone(ui, ui.expandpath(source), dest,
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   403
             pull=opts['pull'],
2620
de82749d3a71 clone: change name of --stream to --uncompressed.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2618
diff changeset
   404
             stream=opts['uncompressed'],
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   405
             rev=opts['rev'],
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   406
             update=not opts['noupdate'])
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 513
diff changeset
   407
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
   408
def commit(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   409
    """commit the specified files or all outstanding changes
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   410
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   411
    Commit changes to the given files into the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   412
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   413
    If a list of files is omitted, all changes reported by "hg status"
1995
2da2d46862fb Spelling fix: "commited" -> "committed"
mcmillen@cs.cmu.edu
parents: 1994
diff changeset
   414
    will be committed.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   415
1996
4c70b10f0418 Don't mention deprecated HGEDITOR variable in the help text of commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1995
diff changeset
   416
    If no commit message is specified, the editor configured in your hgrc
4c70b10f0418 Don't mention deprecated HGEDITOR variable in the help text of commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1995
diff changeset
   417
    or in the EDITOR environment variable is started to enter a message.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   418
    """
2799
bd8a9a94139f commands.logmessage: simplify calling.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2789
diff changeset
   419
    message = logmessage(opts)
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
   420
354
e3667e3a18ac hg commit: add -A flag
mpm@selenic.com
parents: 353
diff changeset
   421
    if opts['addremove']:
2883
c2932ad5476a move commands.addremove_lock to cmdutil.addremove
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2882
diff changeset
   422
        cmdutil.addremove(repo, pats, opts)
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
   423
    fns, match, anypats = cmdutil.matchpats(repo, pats, opts)
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
   424
    if pats:
3663
b4903debbe3b abort if explicitly committed files are not found or not tracked
Matt Mackall <mpm@selenic.com>
parents: 3662
diff changeset
   425
        status = repo.status(files=fns, match=match)
b4903debbe3b abort if explicitly committed files are not found or not tracked
Matt Mackall <mpm@selenic.com>
parents: 3662
diff changeset
   426
        modified, added, removed, deleted, unknown = status[:5]
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
   427
        files = modified + added + removed
3786
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   428
        slist = None
3663
b4903debbe3b abort if explicitly committed files are not found or not tracked
Matt Mackall <mpm@selenic.com>
parents: 3662
diff changeset
   429
        for f in fns:
3786
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   430
            if f not in files:
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   431
                rf = repo.wjoin(f)
3663
b4903debbe3b abort if explicitly committed files are not found or not tracked
Matt Mackall <mpm@selenic.com>
parents: 3662
diff changeset
   432
                if f in unknown:
3786
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   433
                    raise util.Abort(_("file %s not tracked!") % rf)
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   434
                try:
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   435
                    mode = os.lstat(rf)[stat.ST_MODE]
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   436
                except OSError:
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   437
                    raise util.Abort(_("file %s not found!") % rf)
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   438
                if stat.S_ISDIR(mode):
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   439
                    name = f + '/'
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   440
                    if slist is None:
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   441
                        slist = list(files)
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   442
                        slist.sort()
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   443
                    i = bisect.bisect(slist, name)
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   444
                    if i >= len(slist) or not slist[i].startswith(name):
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   445
                        raise util.Abort(_("no match under directory %s!")
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   446
                                         % rf)
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   447
                elif not stat.S_ISREG(mode):
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   448
                    raise util.Abort(_("can't commit %s: "
8d603f8567ae make hg commit <dirname> work again
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3774
diff changeset
   449
                                       "unsupported file type!") % rf)
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
   450
    else:
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
   451
        files = []
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
   452
    try:
2267
d812d91c5a84 Force editor to appear for an 'hg backout' if a message or logfile aren't
john.levon@sun.com
parents: 2254
diff changeset
   453
        repo.commit(files, message, opts['user'], opts['date'], match,
2268
6c9305fbebaf fix coding style of backout editor change.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2267
diff changeset
   454
                    force_editor=opts.get('force_editor'))
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
   455
    except ValueError, inst:
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
   456
        raise util.Abort(str(inst))
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   457
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   458
def docopy(ui, repo, pats, opts, wlock):
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   459
    # called with the repo lock held
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   460
    #
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   461
    # hgsep => pathname that uses "/" to separate directories
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   462
    # ossep => pathname that uses os.sep to separate directories
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   463
    cwd = repo.getcwd()
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   464
    errors = 0
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   465
    copied = []
1514
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   466
    targets = {}
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   467
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   468
    # abs: hgsep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   469
    # rel: ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   470
    # return: hgsep
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   471
    def okaytocopy(abs, rel, exact):
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   472
        reasons = {'?': _('is not managed'),
1634
f49f602fae92 copy & rename can ignore removed source files
Robin Farine <robin.farine@terminus.org>
parents: 1633
diff changeset
   473
                   'a': _('has been marked for add'),
f49f602fae92 copy & rename can ignore removed source files
Robin Farine <robin.farine@terminus.org>
parents: 1633
diff changeset
   474
                   'r': _('has been marked for remove')}
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   475
        state = repo.dirstate.state(abs)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   476
        reason = reasons.get(state)
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   477
        if reason:
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   478
            if state == 'a':
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   479
                origsrc = repo.dirstate.copied(abs)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   480
                if origsrc is not None:
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   481
                    return origsrc
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   482
            if exact:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   483
                ui.warn(_('%s: not copying - file %s\n') % (rel, reason))
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   484
        else:
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   485
            return abs
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   486
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   487
    # origsrc: hgsep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   488
    # abssrc: hgsep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   489
    # relsrc: ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   490
    # target: ossep
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   491
    def copy(origsrc, abssrc, relsrc, target, exact):
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   492
        abstarget = util.canonpath(repo.root, cwd, target)
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   493
        reltarget = util.pathto(cwd, abstarget)
1514
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   494
        prevsrc = targets.get(abstarget)
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   495
        if prevsrc is not None:
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   496
            ui.warn(_('%s: not overwriting - %s collides with %s\n') %
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   497
                    (reltarget, util.localpath(abssrc),
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   498
                     util.localpath(prevsrc)))
1514
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   499
            return
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   500
        if (not opts['after'] and os.path.exists(reltarget) or
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   501
            opts['after'] and repo.dirstate.state(abstarget) not in '?r'):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   502
            if not opts['force']:
1513
5c3b93b244aa copy & rename don't overwrite unless --force is specified
Robin Farine <robin.farine@terminus.org>
parents: 1512
diff changeset
   503
                ui.warn(_('%s: not overwriting - file exists\n') %
5c3b93b244aa copy & rename don't overwrite unless --force is specified
Robin Farine <robin.farine@terminus.org>
parents: 1512
diff changeset
   504
                        reltarget)
5c3b93b244aa copy & rename don't overwrite unless --force is specified
Robin Farine <robin.farine@terminus.org>
parents: 1512
diff changeset
   505
                return
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
   506
            if not opts['after'] and not opts.get('dry_run'):
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   507
                os.unlink(reltarget)
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   508
        if opts['after']:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   509
            if not os.path.exists(reltarget):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   510
                return
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   511
        else:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   512
            targetdir = os.path.dirname(reltarget) or '.'
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
   513
            if not os.path.isdir(targetdir) and not opts.get('dry_run'):
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   514
                os.makedirs(targetdir)
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   515
            try:
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   516
                restore = repo.dirstate.state(abstarget) == 'r'
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
   517
                if restore and not opts.get('dry_run'):
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   518
                    repo.undelete([abstarget], wlock)
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   519
                try:
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
   520
                    if not opts.get('dry_run'):
3629
4cfb72bcb978 util: add copyfile function
Matt Mackall <mpm@selenic.com>
parents: 3628
diff changeset
   521
                        util.copyfile(relsrc, reltarget)
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   522
                    restore = False
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   523
                finally:
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   524
                    if restore:
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   525
                        repo.remove([abstarget], wlock)
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   526
            except IOError, inst:
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   527
                if inst.errno == errno.ENOENT:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   528
                    ui.warn(_('%s: deleted in working copy\n') % relsrc)
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   529
                else:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   530
                    ui.warn(_('%s: cannot copy - %s\n') %
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   531
                            (relsrc, inst.strerror))
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   532
                    errors += 1
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   533
                    return
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   534
        if ui.verbose or not exact:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   535
            ui.status(_('copying %s to %s\n') % (relsrc, reltarget))
1514
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
   536
        targets[abstarget] = abssrc
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
   537
        if abstarget != origsrc and not opts.get('dry_run'):
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
   538
            repo.copy(origsrc, abstarget, wlock)
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   539
        copied.append((abssrc, relsrc, exact))
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   540
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   541
    # pat: ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   542
    # dest ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   543
    # srcs: list of (hgsep, hgsep, ossep, bool)
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   544
    # return: function that takes hgsep and returns ossep
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   545
    def targetpathfn(pat, dest, srcs):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   546
        if os.path.isdir(pat):
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   547
            abspfx = util.canonpath(repo.root, cwd, pat)
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   548
            abspfx = util.localpath(abspfx)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   549
            if destdirexists:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   550
                striplen = len(os.path.split(abspfx)[0])
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   551
            else:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   552
                striplen = len(abspfx)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   553
            if striplen:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   554
                striplen += len(os.sep)
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   555
            res = lambda p: os.path.join(dest, util.localpath(p)[striplen:])
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   556
        elif destdirexists:
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   557
            res = lambda p: os.path.join(dest,
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   558
                                         os.path.basename(util.localpath(p)))
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   559
        else:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   560
            res = lambda p: dest
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   561
        return res
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   562
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   563
    # pat: ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   564
    # dest ossep
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   565
    # srcs: list of (hgsep, hgsep, ossep, bool)
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   566
    # return: function that takes hgsep and returns ossep
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   567
    def targetpathafterfn(pat, dest, srcs):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   568
        if util.patkind(pat, None)[0]:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   569
            # a mercurial pattern
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   570
            res = lambda p: os.path.join(dest,
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   571
                                         os.path.basename(util.localpath(p)))
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   572
        else:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   573
            abspfx = util.canonpath(repo.root, cwd, pat)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   574
            if len(abspfx) < len(srcs[0][0]):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   575
                # A directory. Either the target path contains the last
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   576
                # component of the source path or it does not.
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   577
                def evalpath(striplen):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   578
                    score = 0
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   579
                    for s in srcs:
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   580
                        t = os.path.join(dest, util.localpath(s[0])[striplen:])
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   581
                        if os.path.exists(t):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   582
                            score += 1
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   583
                    return score
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   584
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   585
                abspfx = util.localpath(abspfx)
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   586
                striplen = len(abspfx)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   587
                if striplen:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   588
                    striplen += len(os.sep)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   589
                if os.path.isdir(os.path.join(dest, os.path.split(abspfx)[1])):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   590
                    score = evalpath(striplen)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   591
                    striplen1 = len(os.path.split(abspfx)[0])
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   592
                    if striplen1:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   593
                        striplen1 += len(os.sep)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   594
                    if evalpath(striplen1) > score:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   595
                        striplen = striplen1
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   596
                res = lambda p: os.path.join(dest,
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   597
                                             util.localpath(p)[striplen:])
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   598
            else:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   599
                # a file
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   600
                if destdirexists:
3670
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   601
                    res = lambda p: os.path.join(dest,
d2d8d23944a9 commands.docopy: pay attention on whether paths use "/" or os.sep
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3645
diff changeset
   602
                                        os.path.basename(util.localpath(p)))
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   603
                else:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
   604
                    res = lambda p: dest
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   605
        return res
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   606
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   607
4055
e37786b29bed docopy: deal with globs on windows in a better way
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4053
diff changeset
   608
    pats = util.expand_glob(pats)
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   609
    if not pats:
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   610
        raise util.Abort(_('no source or destination specified'))
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   611
    if len(pats) == 1:
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   612
        raise util.Abort(_('no destination specified'))
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   613
    dest = pats.pop()
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   614
    destdirexists = os.path.isdir(dest)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   615
    if (len(pats) > 1 or util.patkind(pats[0], None)[0]) and not destdirexists:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   616
        raise util.Abort(_('with multiple sources, destination must be an '
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   617
                         'existing directory'))
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   618
    if opts['after']:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   619
        tfn = targetpathafterfn
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   620
    else:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   621
        tfn = targetpathfn
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   622
    copylist = []
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   623
    for pat in pats:
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   624
        srcs = []
4055
e37786b29bed docopy: deal with globs on windows in a better way
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4053
diff changeset
   625
        for tag, abssrc, relsrc, exact in cmdutil.walk(repo, [pat], opts,
e37786b29bed docopy: deal with globs on windows in a better way
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4053
diff changeset
   626
                                                       globbed=True):
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   627
            origsrc = okaytocopy(abssrc, relsrc, exact)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   628
            if origsrc:
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
   629
                srcs.append((origsrc, abssrc, relsrc, exact))
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   630
        if not srcs:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   631
            continue
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   632
        copylist.append((tfn(pat, dest, srcs), srcs))
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   633
    if not copylist:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   634
        raise util.Abort(_('no files to copy'))
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
   635
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
   636
    for targetpath, srcs in copylist:
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
   637
        for origsrc, abssrc, relsrc, exact in srcs:
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
   638
            copy(origsrc, abssrc, relsrc, targetpath(abssrc), exact)
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   639
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   640
    if errors:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   641
        ui.warn(_('(consider using --after)\n'))
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
   642
    return errors, copied
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
   643
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
   644
def copy(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   645
    """mark files as copied for the next commit
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   646
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   647
    Mark dest as having copies of source files.  If dest is a
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   648
    directory, copies are put in that directory.  If dest is a file,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   649
    there can only be one source.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   650
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   651
    By default, this command copies the contents of files as they
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   652
    stand in the working directory.  If invoked with --after, the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   653
    operation is recorded, but no copying is performed.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   654
3829
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
   655
    This command takes effect in the next commit. To undo a copy
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
   656
    before that, see hg revert.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   657
    """
2016
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
   658
    wlock = repo.wlock(0)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
   659
    errs, copied = docopy(ui, repo, pats, opts, wlock)
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
   660
    return errs
363
ae96b7e1318d Add hg copy
mpm@selenic.com
parents: 355
diff changeset
   661
1262
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
   662
def debugancestor(ui, index, rev1, rev2):
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
   663
    """find the ancestor revision of two revisions in a given index"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   664
    r = revlog.revlog(util.opener(os.getcwd(), audit=False), index, "", 0)
1262
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
   665
    a = r.ancestor(r.lookup(rev1), r.lookup(rev2))
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
   666
    ui.write("%d:%s\n" % (r.rev(a), hex(a)))
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
   667
2034
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   668
def debugcomplete(ui, cmd='', **opts):
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
   669
    """returns the completion list associated with the given command"""
2034
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   670
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   671
    if opts['options']:
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   672
        options = []
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   673
        otables = [globalopts]
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   674
        if cmd:
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
   675
            aliases, entry = findcmd(ui, cmd)
2034
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   676
            otables.append(entry[1])
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   677
        for t in otables:
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   678
            for o in t:
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   679
                if o[0]:
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   680
                    options.append('-%s' % o[0])
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   681
                options.append('--%s' % o[1])
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   682
        ui.write("%s\n" % "\n".join(options))
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   683
        return
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   684
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
   685
    clist = findpossible(ui, cmd).keys()
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
   686
    clist.sort()
2034
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
   687
    ui.write("%s\n" % "\n".join(clist))
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
   688
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   689
def debugrebuildstate(ui, repo, rev=None):
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   690
    """rebuild the dirstate as it would look like for the given revision"""
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   691
    if not rev:
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   692
        rev = repo.changelog.tip()
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   693
    else:
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   694
        rev = repo.lookup(rev)
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   695
    change = repo.changelog.read(rev)
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   696
    n = change[0]
2840
046a8b03ea59 Change remaining users of manifest flags
Matt Mackall <mpm@selenic.com>
parents: 2836
diff changeset
   697
    files = repo.manifest.read(n)
1760
13f8e068d13c fix typo in debugrebuildstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1755
diff changeset
   698
    wlock = repo.wlock()
2840
046a8b03ea59 Change remaining users of manifest flags
Matt Mackall <mpm@selenic.com>
parents: 2836
diff changeset
   699
    repo.dirstate.rebuild(rev, files)
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
   700
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   701
def debugcheckstate(ui, repo):
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   702
    """validate the correctness of the current dirstate"""
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   703
    parent1, parent2 = repo.dirstate.parents()
555
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
   704
    repo.dirstate.read()
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
   705
    dc = repo.dirstate.map
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   706
    keys = dc.keys()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   707
    keys.sort()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   708
    m1n = repo.changelog.read(parent1)[0]
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   709
    m2n = repo.changelog.read(parent2)[0]
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   710
    m1 = repo.manifest.read(m1n)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   711
    m2 = repo.manifest.read(m2n)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   712
    errors = 0
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   713
    for f in dc:
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   714
        state = repo.dirstate.state(f)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   715
        if state in "nr" and f not in m1:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   716
            ui.warn(_("%s in state %s, but not in manifest1\n") % (f, state))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   717
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   718
        if state in "a" and f in m1:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   719
            ui.warn(_("%s in state %s, but also in manifest1\n") % (f, state))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   720
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   721
        if state in "m" and f not in m1 and f not in m2:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   722
            ui.warn(_("%s in state %s, but not in either manifest\n") %
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
   723
                    (f, state))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   724
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   725
    for f in m1:
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   726
        state = repo.dirstate.state(f)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   727
        if state not in "nrm":
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
   728
            ui.warn(_("%s in manifest1, but listed as state %s") % (f, state))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   729
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   730
    if errors:
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
   731
        error = _(".hg/dirstate inconsistent with current parent's manifest")
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
   732
        raise util.Abort(error)
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   733
3553
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
   734
def showconfig(ui, repo, *values, **opts):
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   735
    """show combined config settings from all hgrc files
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   736
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   737
    With no args, print names and values of all config items.
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   738
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   739
    With one arg of the form section.name, print just the value of
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   740
    that config item.
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   741
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   742
    With multiple args, print names and values of all config items
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   743
    with matching section names."""
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   744
3553
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
   745
    untrusted = bool(opts.get('untrusted'))
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   746
    if values:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   747
        if len([v for v in values if '.' in v]) > 1:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   748
            raise util.Abort(_('only one config item permitted'))
3553
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
   749
    for section, name, value in ui.walkconfig(untrusted=untrusted):
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   750
        sectname = section + '.' + name
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   751
        if values:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   752
            for v in values:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   753
                if v == section:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   754
                    ui.write('%s=%s\n' % (sectname, value))
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   755
                elif v == sectname:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   756
                    ui.write(value, '\n')
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   757
        else:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
   758
            ui.write('%s=%s\n' % (sectname, value))
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 989
diff changeset
   759
1395
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   760
def debugsetparents(ui, repo, rev1, rev2=None):
1470
fb9b84c91222 minor fix on command help docstrings
TK Soh <teekaysoh@yahoo.com>
parents: 1469
diff changeset
   761
    """manually set the parents of the current working directory
1395
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   762
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   763
    This is useful for writing repository conversion tools, but should
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   764
    be used with care.
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   765
    """
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   766
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   767
    if not rev2:
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   768
        rev2 = hex(nullid)
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   769
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   770
    repo.dirstate.setparents(repo.lookup(rev1), repo.lookup(rev2))
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
   771
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   772
def debugstate(ui, repo):
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   773
    """show the contents of the current dirstate"""
555
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
   774
    repo.dirstate.read()
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
   775
    dc = repo.dirstate.map
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   776
    keys = dc.keys()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   777
    keys.sort()
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   778
    for file_ in keys:
4053
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   779
        if dc[file_][3] == -1:
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   780
            # Pad or slice to locale representation
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   781
            locale_len = len(time.strftime("%x %X", time.localtime(0)))
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   782
            timestr = 'unset'
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   783
            timestr = timestr[:locale_len] + ' '*(locale_len - len(timestr))
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   784
        else:
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   785
            timestr = time.strftime("%x %X", time.localtime(dc[file_][3]))
791
040655ea0cc4 Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 770
diff changeset
   786
        ui.write("%c %3o %10d %s %s\n"
040655ea0cc4 Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 770
diff changeset
   787
                 % (dc[file_][0], dc[file_][1] & 0777, dc[file_][2],
4053
994fec0ee900 mtime can be -1 after a merge and cause tracebacks on win32.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4043
diff changeset
   788
                    timestr, file_))
3159
e43fd1623fe1 fix users of dirstate.copies broken by b1f10d3223c1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3146
diff changeset
   789
    for f in repo.dirstate.copies():
e43fd1623fe1 fix users of dirstate.copies broken by b1f10d3223c1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3146
diff changeset
   790
        ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
   791
1039
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
   792
def debugdata(ui, file_, rev):
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
   793
    """dump the contents of an data file revision"""
1835
bdfb524d728a Validate paths before reading or writing files in repository or working dir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1833
diff changeset
   794
    r = revlog.revlog(util.opener(os.getcwd(), audit=False),
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   795
                      file_[:-2] + ".i", file_, 0)
1313
1cc7c0cbc30b Fix traceback during invalid rev identifier for debugdata
Anupam Kapoor<anupam.kapoor@gmail.com>
parents: 1312
diff changeset
   796
    try:
1cc7c0cbc30b Fix traceback during invalid rev identifier for debugdata
Anupam Kapoor<anupam.kapoor@gmail.com>
parents: 1312
diff changeset
   797
        ui.write(r.revision(r.lookup(rev)))
1cc7c0cbc30b Fix traceback during invalid rev identifier for debugdata
Anupam Kapoor<anupam.kapoor@gmail.com>
parents: 1312
diff changeset
   798
    except KeyError:
3072
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3071
diff changeset
   799
        raise util.Abort(_('invalid revision identifier %s') % rev)
1039
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
   800
3812
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   801
def debugdate(ui, date, range=None, **opts):
3805
299d6cce6c0b add debugdate command
Matt Mackall <mpm@selenic.com>
parents: 3804
diff changeset
   802
    """parse and display a date"""
3812
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   803
    if opts["extended"]:
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   804
        d = util.parsedate(date, util.extendeddateformats)
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   805
    else:
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   806
        d = util.parsedate(date)
3805
299d6cce6c0b add debugdate command
Matt Mackall <mpm@selenic.com>
parents: 3804
diff changeset
   807
    ui.write("internal: %s %s\n" % d)
299d6cce6c0b add debugdate command
Matt Mackall <mpm@selenic.com>
parents: 3804
diff changeset
   808
    ui.write("standard: %s\n" % util.datestr(d))
3812
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   809
    if range:
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   810
        m = util.matchdate(range)
bf6ab30559e6 Add date matching support
Matt Mackall <mpm@selenic.com>
parents: 3805
diff changeset
   811
        ui.write("match: %s\n" % m(d[0]))
3805
299d6cce6c0b add debugdate command
Matt Mackall <mpm@selenic.com>
parents: 3804
diff changeset
   812
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   813
def debugindex(ui, file_):
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   814
    """dump the contents of an index file"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   815
    r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0)
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
   816
    ui.write("   rev    offset  length   base linkrev" +
989
1b6eb272b238 Reformat debugindex output
mpm@selenic.com
parents: 988
diff changeset
   817
             " nodeid       p1           p2\n")
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
   818
    for i in xrange(r.count()):
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   819
        node = r.node(i)
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   820
        pp = r.parents(node)
989
1b6eb272b238 Reformat debugindex output
mpm@selenic.com
parents: 988
diff changeset
   821
        ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   822
                i, r.start(i), r.length(i), r.base(i), r.linkrev(node),
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   823
            short(node), short(pp[0]), short(pp[1])))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
   824
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   825
def debugindexdot(ui, file_):
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
   826
    """dump an index DAG as a .dot file"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
   827
    r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0)
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
   828
    ui.write("digraph G {\n")
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
   829
    for i in xrange(r.count()):
2287
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
   830
        node = r.node(i)
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
   831
        pp = r.parents(node)
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
   832
        ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
   833
        if pp[1] != nullid:
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
   834
            ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
   835
    ui.write("}\n")
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
   836
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   837
def debuginstall(ui):
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   838
    '''test Mercurial installation'''
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   839
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   840
    def writetemp(contents):
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   841
        (fd, name) = tempfile.mkstemp()
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   842
        f = os.fdopen(fd, "wb")
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   843
        f.write(contents)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   844
        f.close()
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   845
        return name
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   846
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   847
    problems = 0
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   848
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   849
    # encoding
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   850
    ui.status(_("Checking encoding (%s)...\n") % util._encoding)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   851
    try:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   852
        util.fromlocal("test")
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   853
    except util.Abort, inst:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   854
        ui.write(" %s\n" % inst)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   855
        ui.write(_(" (check that your locale is properly set)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   856
        problems += 1
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   857
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   858
    # compiled modules
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   859
    ui.status(_("Checking extensions...\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   860
    try:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   861
        import bdiff, mpatch, base85
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   862
    except Exception, inst:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   863
        ui.write(" %s\n" % inst)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   864
        ui.write(_(" One or more extensions could not be found"))
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   865
        ui.write(_(" (check that you compiled the extensions)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   866
        problems += 1
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   867
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   868
    # templates
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   869
    ui.status(_("Checking templates...\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   870
    try:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   871
        import templater
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   872
        t = templater.templater(templater.templatepath("map-cmdline.default"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   873
    except Exception, inst:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   874
        ui.write(" %s\n" % inst)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   875
        ui.write(_(" (templates seem to have been installed incorrectly)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   876
        problems += 1
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   877
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   878
    # patch
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   879
    ui.status(_("Checking patch...\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   880
    path = os.environ.get('PATH', '')
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   881
    patcher = util.find_in_path('gpatch', path,
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   882
                                util.find_in_path('patch', path, None))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   883
    if not patcher:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   884
        ui.write(_(" Can't find patch or gpatch in PATH\n"))
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   885
        ui.write(_(" (specify a patch utility in your .hgrc file)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   886
        problems += 1
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   887
    else:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   888
        # actually attempt a patch here
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   889
        a = "1\n2\n3\n4\n"
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   890
        b = "1\n2\n3\ninsert\n4\n"
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   891
        d = mdiff.unidiff(a, None, b, None, "a")
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   892
        fa = writetemp(a)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   893
        fd = writetemp(d)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   894
        fp = os.popen('%s %s %s' % (patcher, fa, fd))
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   895
        files = []
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   896
        output = ""
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   897
        for line in fp:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   898
            output += line
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   899
            if line.startswith('patching file '):
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   900
                pf = util.parse_patch_output(line.rstrip())
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   901
                files.append(pf)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   902
        if files != [fa]:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   903
            ui.write(_(" unexpected patch output!"))
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   904
            ui.write(_(" (you may have an incompatible version of patch)\n"))
3858
7c12958eba26 debuginstall: fix an incorrect variable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3857
diff changeset
   905
            ui.write(output)
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   906
            problems += 1
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   907
        a = file(fa).read()
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   908
        if a != b:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   909
            ui.write(_(" patch test failed!"))
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   910
            ui.write(_(" (you may have an incompatible version of patch)\n"))
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   911
            problems += 1
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   912
        os.unlink(fa)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   913
        os.unlink(fd)
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   914
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   915
    # merge helper
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   916
    ui.status(_("Checking merge helper...\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   917
    cmd = (os.environ.get("HGMERGE") or ui.config("ui", "merge")
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   918
           or "hgmerge")
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   919
    cmdpath = util.find_in_path(cmd, path)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   920
    if not cmdpath:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   921
        cmdpath = util.find_in_path(cmd.split()[0], path)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   922
    if not cmdpath:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   923
        if cmd == 'hgmerge':
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   924
            ui.write(_(" No merge helper set and can't find default"
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   925
                       " hgmerge script in PATH\n"))
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   926
            ui.write(_(" (specify a merge helper in your .hgrc file)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   927
        else:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   928
            ui.write(_(" Can't find merge helper '%s' in PATH\n") % cmd)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   929
            ui.write(_(" (specify a merge helper in your .hgrc file)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   930
            problems += 1
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   931
    else:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   932
        # actually attempt a patch here
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   933
        fa = writetemp("1\n2\n3\n4\n")
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   934
        fl = writetemp("1\n2\n3\ninsert\n4\n")
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   935
        fr = writetemp("begin\n1\n2\n3\n4\n")
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   936
        r = os.system('%s %s %s %s' % (cmd, fl, fa, fr))
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   937
        if r:
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   938
            ui.write(_(" got unexpected merge error %d!") % r)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   939
            problems += 1
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   940
        m = file(fl).read()
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   941
        if m != "begin\n1\n2\n3\ninsert\n4\n":
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   942
            ui.write(_(" got unexpected merge results!") % r)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   943
            ui.write(_(" (your merge helper may have the"
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   944
                       " wrong argument order)\n"))
3846
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   945
            ui.write(m)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   946
        os.unlink(fa)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   947
        os.unlink(fl)
18855084b922 Make debuginstall actually attempt to use external patch and merge
Matt Mackall <mpm@selenic.com>
parents: 3844
diff changeset
   948
        os.unlink(fr)
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   949
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   950
    # editor
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   951
    ui.status(_("Checking commit editor...\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   952
    editor = (os.environ.get("HGEDITOR") or
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   953
              ui.config("ui", "editor") or
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   954
              os.environ.get("EDITOR", "vi"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   955
    cmdpath = util.find_in_path(editor, path)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   956
    if not cmdpath:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   957
        cmdpath = util.find_in_path(editor.split()[0], path)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   958
    if not cmdpath:
3855
b9cdd6f2aa43 debuginstall: fix a copy/paste error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3848
diff changeset
   959
        if editor == 'vi':
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   960
            ui.write(_(" No commit editor set and can't find vi in PATH\n"))
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   961
            ui.write(_(" (specify a commit editor in your .hgrc file)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   962
        else:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   963
            ui.write(_(" Can't find editor '%s' in PATH\n") % editor)
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   964
            ui.write(_(" (specify a commit editor in your .hgrc file)\n"))
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   965
            problems += 1
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   966
3848
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   967
    # check username
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   968
    ui.status(_("Checking username...\n"))
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   969
    user = os.environ.get("HGUSER")
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   970
    if user is None:
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   971
        user = ui.config("ui", "username")
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   972
    if user is None:
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   973
        user = os.environ.get("EMAIL")
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   974
    if not user:
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   975
        ui.warn(" ")
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   976
        ui.username()
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   977
        ui.write(_(" (specify a username in your .hgrc file)\n"))
8cbf060f637e Add some remedies and a username check to debuginstall
Matt Mackall <mpm@selenic.com>
parents: 3846
diff changeset
   978
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   979
    if not problems:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   980
        ui.status(_("No problems detected\n"))
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   981
    else:
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   982
        ui.write(_("%s problems detected,"
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   983
                   " please check your install!\n") % problems)
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   984
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   985
    return problems
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
   986
3652
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   987
def debugrename(ui, repo, file1, *pats, **opts):
1194
c165cbf56bb1 Add doc string for debugrename.
bos@serpentine.internal.keyresearch.com
parents: 1193
diff changeset
   988
    """dump rename information"""
3652
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   989
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   990
    ctx = repo.changectx(opts.get('rev', 'tip'))
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   991
    for src, abs, rel, exact in cmdutil.walk(repo, (file1,) + pats, opts,
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   992
                                             ctx.node()):
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   993
        m = ctx.filectx(abs).renamed()
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   994
        if m:
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   995
            ui.write(_("%s renamed from %s:%s\n") % (rel, m[0], hex(m[1])))
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   996
        else:
f4dece0f7016 refactor debugrenamed
Matt Mackall <mpm@selenic.com>
parents: 3651
diff changeset
   997
            ui.write(_("%s not renamed\n") % rel)
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
   998
820
89985a1b3427 Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 815
diff changeset
   999
def debugwalk(ui, repo, *pats, **opts):
1053
1539ca091d86 Added missing doc strings for two new debug commmands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1052
diff changeset
  1000
    """show how files match on given patterns"""
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  1001
    items = list(cmdutil.walk(repo, pats, opts))
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1002
    if not items:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1003
        return
1309
332f225b835c Make debugwalk strip trailing spaces and remove these from test-walk.out
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1285
diff changeset
  1004
    fmt = '%%s  %%-%ds  %%-%ds  %%s' % (
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
  1005
        max([len(abs) for (src, abs, rel, exact) in items]),
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
  1006
        max([len(rel) for (src, abs, rel, exact) in items]))
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
  1007
    for src, abs, rel, exact in items:
1309
332f225b835c Make debugwalk strip trailing spaces and remove these from test-walk.out
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1285
diff changeset
  1008
        line = fmt % (src, abs, rel, exact and 'exact' or '')
332f225b835c Make debugwalk strip trailing spaces and remove these from test-walk.out
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1285
diff changeset
  1009
        ui.write("%s\n" % line.rstrip())
820
89985a1b3427 Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 815
diff changeset
  1010
732
ba0b6d17a6de Convert diff command over to using walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 731
diff changeset
  1011
def diff(ui, repo, *pats, **opts):
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
  1012
    """diff repository (or selected files)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1013
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1014
    Show differences between revisions for the specified files.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1015
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1016
    Differences between files are shown using the unified diff format.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1017
3822
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1018
    NOTE: diff may generate unexpected results for merges, as it will
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1019
    default to comparing against the working directory's first parent
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1020
    changeset if no revisions are specified.
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1021
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1022
    When two revision arguments are given, then changes are shown
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1023
    between those revisions. If only one revision is specified then
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1024
    that revision is compared to the working directory, and, when no
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1025
    revisions are specified, the working directory files are compared
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1026
    to its parent.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1027
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1028
    Without the -a option, diff will avoid generating diffs of files
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1029
    it detects as binary. With -a, diff will generate a diff anyway,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1030
    probably with undesirable results.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1031
    """
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3706
diff changeset
  1032
    node1, node2 = cmdutil.revpair(repo, opts['rev'])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  1033
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  1034
    fns, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
1014
e37cd99fa909 Clean up argument passing for dodiff
mpm@selenic.com
parents: 989
diff changeset
  1035
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
  1036
    patch.diff(repo, node1, node2, fns, match=matchfn,
2888
3848488244fc Move ui.diffopts to patch.diffopts where it belongs
Matt Mackall <mpm@selenic.com>
parents: 2883
diff changeset
  1037
               opts=patch.diffopts(ui, opts))
396
8f8bb77d560e Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 395
diff changeset
  1038
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1039
def export(ui, repo, *changesets, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1040
    """dump the header and diffs for one or more changesets
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1041
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1042
    Print the changeset header and diffs for one or more revisions.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1043
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1044
    The information shown in the changeset header is: author,
3822
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1045
    changeset hash, parent(s) and commit comment.
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1046
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1047
    NOTE: export may generate unexpected diff output for merge changesets,
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1048
    as it will compare the merge changeset against its first parent only.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1049
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1050
    Output may be to a file, in which case the name of the file is
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1051
    given using a format string.  The formatting rules are as follows:
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1052
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1053
    %%   literal "%" character
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1054
    %H   changeset hash (40 bytes of hexadecimal)
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1055
    %N   number of patches being generated
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1056
    %R   changeset revision number
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1057
    %b   basename of the exporting repository
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1058
    %h   short-form changeset hash (12 bytes of hexadecimal)
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1059
    %n   zero-padded sequence number, starting at 1
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1060
    %r   zero-padded changeset revision number
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1061
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1062
    Without the -a option, export will avoid generating diffs of files
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1063
    it detects as binary. With -a, export will generate a diff anyway,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1064
    probably with undesirable results.
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1065
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1066
    With the --switch-parent option, the diff will be against the second
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1067
    parent. It can be useful to review a merge.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1068
    """
610
4c02464cb9f0 check export options for changeset before running
shaleh@speakeasy.net
parents: 609
diff changeset
  1069
    if not changesets:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  1070
        raise util.Abort(_("export requires at least one changeset"))
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3706
diff changeset
  1071
    revs = cmdutil.revrange(repo, changesets)
2874
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
  1072
    if len(revs) > 1:
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
  1073
        ui.note(_('exporting patches:\n'))
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
  1074
    else:
4ec58b157265 refactor text diff/patch code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2871
diff changeset
  1075
        ui.note(_('exporting patch:\n'))
3900
2b3175acb653 Don't use node length for calculating revision number length.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3885
diff changeset
  1076
    patch.export(repo, revs, template=opts['output'],
2888
3848488244fc Move ui.diffopts to patch.diffopts where it belongs
Matt Mackall <mpm@selenic.com>
parents: 2883
diff changeset
  1077
                 switch_parent=opts['switch_parent'],
3848488244fc Move ui.diffopts to patch.diffopts where it belongs
Matt Mackall <mpm@selenic.com>
parents: 2883
diff changeset
  1078
                 opts=patch.diffopts(ui, opts))
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1079
1108
7a75d8fbbdaf Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1106
diff changeset
  1080
def grep(ui, repo, pattern, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1081
    """search for a pattern in specified files and revisions
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1082
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1083
    Search revisions of files for a regular expression.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1084
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1085
    This command behaves differently than Unix grep.  It only accepts
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1086
    Python/Perl regexps.  It searches repository history, not the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1087
    working directory.  It always prints the revision number in which
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1088
    a match appears.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1089
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1090
    By default, grep only prints output for the first revision of a
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1091
    file in which it finds a match.  To get it to print every revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1092
    that contains a change in match status ("-" for a match that
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1093
    becomes a non-match, or "+" for a non-match that becomes a match),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1094
    use the --all flag.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1095
    """
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1096
    reflags = 0
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1097
    if opts['ignore_case']:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1098
        reflags |= re.I
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1099
    regexp = re.compile(pattern, reflags)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1100
    sep, eol = ':', '\n'
1108
7a75d8fbbdaf Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1106
diff changeset
  1101
    if opts['print0']:
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1102
        sep = eol = '\0'
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1103
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1104
    fcache = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1105
    def getfile(fn):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1106
        if fn not in fcache:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1107
            fcache[fn] = repo.file(fn)
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1108
        return fcache[fn]
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1109
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1110
    def matchlines(body):
1059
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1111
        begin = 0
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1112
        linenum = 0
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1113
        while True:
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1114
            match = regexp.search(body, begin)
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1115
            if not match:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1116
                break
1059
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1117
            mstart, mend = match.span()
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1118
            linenum += body.count('\n', begin, mstart) + 1
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1119
            lstart = body.rfind('\n', begin, mstart) + 1 or begin
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1120
            lend = body.find('\n', mend)
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1121
            yield linenum, mstart - lstart, mend - lstart, body[lstart:lend]
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1122
            begin = lend + 1
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1123
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1552
diff changeset
  1124
    class linestate(object):
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1125
        def __init__(self, line, linenum, colstart, colend):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1126
            self.line = line
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1127
            self.linenum = linenum
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1128
            self.colstart = colstart
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1129
            self.colend = colend
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1130
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1131
        def __eq__(self, other):
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1132
            return self.line == other.line
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1133
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1134
    matches = {}
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1135
    copies = {}
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1136
    def grepbody(fn, rev, body):
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1137
        matches[rev].setdefault(fn, [])
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1138
        m = matches[rev][fn]
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1139
        for lnum, cstart, cend, line in matchlines(body):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1140
            s = linestate(line, lnum, cstart, cend)
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1141
            m.append(s)
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1142
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1143
    def difflinestates(a, b):
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1144
        sm = difflib.SequenceMatcher(None, a, b)
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1145
        for tag, alo, ahi, blo, bhi in sm.get_opcodes():
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1146
            if tag == 'insert':
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
  1147
                for i in xrange(blo, bhi):
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1148
                    yield ('+', b[i])
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1149
            elif tag == 'delete':
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
  1150
                for i in xrange(alo, ahi):
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1151
                    yield ('-', a[i])
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1152
            elif tag == 'replace':
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
  1153
                for i in xrange(alo, ahi):
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1154
                    yield ('-', a[i])
3472
df7202f6887c use xrange instead of range
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3471
diff changeset
  1155
                for i in xrange(blo, bhi):
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1156
                    yield ('+', b[i])
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1157
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1158
    prev = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1159
    def display(fn, rev, states, prevstates):
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1160
        counts = {'-': 0, '+': 0}
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1161
        filerevmatches = {}
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1162
        if incrementing or not opts['all']:
3523
7ed86c28f1ae Fixups for hg grep
Matt Mackall <mpm@selenic.com>
parents: 3521
diff changeset
  1163
            a, b, r = prevstates, states, rev
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1164
        else:
3523
7ed86c28f1ae Fixups for hg grep
Matt Mackall <mpm@selenic.com>
parents: 3521
diff changeset
  1165
            a, b, r = states, prevstates, prev.get(fn, -1)
2869
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1166
        for change, l in difflinestates(a, b):
81f351c5264d grep: display correct user/revision for --all in reverse.
Brendan Cully <brendan@kublai.com>
parents: 2854
diff changeset
  1167
            cols = [fn, str(r)]
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1168
            if opts['line_number']:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1169
                cols.append(str(l.linenum))
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1170
            if opts['all']:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1171
                cols.append(change)
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1172
            if opts['user']:
3650
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1173
                cols.append(ui.shortuser(get(r)[1]))
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1174
            if opts['files_with_matches']:
3523
7ed86c28f1ae Fixups for hg grep
Matt Mackall <mpm@selenic.com>
parents: 3521
diff changeset
  1175
                c = (fn, r)
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1176
                if c in filerevmatches:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1177
                    continue
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1178
                filerevmatches[c] = 1
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1179
            else:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1180
                cols.append(l.line)
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1181
            ui.write(sep.join(cols), eol)
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1182
            counts[change] += 1
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1183
        return counts['+'], counts['-']
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1184
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1185
    fstate = {}
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1186
    skip = {}
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3672
diff changeset
  1187
    get = util.cachefunc(lambda r: repo.changectx(r).changeset())
3650
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1188
    changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1189
    count = 0
1337
d4b25df77a9e Fix up some bugs for log and grep with empty repo
mpm@selenic.com
parents: 1331
diff changeset
  1190
    incrementing = False
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1191
    follow = opts.get('follow')
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1192
    for st, rev, fns in changeiter:
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1193
        if st == 'window':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1194
            incrementing = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1195
            matches.clear()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1196
        elif st == 'add':
3530
cd2216599c99 minor hg grep simplification
Matt Mackall <mpm@selenic.com>
parents: 3527
diff changeset
  1197
            mf = repo.changectx(rev).manifest()
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1198
            matches[rev] = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1199
            for fn in fns:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1200
                if fn in skip:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1201
                    continue
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1202
                fstate.setdefault(fn, {})
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1203
                try:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1204
                    grepbody(fn, rev, getfile(fn).read(mf[fn]))
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1205
                    if follow:
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1206
                        copied = getfile(fn).renamed(mf[fn])
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1207
                        if copied:
2931
0843bd53dcff Fix bug #345.
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
  1208
                            copies.setdefault(rev, {})[fn] = copied[0]
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1209
                except KeyError:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1210
                    pass
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1211
        elif st == 'iter':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1212
            states = matches[rev].items()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1213
            states.sort()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1214
            for fn, m in states:
2931
0843bd53dcff Fix bug #345.
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
  1215
                copy = copies.get(rev, {}).get(fn)
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1216
                if fn in skip:
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1217
                    if copy:
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1218
                        skip[copy] = True
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1219
                    continue
1212
ccb6201e3f28 Change grep -e to grep --all
mpm@selenic.com
parents: 1211
diff changeset
  1220
                if incrementing or not opts['all'] or fstate[fn]:
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1221
                    pos, neg = display(fn, rev, m, fstate[fn])
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1222
                    count += pos + neg
1212
ccb6201e3f28 Change grep -e to grep --all
mpm@selenic.com
parents: 1211
diff changeset
  1223
                    if pos and not opts['all']:
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1224
                        skip[fn] = True
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1225
                        if copy:
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1226
                            skip[copy] = True
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1227
                fstate[fn] = m
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1228
                if copy:
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1229
                    fstate[copy] = m
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1230
                prev[fn] = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1231
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1232
    if not incrementing:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1233
        fstate = fstate.items()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1234
        fstate.sort()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1235
        for fn, state in fstate:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1236
            if fn in skip:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1237
                continue
2931
0843bd53dcff Fix bug #345.
Brendan Cully <brendan@kublai.com>
parents: 2922
diff changeset
  1238
            if fn not in copies.get(prev[fn], {}):
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  1239
                display(fn, rev, {}, state)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1240
    return (count == 0 and 1) or 0
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1241
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  1242
def heads(ui, repo, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1243
    """show current repository heads
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1244
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1245
    Show all repository head changesets.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1246
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1247
    Repository "heads" are changesets that don't have children
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1248
    changesets. They are where development generally takes place and
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1249
    are the usual targets for update and merge operations.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1250
    """
1550
ccb9b62de892 add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1547
diff changeset
  1251
    if opts['rev']:
1551
e793cbc8be00 Fixes to "hg heads -r FOO":
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1550
diff changeset
  1252
        heads = repo.heads(repo.lookup(opts['rev']))
1550
ccb9b62de892 add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1547
diff changeset
  1253
    else:
ccb9b62de892 add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1547
diff changeset
  1254
        heads = repo.heads()
3643
b4ad640a3bcf templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3631
diff changeset
  1255
    displayer = cmdutil.show_changeset(ui, repo, opts)
1550
ccb9b62de892 add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1547
diff changeset
  1256
    for n in heads:
3649
e50891e461e4 Consolidate brinfo handling
Matt Mackall <mpm@selenic.com>
parents: 3645
diff changeset
  1257
        displayer.show(changenode=n)
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
  1258
3655
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1259
def help_(ui, name=None, with_version=False):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1260
    """show help for a command, extension, or list of commands
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1261
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1262
    With no arguments, print a list of commands and short help.
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1263
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1264
    Given a command name, print help for that command.
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1265
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1266
    Given an extension name, print help for that extension, and the
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1267
    commands it provides."""
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1268
    option_lists = []
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1269
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1270
    def helpcmd(name):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1271
        if with_version:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1272
            version_(ui)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1273
            ui.write('\n')
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1274
        aliases, i = findcmd(ui, name)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1275
        # synopsis
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1276
        ui.write("%s\n\n" % i[2])
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1277
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1278
        # description
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1279
        doc = i[0].__doc__
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1280
        if not doc:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1281
            doc = _("(No help text available)")
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1282
        if ui.quiet:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1283
            doc = doc.splitlines(0)[0]
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1284
        ui.write("%s\n" % doc.rstrip())
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1285
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1286
        if not ui.quiet:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1287
            # aliases
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1288
            if len(aliases) > 1:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1289
                ui.write(_("\naliases: %s\n") % ', '.join(aliases[1:]))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1290
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1291
            # options
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1292
            if i[1]:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1293
                option_lists.append(("options", i[1]))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1294
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1295
    def helplist(select=None):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1296
        h = {}
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1297
        cmds = {}
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1298
        for c, e in table.items():
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1299
            f = c.split("|", 1)[0]
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1300
            if select and not select(f):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1301
                continue
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1302
            if name == "shortlist" and not f.startswith("^"):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1303
                continue
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1304
            f = f.lstrip("^")
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1305
            if not ui.debugflag and f.startswith("debug"):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1306
                continue
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1307
            doc = e[0].__doc__
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1308
            if not doc:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1309
                doc = _("(No help text available)")
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1310
            h[f] = doc.splitlines(0)[0].rstrip()
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1311
            cmds[f] = c.lstrip("^")
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1312
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1313
        fns = h.keys()
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1314
        fns.sort()
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1315
        m = max(map(len, fns))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1316
        for f in fns:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1317
            if ui.verbose:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1318
                commands = cmds[f].replace("|",", ")
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1319
                ui.write(" %s:\n      %s\n"%(commands, h[f]))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1320
            else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1321
                ui.write(' %-*s   %s\n' % (m, f, h[f]))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1322
3795
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1323
    def helptopic(name):
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1324
        v = None
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1325
        for i in help.helptable:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1326
            l = i.split('|')
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1327
            if name in l:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1328
                v = i
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1329
                header = l[-1]
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1330
        if not v:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1331
            raise UnknownCommand(name)
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1332
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1333
        # description
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1334
        doc = help.helptable[v]
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1335
        if not doc:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1336
            doc = _("(No help text available)")
3796
58133ba5847d Allow topics to be callables
Matt Mackall <mpm@selenic.com>
parents: 3795
diff changeset
  1337
        if callable(doc):
58133ba5847d Allow topics to be callables
Matt Mackall <mpm@selenic.com>
parents: 3795
diff changeset
  1338
            doc = doc()
3795
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1339
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1340
        ui.write("%s\n" % header)
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1341
        ui.write("%s\n" % doc.rstrip())
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1342
3655
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1343
    def helpext(name):
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1344
        try:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1345
            mod = findext(name)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1346
        except KeyError:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1347
            raise UnknownCommand(name)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1348
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1349
        doc = (mod.__doc__ or _('No help text available')).splitlines(0)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1350
        ui.write(_('%s extension - %s\n') % (name.split('.')[-1], doc[0]))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1351
        for d in doc[1:]:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1352
            ui.write(d, '\n')
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1353
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1354
        ui.status('\n')
4009
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1355
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1356
        try:
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1357
            ct = mod.cmdtable
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1358
        except AttributeError:
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1359
            ui.status(_('no commands defined\n'))
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1360
            return
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1361
3655
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1362
        if ui.verbose:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1363
            ui.status(_('list of commands:\n\n'))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1364
        else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1365
            ui.status(_('list of commands (use "hg help -v %s" '
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1366
                        'to show aliases and global options):\n\n') % name)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1367
4009
86098ec4b77a fix hg help <ext> for extension that do not define any command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3915
diff changeset
  1368
        modcmds = dict.fromkeys([c.split('|', 1)[0] for c in ct])
3655
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1369
        helplist(modcmds.has_key)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1370
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1371
    if name and name != 'shortlist':
3795
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1372
        i = None
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1373
        for f in (helpcmd, helptopic, helpext):
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1374
            try:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1375
                f(name)
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1376
                i = None
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1377
                break
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1378
            except UnknownCommand, inst:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1379
                i = inst
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1380
        if i:
17a11f4ff260 Add basic support for help topics and a dates topic
Matt Mackall <mpm@selenic.com>
parents: 3786
diff changeset
  1381
            raise i
3655
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1382
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1383
    else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1384
        # program name
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1385
        if ui.verbose or with_version:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1386
            version_(ui)
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1387
        else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1388
            ui.status(_("Mercurial Distributed SCM\n"))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1389
        ui.status('\n')
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1390
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1391
        # list of commands
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1392
        if name == "shortlist":
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1393
            ui.status(_('basic commands (use "hg help" '
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1394
                        'for the full list or option "-v" for details):\n\n'))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1395
        elif ui.verbose:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1396
            ui.status(_('list of commands:\n\n'))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1397
        else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1398
            ui.status(_('list of commands (use "hg help -v" '
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1399
                        'to show aliases and global options):\n\n'))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1400
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1401
        helplist()
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1402
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1403
    # global options
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1404
    if ui.verbose:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1405
        option_lists.append(("global options", globalopts))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1406
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1407
    # list all option lists
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1408
    opt_output = []
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1409
    for title, options in option_lists:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1410
        opt_output.append(("\n%s:\n" % title, None))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1411
        for shortopt, longopt, default, desc in options:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1412
            if "DEPRECATED" in desc and not ui.verbose: continue
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1413
            opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt,
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1414
                                          longopt and " --%s" % longopt),
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1415
                               "%s%s" % (desc,
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1416
                                         default
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1417
                                         and _(" (default: %s)") % default
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1418
                                         or "")))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1419
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1420
    if opt_output:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1421
        opts_len = max([len(line[0]) for line in opt_output if line[1]])
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1422
        for first, second in opt_output:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1423
            if second:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1424
                ui.write(" %-*s  %s\n" % (opts_len, first, second))
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1425
            else:
da361aa7a118 alphabetize help_ in commands
Matt Mackall <mpm@selenic.com>
parents: 3654
diff changeset
  1426
                ui.write("%s\n" % first)
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
  1427
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1428
def identify(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1429
    """print information about the working copy
1470
fb9b84c91222 minor fix on command help docstrings
TK Soh <teekaysoh@yahoo.com>
parents: 1469
diff changeset
  1430
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1431
    Print a short summary of the current state of the repo.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1432
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1433
    This summary identifies the repository state using one or two parent
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1434
    hash identifiers, followed by a "+" if there are uncommitted changes
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1435
    in the working directory, followed by a list of tags for this revision.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1436
    """
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1437
    parents = [p for p in repo.dirstate.parents() if p != nullid]
340
97a897d32dfc Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 339
diff changeset
  1438
    if not parents:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  1439
        ui.write(_("unknown\n"))
340
97a897d32dfc Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 339
diff changeset
  1440
        return
97a897d32dfc Handle the case where the current working copy is not based on a checkout.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 339
diff changeset
  1441
2966
fb493241d7f6 Only show long hashes with --debug, not --verbose
Matt Mackall <mpm@selenic.com>
parents: 2963
diff changeset
  1442
    hexfunc = ui.debugflag and hex or short
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
  1443
    modified, added, removed, deleted = repo.status()[:4]
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1444
    output = ["%s%s" %
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1445
              ('+'.join([hexfunc(parent) for parent in parents]),
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1446
              (modified or added or removed or deleted) and "+" or "")]
386
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1447
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1448
    if not ui.quiet:
3415
9a6491770b04 Report branch for hg id
Matt Mackall <mpm@selenic.com>
parents: 3414
diff changeset
  1449
3862
46abbed02b2d Use UTF-8 in .hg/branch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3859
diff changeset
  1450
        branch = util.tolocal(repo.workingctx().branch())
3415
9a6491770b04 Report branch for hg id
Matt Mackall <mpm@selenic.com>
parents: 3414
diff changeset
  1451
        if branch:
9a6491770b04 Report branch for hg id
Matt Mackall <mpm@selenic.com>
parents: 3414
diff changeset
  1452
            output.append("(%s)" % branch)
9a6491770b04 Report branch for hg id
Matt Mackall <mpm@selenic.com>
parents: 3414
diff changeset
  1453
386
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1454
        # multiple tags for a single parent separated by '/'
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1455
        parenttags = ['/'.join(tags)
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1456
                      for tags in map(repo.nodetags, parents) if tags]
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1457
        # tags for multiple parents separated by ' + '
758
c5db9581bfa6 There was an extra space after 'hg id' when there are no tags.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 757
diff changeset
  1458
        if parenttags:
c5db9581bfa6 There was an extra space after 'hg id' when there are no tags.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 757
diff changeset
  1459
            output.append(' + '.join(parenttags))
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1460
386
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1461
    ui.write("%s\n" % ' '.join(output))
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1462
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1463
def import_(ui, repo, patch1, *patches, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1464
    """import an ordered set of patches
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1465
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1466
    Import a list of patches and commit them individually.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1467
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1468
    If there are outstanding changes in the working directory, import
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1469
    will abort unless given the -f flag.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1470
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1471
    You can import a patch straight from a mail message.  Even patches
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1472
    as attachments work (body part must be type text/plain or
2515
a6700c222314 import: make help clearer. suggested by asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2513
diff changeset
  1473
    text/x-patch to be used).  From and Subject headers of email
a6700c222314 import: make help clearer. suggested by asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2513
diff changeset
  1474
    message are used as default committer and commit message.  All
a6700c222314 import: make help clearer. suggested by asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2513
diff changeset
  1475
    text/plain body parts before first diff are added to commit
a6700c222314 import: make help clearer. suggested by asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2513
diff changeset
  1476
    message.
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1477
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1478
    If imported patch was generated by hg export, user and description
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1479
    from patch override values from message headers and body.  Values
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1480
    given on command line with -m and -u override these.
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1481
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1482
    To read a patch from standard input, use patch name "-".
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1483
    """
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1484
    patches = (patch1,) + patches
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  1485
966
022bcc738389 hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents: 965
diff changeset
  1486
    if not opts['force']:
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  1487
        bail_if_changed(repo)
966
022bcc738389 hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents: 965
diff changeset
  1488
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1489
    d = opts["base"]
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1490
    strip = opts["strip"]
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1491
2854
7706fa503677 import: get lock and wlock one time
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2847
diff changeset
  1492
    wlock = repo.wlock()
7706fa503677 import: get lock and wlock one time
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2847
diff changeset
  1493
    lock = repo.lock()
7706fa503677 import: get lock and wlock one time
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2847
diff changeset
  1494
2861
0f08f2c042ec Move patch-related code into its own module.
Brendan Cully <brendan@kublai.com>
parents: 2860
diff changeset
  1495
    for p in patches:
0f08f2c042ec Move patch-related code into its own module.
Brendan Cully <brendan@kublai.com>
parents: 2860
diff changeset
  1496
        pf = os.path.join(d, p)
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1497
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1498
        if pf == '-':
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1499
            ui.status(_("applying patch from stdin\n"))
2866
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1500
            tmpname, message, user, date = patch.extract(ui, sys.stdin)
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1501
        else:
2861
0f08f2c042ec Move patch-related code into its own module.
Brendan Cully <brendan@kublai.com>
parents: 2860
diff changeset
  1502
            ui.status(_("applying %s\n") % p)
2866
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1503
            tmpname, message, user, date = patch.extract(ui, file(pf))
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1504
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1505
        if tmpname is None:
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1506
            raise util.Abort(_('no diffs found'))
2893e51407a4 commands.import: refactor patch parsing into patch.extract.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2865
diff changeset
  1507
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1508
        try:
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  1509
            cmdline_message = logmessage(opts)
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  1510
            if cmdline_message:
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1511
                # pickup the cmdline msg
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  1512
                message = cmdline_message
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1513
            elif message:
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1514
                # pickup the patch msg
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1515
                message = message.strip()
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1516
            else:
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1517
                # launch the editor
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1518
                message = None
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1519
            ui.debug(_('message:\n%s\n') % message)
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1520
3465
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1521
            files = {}
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1522
            try:
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1523
                fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1524
                                   files=files)
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1525
            finally:
2d35a8d2b32d patch: return list of modified files even when an exception is raised
Brendan Cully <brendan@kublai.com>
parents: 3460
diff changeset
  1526
                files = patch.updatedir(ui, repo, files, wlock=wlock)
2854
7706fa503677 import: get lock and wlock one time
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2847
diff changeset
  1527
            repo.commit(files, message, user, date, wlock=wlock, lock=lock)
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1528
        finally:
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1529
            os.unlink(tmpname)
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1530
1192
6e165de907c5 Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents: 1191
diff changeset
  1531
def incoming(ui, repo, source="default", **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1532
    """show new changesets found in source
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1533
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1534
    Show new changesets found in the specified path/URL or the default
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1535
    pull location. These are the changesets that would be pulled if a pull
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1536
    was requested.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1537
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1538
    For remote repository, using --bundle avoids downloading the changesets
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1539
    twice if the incoming is followed by a pull.
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1540
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1541
    See pull for valid source format details.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1542
    """
1893
6569651a4f1e Read paths specified in .hg/hgrc relative to repo root, otherwise to home dir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1892
diff changeset
  1543
    source = ui.expandpath(source)
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
  1544
    setremoteconfig(ui, opts)
1965
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  1545
927
5a830d7bea52 Add hg incoming command for local repositories
mpm@selenic.com
parents: 924
diff changeset
  1546
    other = hg.repository(ui, source)
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  1547
    incoming = repo.findincoming(other, force=opts["force"])
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1548
    if not incoming:
1993
fb6ca9801d04 show message if no changes found on incoming
TK Soh <teekaysoh@yahoo.com>
parents: 1981
diff changeset
  1549
        ui.status(_("no changes found\n"))
931
32e8f64b25b0 Fix incoming for empty set
mpm@selenic.com
parents: 928
diff changeset
  1550
        return
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1551
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1552
    cleanup = None
1974
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1553
    try:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1554
        fname = opts["bundle"]
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1555
        if fname or not other.local():
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1556
            # create a bundle (uncompressed if other repo is not local)
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1557
            cg = other.changegroup(incoming, "incoming")
3706
0d810798acb1 Use 'bundletype' instead of 'type' to not shadow built-in function.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3704
diff changeset
  1558
            bundletype = other.local() and "HG10BZ" or "HG10UN"
0d810798acb1 Use 'bundletype' instead of 'type' to not shadow built-in function.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3704
diff changeset
  1559
            fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
1974
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1560
            # keep written bundle?
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1561
            if opts["bundle"]:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1562
                cleanup = None
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1563
            if not other.local():
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1564
                # use the created uncompressed bundlerepo
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1565
                other = bundlerepo.bundlerepository(ui, repo.root, fname)
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1566
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1567
        revs = None
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1568
        if opts['rev']:
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1569
            revs = [other.lookup(rev) for rev in opts['rev']]
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1570
        o = other.changelog.nodesbetween(incoming, revs)[0]
1974
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1571
        if opts['newest_first']:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1572
            o.reverse()
3643
b4ad640a3bcf templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3631
diff changeset
  1573
        displayer = cmdutil.show_changeset(ui, other, opts)
1974
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1574
        for n in o:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1575
            parents = [p for p in other.changelog.parents(n) if p != nullid]
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1576
            if opts['no_merges'] and len(parents) == 2:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1577
                continue
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1578
            displayer.show(changenode=n)
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1579
    finally:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1580
        if hasattr(other, 'close'):
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1581
            other.close()
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1582
        if cleanup:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1583
            os.unlink(cleanup)
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1584
2598
b898afee9d0d Add ui method to set --ssh/--remotecmd, use it in init/clone/pull/push/in/out.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2597
diff changeset
  1585
def init(ui, dest=".", **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1586
    """create a new repository in the given directory
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1587
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1588
    Initialize a new repository in the given directory.  If the given
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1589
    directory does not exist, it is created.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1590
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1591
    If no directory is given, the current directory is used.
2590
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1592
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1593
    It is possible to specify an ssh:// URL as the destination.
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1594
    Look at the help text for the pull command for important details
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1595
    about ssh:// URLs.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1596
    """
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
  1597
    setremoteconfig(ui, opts)
907
652507dc9fce Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents: 906
diff changeset
  1598
    hg.repository(ui, dest, create=1)
338
1e091b3293d5 default path support with .hg/hgrc
mpm@selenic.com
parents: 335
diff changeset
  1599
627
b6c42714d900 Add locate command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 625
diff changeset
  1600
def locate(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1601
    """locate files matching specific patterns
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1602
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1603
    Print all files under Mercurial control whose names match the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1604
    given patterns.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1605
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1606
    This command searches the current directory and its
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1607
    subdirectories.  To search an entire repository, move to the root
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1608
    of the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1609
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1610
    If no patterns are given to match, this command prints all file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1611
    names.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1612
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1613
    If you want to feed the output of this command into the "xargs"
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1614
    command, use the "-0" option to both this command and "xargs".
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1615
    This will avoid the problem of "xargs" treating single filenames
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1616
    that contain white space as multiple filenames.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1617
    """
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1618
    end = opts['print0'] and '\0' or '\n'
1622
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1619
    rev = opts['rev']
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1620
    if rev:
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1621
        node = repo.lookup(rev)
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1622
    else:
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1623
        node = None
742
092937de2ad7 Refactor matchpats and walk
mpm@selenic.com
parents: 740
diff changeset
  1624
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  1625
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node,
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  1626
                                             head='(?:.*/|)'):
1622
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1627
        if not node and repo.dirstate.state(abs) == '?':
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1628
            continue
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1629
        if opts['fullpath']:
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
  1630
            ui.write(os.path.join(repo.root, abs), end)
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
  1631
        else:
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  1632
            ui.write(((pats and rel) or abs), end)
627
b6c42714d900 Add locate command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 625
diff changeset
  1633
1031
503aaf19a040 Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1030
diff changeset
  1634
def log(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1635
    """show revision history of entire repository or files
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1636
2741
ae5ce3454ef5 log: add -f/--follow option, to follow rename/copy
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2739
diff changeset
  1637
    Print the revision history of the specified files or the entire
ae5ce3454ef5 log: add -f/--follow option, to follow rename/copy
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2739
diff changeset
  1638
    project.
ae5ce3454ef5 log: add -f/--follow option, to follow rename/copy
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2739
diff changeset
  1639
ae5ce3454ef5 log: add -f/--follow option, to follow rename/copy
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2739
diff changeset
  1640
    File history is shown without following rename or copy history of
2782
21e571c21a6b Make log --follow without a file list follow a single head.
Brendan Cully <brendan@kublai.com>
parents: 2764
diff changeset
  1641
    files.  Use -f/--follow with a file name to follow history across
21e571c21a6b Make log --follow without a file list follow a single head.
Brendan Cully <brendan@kublai.com>
parents: 2764
diff changeset
  1642
    renames and copies. --follow without a file name will only show
2784
12a7bfcafd8f Add log option --follow-first to follow only the first parent of
Brendan Cully <brendan@kublai.com>
parents: 2783
diff changeset
  1643
    ancestors or descendants of the starting revision. --follow-first
12a7bfcafd8f Add log option --follow-first to follow only the first parent of
Brendan Cully <brendan@kublai.com>
parents: 2783
diff changeset
  1644
    only follows the first parent of merge revisions.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1645
2783
2e0cd25fe4ac Make log --follow revision range start default to working dir parent.
Brendan Cully <brendan@kublai.com>
parents: 2782
diff changeset
  1646
    If no revision range is specified, the default is tip:0 unless
2e0cd25fe4ac Make log --follow revision range start default to working dir parent.
Brendan Cully <brendan@kublai.com>
parents: 2782
diff changeset
  1647
    --follow is set, in which case the working directory parent is
2e0cd25fe4ac Make log --follow revision range start default to working dir parent.
Brendan Cully <brendan@kublai.com>
parents: 2782
diff changeset
  1648
    used as the starting revision.
2e0cd25fe4ac Make log --follow revision range start default to working dir parent.
Brendan Cully <brendan@kublai.com>
parents: 2782
diff changeset
  1649
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1650
    By default this command outputs: changeset id and hash, tags,
1557
f7d9823e65df Updated help text for 'hg log'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1552
diff changeset
  1651
    non-trivial parents, user, date and time, and a summary for each
f7d9823e65df Updated help text for 'hg log'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1552
diff changeset
  1652
    commit. When the -v/--verbose switch is used, the list of changed
f7d9823e65df Updated help text for 'hg log'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1552
diff changeset
  1653
    files and full commit message is shown.
3822
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1654
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1655
    NOTE: log -p may generate unexpected diff output for merge
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1656
    changesets, as it will compare the merge changeset against its
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1657
    first parent only. Also, the files: list will only reflect files
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1658
    that are different from BOTH parents.
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  1659
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1660
    """
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1661
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3672
diff changeset
  1662
    get = util.cachefunc(lambda r: repo.changectx(r).changeset())
3650
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1663
    changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts)
3518
467d923e4e3d Fix excessive complaining from hg log -b
Matt Mackall <mpm@selenic.com>
parents: 3517
diff changeset
  1664
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1665
    if opts['limit']:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1666
        try:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1667
            limit = int(opts['limit'])
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1668
        except ValueError:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1669
            raise util.Abort(_('limit must be a positive integer'))
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1670
        if limit <= 0: raise util.Abort(_('limit must be positive'))
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1671
    else:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1672
        limit = sys.maxint
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1673
    count = 0
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1674
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1675
    if opts['copies'] and opts['rev']:
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3706
diff changeset
  1676
        endrev = max(cmdutil.revrange(repo, opts['rev'])) + 1
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1677
    else:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1678
        endrev = repo.changelog.count()
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1679
    rcache = {}
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1680
    ncache = {}
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1681
    dcache = []
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1682
    def getrenamed(fn, rev, man):
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1683
        '''looks up all renames for a file (up to endrev) the first
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1684
        time the file is given. It indexes on the changerev and only
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1685
        parses the manifest if linkrev != changerev.
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1686
        Returns rename info for fn at changerev rev.'''
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1687
        if fn not in rcache:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1688
            rcache[fn] = {}
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1689
            ncache[fn] = {}
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1690
            fl = repo.file(fn)
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1691
            for i in xrange(fl.count()):
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1692
                node = fl.node(i)
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1693
                lr = fl.linkrev(node)
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1694
                renamed = fl.renamed(node)
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1695
                rcache[fn][lr] = renamed
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1696
                if renamed:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1697
                    ncache[fn][node] = renamed
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1698
                if lr >= endrev:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1699
                    break
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1700
        if rev in rcache[fn]:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1701
            return rcache[fn][rev]
3386
55476ce8e59c Use manifest rev instead of changelog rev for linear manifest test
Brendan Cully <brendan@kublai.com>
parents: 3384
diff changeset
  1702
        mr = repo.manifest.rev(man)
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3576
diff changeset
  1703
        if repo.manifest.parentrevs(mr) != (mr - 1, nullrev):
3384
5e6c19919741 log --copies: use manifest.find instead of delta when manifest parent is not rev-1
Brendan Cully <brendan@kublai.com>
parents: 3348
diff changeset
  1704
            return ncache[fn].get(repo.manifest.find(man, fn)[0])
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1705
        if not dcache or dcache[0] != man:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1706
            dcache[:] = [man, repo.manifest.readdelta(man)]
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1707
        if fn in dcache[1]:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1708
            return ncache[fn].get(dcache[1][fn])
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1709
        return None
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1710
3813
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1711
    df = False
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1712
    if opts["date"]:
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1713
        df = util.matchdate(opts["date"])
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1714
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1715
3837
7df171ea50cd Fix log regression where log -p file showed diffs for other files
Matt Mackall <mpm@selenic.com>
parents: 3833
diff changeset
  1716
    displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1717
    for st, rev, fns in changeiter:
3645
b984dcb1df71 Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents: 3643
diff changeset
  1718
        if st == 'add':
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1719
            changenode = repo.changelog.node(rev)
3578
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3576
diff changeset
  1720
            parents = [p for p in repo.changelog.parentrevs(rev)
3b4e00cba57a Define and use nullrev (revision of nullid) instead of -1.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3576
diff changeset
  1721
                       if p != nullrev]
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1722
            if opts['no_merges'] and len(parents) == 2:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1723
                continue
1436
db6d7b4005ba add --only-merges (-m) log
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1435
diff changeset
  1724
            if opts['only_merges'] and len(parents) != 2:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1725
                continue
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1726
3813
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1727
            if df:
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1728
                changes = get(rev)
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1729
                if not df(changes[2][0]):
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1730
                    continue
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  1731
1373
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1732
            if opts['keyword']:
3650
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1733
                changes = get(rev)
1373
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1734
                miss = 0
1404
67e20e27d8df log: make keyword search truly case-insensitive
TK Soh <teekaysoh@yahoo.com>
parents: 1402
diff changeset
  1735
                for k in [kw.lower() for kw in opts['keyword']]:
1373
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1736
                    if not (k in changes[1].lower() or
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1737
                            k in changes[4].lower() or
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1738
                            k in " ".join(changes[3][:20]).lower()):
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1739
                        miss = 1
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1740
                        break
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1741
                if miss:
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1742
                    continue
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1743
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1744
            copies = []
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1745
            if opts.get('copies') and rev:
3650
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1746
                mf = get(rev)[0]
731e739b8659 move walkchangerevs to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3649
diff changeset
  1747
                for fn in get(rev)[3]:
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1748
                    rename = getrenamed(fn, rev, mf)
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1749
                    if rename:
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  1750
                        copies.append((fn, rename[0]))
3649
e50891e461e4 Consolidate brinfo handling
Matt Mackall <mpm@selenic.com>
parents: 3645
diff changeset
  1751
            displayer.show(rev, changenode, copies=copies)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1752
        elif st == 'iter':
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1753
            if count == limit: break
3645
b984dcb1df71 Refactor log ui buffering and patch display
Matt Mackall <mpm@selenic.com>
parents: 3643
diff changeset
  1754
            if displayer.flush(rev):
1765
b9fac31f34c9 hg log --limit shouldn't count unprinted revisions (found by TK Soh)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1764
diff changeset
  1755
                count += 1
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1756
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1757
def manifest(ui, repo, rev=None):
3914
283ee8971570 doc string fix: hg cat and manifest default to current parent revision.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3900
diff changeset
  1758
    """output the current or given revision of the project manifest
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1759
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1760
    Print a list of version controlled files for the given revision.
3915
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
  1761
    If no revision is given, the parent of the working directory is used,
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
  1762
    or tip if no revision is checked out.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1763
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1764
    The manifest is the list of files being version controlled. If no revision
3736
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1765
    is given then the first parent of the working directory is used.
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1766
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1767
    With -v flag, print file permissions. With --debug flag, print
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1768
    file revision hashes.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1769
    """
3736
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1770
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1771
    m = repo.changectx(rev).manifest()
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1772
    files = m.keys()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1773
    files.sort()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1774
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1775
    for f in files:
3736
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1776
        if ui.debugflag:
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1777
            ui.write("%40s " % hex(m[f]))
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1778
        if ui.verbose:
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1779
            ui.write("%3s " % (m.execf(f) and "755" or "644"))
ad3d5b4367cb make manifest friendlier
Matt Mackall <mpm@selenic.com>
parents: 3707
diff changeset
  1780
        ui.write("%s\n" % f)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1781
3815
e3ba19ec8c48 Remove date parameter from merge
Matt Mackall <mpm@selenic.com>
parents: 3814
diff changeset
  1782
def merge(ui, repo, node=None, force=None, branch=None):
4014
509342f95564 various doc fixes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4013
diff changeset
  1783
    """merge working directory with another revision
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1784
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1785
    Merge the contents of the current working directory and the
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1786
    requested revision. Files that changed between either parent are
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1787
    marked as changed for the next commit and a commit must be
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1788
    performed before any further updates are allowed.
2915
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1789
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1790
    If no revision is specified, the working directory's parent is a
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1791
    head revision, and the repository contains exactly one other head,
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1792
    the other head is merged with by default.  Otherwise, an explicit
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1793
    revision to merge with must be provided.
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1794
    """
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  1795
3071
547d1a4aa105 hg merge: fix lookup of branch
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3068
diff changeset
  1796
    if node or branch:
2915
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1797
        node = _lookup(repo, node, branch)
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1798
    else:
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1799
        heads = repo.heads()
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1800
        if len(heads) > 2:
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1801
            raise util.Abort(_('repo has %d heads - '
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1802
                               'please merge with an explicit rev') %
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1803
                             len(heads))
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1804
        if len(heads) == 1:
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1805
            raise util.Abort(_('there is nothing to merge - '
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1806
                               'use "hg update" instead'))
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1807
        parent = repo.dirstate.parents()[0]
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1808
        if parent not in heads:
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1809
            raise util.Abort(_('working dir not at a head rev - '
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1810
                               'use "hg update" or merge with an explicit rev'))
013921c753bd merge with other head by default, not tip.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2911
diff changeset
  1811
        node = parent == heads[0] and heads[-1] or heads[0]
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
  1812
    return hg.merge(repo, node, force=force)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  1813
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  1814
def outgoing(ui, repo, dest=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1815
    """show changesets not found in destination
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1816
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1817
    Show changesets not found in the specified destination repository or
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1818
    the default push location. These are the changesets that would be pushed
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1819
    if a push was requested.
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  1820
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1821
    See pull for valid destination format details.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1822
    """
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  1823
    dest = ui.expandpath(dest or 'default-push', dest or 'default')
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
  1824
    setremoteconfig(ui, opts)
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1825
    revs = None
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1826
    if opts['rev']:
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1827
        revs = [repo.lookup(rev) for rev in opts['rev']]
1965
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  1828
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  1829
    other = hg.repository(ui, dest)
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  1830
    o = repo.findoutgoing(other, force=opts['force'])
1994
78ef83c9e9e1 show message if no changes found on outgoing
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1993
diff changeset
  1831
    if not o:
78ef83c9e9e1 show message if no changes found on outgoing
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1993
diff changeset
  1832
        ui.status(_("no changes found\n"))
78ef83c9e9e1 show message if no changes found on outgoing
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1993
diff changeset
  1833
        return
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1834
    o = repo.changelog.nodesbetween(o, revs)[0]
1439
65cbe22b03fa allow 'hg out' / 'hg in' to show newest commit first
Michal Kvasnica <kvasnica@gmail.com>
parents: 1437
diff changeset
  1835
    if opts['newest_first']:
65cbe22b03fa allow 'hg out' / 'hg in' to show newest commit first
Michal Kvasnica <kvasnica@gmail.com>
parents: 1437
diff changeset
  1836
        o.reverse()
3643
b4ad640a3bcf templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3631
diff changeset
  1837
    displayer = cmdutil.show_changeset(ui, repo, opts)
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  1838
    for n in o:
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1839
        parents = [p for p in repo.changelog.parents(n) if p != nullid]
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1840
        if opts['no_merges'] and len(parents) == 2:
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1841
            continue
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  1842
        displayer.show(changenode=n)
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  1843
3658
d12c8668b102 remove legacy hg parents REV syntax
Matt Mackall <mpm@selenic.com>
parents: 3657
diff changeset
  1844
def parents(ui, repo, file_=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1845
    """show the parents of the working dir or revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1846
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1847
    Print the working directory's parent revisions.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1848
    """
3658
d12c8668b102 remove legacy hg parents REV syntax
Matt Mackall <mpm@selenic.com>
parents: 3657
diff changeset
  1849
    rev = opts.get('rev')
706
5107a7b6b14a Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 705
diff changeset
  1850
    if rev:
2644
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  1851
        if file_:
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  1852
            ctx = repo.filectx(file_, changeid=rev)
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  1853
        else:
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  1854
            ctx = repo.changectx(rev)
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  1855
        p = [cp.node() for cp in ctx.parents()]
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1856
    else:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1857
        p = repo.dirstate.parents()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1858
3643
b4ad640a3bcf templates: move changeset templating bits to cmdutils
Matt Mackall <mpm@selenic.com>
parents: 3631
diff changeset
  1859
    displayer = cmdutil.show_changeset(ui, repo, opts)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1860
    for n in p:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1861
        if n != nullid:
3649
e50891e461e4 Consolidate brinfo handling
Matt Mackall <mpm@selenic.com>
parents: 3645
diff changeset
  1862
            displayer.show(changenode=n)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  1863
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  1864
def paths(ui, repo, search=None):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1865
    """show definition of symbolic path names
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1866
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1867
    Show definition of symbolic path name NAME. If no name is given, show
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1868
    definition of available names.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1869
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1870
    Path names are defined in the [paths] section of /etc/mercurial/hgrc
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1871
    and $HOME/.hgrc.  If run inside a repository, .hg/hgrc is used, too.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1872
    """
779
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1873
    if search:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1874
        for name, path in ui.configitems("paths"):
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1875
            if name == search:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1876
                ui.write("%s\n" % path)
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1877
                return
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  1878
        ui.warn(_("not found!\n"))
779
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1879
        return 1
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1880
    else:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1881
        for name, path in ui.configitems("paths"):
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1882
            ui.write("%s = %s\n" % (name, path))
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  1883
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1884
def postincoming(ui, repo, modheads, optupdate):
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1885
    if modheads == 0:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1886
        return
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1887
    if optupdate:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1888
        if modheads == 1:
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  1889
            return hg.update(repo, repo.changelog.tip()) # update
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1890
        else:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1891
            ui.status(_("not updating, since new heads added\n"))
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1892
    if modheads > 1:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1893
        ui.status(_("(run 'hg heads' to see heads, 'hg merge' to merge)\n"))
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1894
    else:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1895
        ui.status(_("(run 'hg update' to get a working copy)\n"))
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  1896
404
a1ecef497721 [PATCH] Unintuive use
mpm@selenic.com
parents: 403
diff changeset
  1897
def pull(ui, repo, source="default", **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1898
    """pull changes from the specified source
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1899
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1900
    Pull changes from a remote repository to a local one.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1901
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1902
    This finds all changes from the repository at the specified path
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1903
    or URL and adds them to the local repository. By default, this
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1904
    does not update the copy of the project in the working directory.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1905
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1906
    Valid URLs are of the form:
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1907
3563
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1908
      local/filesystem/path (or file://local/filesystem/path)
2589
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  1909
      http://[user@]host[:port]/[path]
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  1910
      https://[user@]host[:port]/[path]
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  1911
      ssh://[user@]host[:port]/[path]
3563
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1912
      static-http://host[:port]/[path]
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1913
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1914
    Paths in the local filesystem can either point to Mercurial
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1915
    repositories or to bundle files (as created by 'hg bundle' or
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1916
    'hg incoming --bundle'). The static-http:// protocol, albeit slow,
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1917
    allows access to a Mercurial repository where you simply use a web
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1918
    server to publish the .hg directory as static content.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1919
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1920
    Some notes about using SSH with Mercurial:
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1921
    - SSH requires an accessible shell account on the destination machine
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1922
      and a copy of hg in the remote path or specified with as remotecmd.
2589
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  1923
    - path is relative to the remote user's home directory by default.
2590
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1924
      Use an extra slash at the start of a path to specify an absolute path:
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1925
        ssh://example.com//tmp/repository
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1926
    - Mercurial doesn't use its own compression via SSH; the right thing
3471
be2bf7263276 Corrected SSH configuration example in pull help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3467
diff changeset
  1927
      to do is to configure it in your ~/.ssh/config, e.g.:
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1928
        Host *.mylocalnetwork.example.com
3471
be2bf7263276 Corrected SSH configuration example in pull help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3467
diff changeset
  1929
          Compression no
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1930
        Host *
3471
be2bf7263276 Corrected SSH configuration example in pull help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3467
diff changeset
  1931
          Compression yes
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1932
      Alternatively specify "ssh -C" as your ssh command in your hgrc or
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1933
      with the --ssh command line option.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1934
    """
1893
6569651a4f1e Read paths specified in .hg/hgrc relative to repo root, otherwise to home dir.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1892
diff changeset
  1935
    source = ui.expandpath(source)
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
  1936
    setremoteconfig(ui, opts)
963
84355e3e4493 Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents: 961
diff changeset
  1937
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1938
    other = hg.repository(ui, source)
2473
30c267cb4c2f change some repo messages in small ways.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2461
diff changeset
  1939
    ui.status(_('pulling from %s\n') % (source))
1465
be6b5ce60b7f Implementing pull -r and changing clone -r. Both now support
Eric Hopper <hopper@omnifarious.org>
parents: 1461
diff changeset
  1940
    revs = None
3448
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1941
    if opts['rev']:
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1942
        if 'lookup' in other.capabilities:
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1943
            revs = [other.lookup(rev) for rev in opts['rev']]
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1944
        else:
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1945
            error = _("Other repository doesn't support revision lookup, so a rev cannot be specified.")
6ca49c5fe268 Stop erroring out pull -r and clone -r if repository isn't local.
Eric Hopper <hopper@omnifarious.org>
parents: 3421
diff changeset
  1946
            raise util.Abort(error)
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1947
    modheads = repo.pull(other, heads=revs, force=opts['force'])
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1948
    return postincoming(ui, repo, modheads, opts['update'])
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1949
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  1950
def push(ui, repo, dest=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1951
    """push changes to the specified destination
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1952
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1953
    Push changes from the local repository to the given destination.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1954
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1955
    This is the symmetrical operation for pull. It helps to move
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1956
    changes from the current repository to a different one. If the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1957
    destination is local this is identical to a pull in that directory
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1958
    from the current one.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1959
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1960
    By default, push will refuse to run if it detects the result would
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1961
    increase the number of remote heads. This generally indicates the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1962
    the client has forgotten to sync and merge before pushing.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1963
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1964
    Valid URLs are of the form:
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1965
3563
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1966
      local/filesystem/path (or file://local/filesystem/path)
2589
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  1967
      ssh://[user@]host[:port]/[path]
3563
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1968
      http://[user@]host[:port]/[path]
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1969
      https://[user@]host[:port]/[path]
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1970
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1971
    Look at the help text for the pull command for important details
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1972
    about ssh:// URLs.
2590
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1973
3563
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1974
    Pushing to http:// and https:// URLs is only possible, if this
db946221a58a Some clarifications for pull/push protocols:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3553
diff changeset
  1975
    feature is explicitly enabled on the remote Mercurial server.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1976
    """
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  1977
    dest = ui.expandpath(dest or 'default-push', dest or 'default')
2731
ad4155e757da Kill ui.setconfig_remoteopts
Matt Mackall <mpm@selenic.com>
parents: 2718
diff changeset
  1978
    setremoteconfig(ui, opts)
961
3e11d5038649 Add --ssh and --remotecmd to push
mpm@selenic.com
parents: 955
diff changeset
  1979
640
b48b91d3fb4a Switch push over to the new scheme
Matt Mackall <mpm@selenic.com>
parents: 639
diff changeset
  1980
    other = hg.repository(ui, dest)
2473
30c267cb4c2f change some repo messages in small ways.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2461
diff changeset
  1981
    ui.status('pushing to %s\n' % (dest))
1781
284fc722c342 add an optional argument to push only the specified revisions (push -r)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1712
diff changeset
  1982
    revs = None
284fc722c342 add an optional argument to push only the specified revisions (push -r)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1712
diff changeset
  1983
    if opts['rev']:
284fc722c342 add an optional argument to push only the specified revisions (push -r)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1712
diff changeset
  1984
        revs = [repo.lookup(rev) for rev in opts['rev']]
284fc722c342 add an optional argument to push only the specified revisions (push -r)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1712
diff changeset
  1985
    r = repo.push(other, opts['force'], revs=revs)
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1986
    return r == 0
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
  1987
3653
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  1988
def rawcommit(ui, repo, *pats, **opts):
1812
a81f99dfaa2a fix the synopsis of some commands, mark rawcommit as deprecated in short help
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1811
diff changeset
  1989
    """raw commit interface (DEPRECATED)
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  1990
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  1991
    (DEPRECATED)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1992
    Lowlevel commit, for use in helper scripts.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1993
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1994
    This command is not intended to be used by normal users, as it is
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1995
    primarily useful for importing from other SCMs.
1657
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  1996
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  1997
    This command is now deprecated and will be removed in a future
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  1998
    release, please use debugsetparents and commit instead.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1999
    """
1657
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2000
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2001
    ui.warn(_("(the rawcommit command is deprecated)\n"))
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2002
3653
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2003
    message = logmessage(opts)
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2004
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2005
    files, match, anypats = cmdutil.matchpats(repo, pats, opts)
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2006
    if opts['files']:
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2007
        files += open(opts['files']).read().splitlines()
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2008
d793e09e1b71 refactor rawcommit
Matt Mackall <mpm@selenic.com>
parents: 3652
diff changeset
  2009
    parents = [repo.lookup(p) for p in opts['parent']]
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2010
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2011
    try:
3659
025f68f22ae2 move write_bundle to changegroup.py
Matt Mackall <mpm@selenic.com>
parents: 3658
diff changeset
  2012
        repo.rawcommit(files, message, opts['user'], opts['date'], *parents)
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2013
    except ValueError, inst:
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2014
        raise util.Abort(str(inst))
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2015
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2016
def recover(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2017
    """roll back an interrupted transaction
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2018
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2019
    Recover from an interrupted commit or pull.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2020
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2021
    This command tries to fix the repository status after an interrupted
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2022
    operation. It should only be necessary when Mercurial suggests it.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2023
    """
1516
0b1b029b4de3 Automatically run "verify" whenever we run "recover"
Matt Mackall <mpm@selenic.com>
parents: 1514
diff changeset
  2024
    if repo.recover():
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents: 2776
diff changeset
  2025
        return hg.verify(repo)
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  2026
    return 1
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2027
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2028
def remove(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2029
    """remove the specified files on the next commit
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2030
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2031
    Schedule the indicated files for removal from the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2032
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2033
    This only removes files from the current branch, not from the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2034
    entire project history.  If the files still exist in the working
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2035
    directory, they will be deleted from it.  If invoked with --after,
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2036
    files that have been manually deleted are marked as removed.
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2037
3829
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2038
    This command schedules the files to be removed at the next commit.
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2039
    To undo a remove before that, see hg revert.
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2040
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2041
    Modified files and added files are not removed by default.  To
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2042
    remove them, use the -f/--force option.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2043
    """
1188
b3ceb2d470fc Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1187
diff changeset
  2044
    names = []
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2045
    if not opts['after'] and not pats:
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2046
        raise util.Abort(_('no files specified'))
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2047
    files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2048
    exact = dict.fromkeys(files)
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
  2049
    mardu = map(dict.fromkeys, repo.status(files=files, match=matchfn))[:5]
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2050
    modified, added, removed, deleted, unknown = mardu
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2051
    remove, forget = [], []
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2052
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts):
1189
4cbcc54695b2 Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1188
diff changeset
  2053
        reason = None
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2054
        if abs not in deleted and opts['after']:
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2055
            reason = _('is still present')
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2056
        elif abs in modified and not opts['force']:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2057
            reason = _('is modified (use -f to force removal)')
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2058
        elif abs in added:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2059
            if opts['force']:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2060
                forget.append(abs)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2061
                continue
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2062
            reason = _('has been marked for add (use -f to force removal)')
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2063
        elif abs in unknown:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2064
            reason = _('is not managed')
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2065
        elif abs in removed:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2066
            continue
1255
e825dfea3823 Get all commands that operate on files to honour --verbose and --quiet.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1254
diff changeset
  2067
        if reason:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2068
            if exact:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2069
                ui.warn(_('not removing %s: file %s\n') % (rel, reason))
1189
4cbcc54695b2 Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1188
diff changeset
  2070
        else:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2071
            if ui.verbose or not exact:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2072
                ui.status(_('removing %s\n') % rel)
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2073
            remove.append(abs)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2074
    repo.forget(forget)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2075
    repo.remove(remove, unlink=not opts['after'])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2076
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2077
def rename(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2078
    """rename files; equivalent of copy + remove
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2079
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2080
    Mark dest as copies of sources; mark sources for deletion.  If
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2081
    dest is a directory, copies are put in that directory.  If dest is
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2082
    a file, there can only be one source.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2083
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2084
    By default, this command copies the contents of files as they
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2085
    stand in the working directory.  If invoked with --after, the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2086
    operation is recorded, but no copying is performed.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2087
3829
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2088
    This command takes effect in the next commit. To undo a rename
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2089
    before that, see hg revert.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2090
    """
2016
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2091
    wlock = repo.wlock(0)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2092
    errs, copied = docopy(ui, repo, pats, opts, wlock)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2093
    names = []
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2094
    for abs, rel, exact in copied:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2095
        if ui.verbose or not exact:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2096
            ui.status(_('removing %s\n') % rel)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2097
        names.append(abs)
2503
37655f10ced6 Don't require opts['dry_run'] to be set to fix external tools like tailor.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2494
diff changeset
  2098
    if not opts.get('dry_run'):
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  2099
        repo.remove(names, True, wlock)
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2100
    return errs
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2101
1472
3c909a747d7f make revert use standard matcher
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1470
diff changeset
  2102
def revert(ui, repo, *pats, **opts):
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2103
    """revert files or dirs to their states as of some revision
2204
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2104
2212
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2105
    With no revision specified, revert the named files or directories
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2106
    to the contents they had in the parent of the working directory.
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2107
    This restores the contents of the affected files to an unmodified
3829
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2108
    state and unschedules adds, removes, copies, and renames. If the
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2109
    working directory has two parents, you must explicitly specify the
531c116b2028 Add doc notes about revert and hg status vs diff
Matt Mackall <mpm@selenic.com>
parents: 3822
diff changeset
  2110
    revision to revert to.
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2111
2036
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2112
    Modified files are saved with a .orig suffix before reverting.
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2113
    To disable these backups, use --no-backup.
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2114
3016
2b255c3478dc minor docstring fix for revert
TK Soh <teekaysoh@yahoo.com>
parents: 3014
diff changeset
  2115
    Using the -r option, revert the given files or directories to their
2b255c3478dc minor docstring fix for revert
TK Soh <teekaysoh@yahoo.com>
parents: 3014
diff changeset
  2116
    contents as of a specific revision. This can be helpful to "roll
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2117
    back" some or all of a change that should not have been committed.
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2118
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2119
    Revert modifies the working directory.  It does not commit any
2204
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2120
    changes, or change the parent of the working directory.  If you
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2121
    revert to a revision other than the parent of the working
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2122
    directory, the reverted files will thus appear modified
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2123
    afterwards.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2124
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2125
    If a file has been deleted, it is recreated.  If the executable
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2126
    mode of a file was changed, it is reset.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2127
1472
3c909a747d7f make revert use standard matcher
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1470
diff changeset
  2128
    If names are given, all files matching the names are reverted.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2129
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
  2130
    If no arguments are given, no files are reverted.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2131
    """
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
  2132
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2133
    if opts["date"]:
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2134
        if opts["rev"]:
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2135
            raise util.Abort(_("you can't specify a revision and a date"))
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2136
        opts["rev"] = cmdutil.finddate(ui, repo, opts["date"])
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2137
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
  2138
    if not pats and not opts['all']:
3020
ea2a9c13afc6 Add a hint for revert --all when aborting
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3016
diff changeset
  2139
        raise util.Abort(_('no files or directories specified; '
ea2a9c13afc6 Add a hint for revert --all when aborting
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3016
diff changeset
  2140
                           'use --all to revert the whole repo'))
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
  2141
2212
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2142
    parent, p2 = repo.dirstate.parents()
3132
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2143
    if not opts['rev'] and p2 != nullid:
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2144
        raise util.Abort(_('uncommitted merge - please provide a '
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2145
                           'specific revision'))
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2146
    node = repo.changectx(opts['rev']).node()
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2147
    mf = repo.manifest.read(repo.changelog.read(node)[0])
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2148
    if node == parent:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2149
        pmf = mf
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2150
    else:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2151
        pmf = None
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2152
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2153
    wlock = repo.wlock()
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2154
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2155
    # need all matching names in dirstate and manifest of target rev,
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2156
    # so have to walk both. do not print errors if files exist in one
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2157
    # but not other.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2158
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2159
    names = {}
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2160
    target_only = {}
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2161
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2162
    # walk dirstate.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2163
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2164
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts,
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2165
                                             badmatch=mf.has_key):
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2166
        names[abs] = (rel, exact)
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2167
        if src == 'b':
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2168
            target_only[abs] = True
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2169
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2170
    # walk target manifest.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2171
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2172
    for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, node=node,
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2173
                                             badmatch=names.has_key):
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2174
        if abs in names: continue
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2175
        names[abs] = (rel, exact)
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2176
        target_only[abs] = True
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2177
2875
3d6efcbbd1c9 remove localrepository.changes.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2874
diff changeset
  2178
    changes = repo.status(match=names.has_key, wlock=wlock)[:5]
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2179
    modified, added, removed, deleted, unknown = map(dict.fromkeys, changes)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2180
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2181
    revert = ([], _('reverting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2182
    add = ([], _('adding %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2183
    remove = ([], _('removing %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2184
    forget = ([], _('forgetting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2185
    undelete = ([], _('undeleting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2186
    update = {}
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2187
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2188
    disptable = (
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2189
        # dispatch table:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2190
        #   file state
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2191
        #   action if in target manifest
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2192
        #   action if not in target manifest
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2193
        #   make backup if in target manifest
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2194
        #   make backup if not in target manifest
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2195
        (modified, revert, remove, True, True),
2043
968f036f93a4 Minor fix for revert: No need to make a backup when forgetting added files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2042
diff changeset
  2196
        (added, revert, forget, True, False),
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2197
        (removed, undelete, None, False, False),
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2198
        (deleted, revert, remove, False, False),
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2199
        (unknown, add, None, True, False),
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2200
        (target_only, add, None, False, False),
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2201
        )
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2202
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2203
    entries = names.items()
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2204
    entries.sort()
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2205
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2206
    for abs, (rel, exact) in entries:
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2207
        mfentry = mf.get(abs)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2208
        def handle(xlist, dobackup):
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2209
            xlist[0].append(abs)
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2210
            update[abs] = 1
2036
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2211
            if dobackup and not opts['no_backup'] and os.path.exists(rel):
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2212
                bakname = "%s.orig" % rel
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2213
                ui.note(_('saving current version of %s as %s\n') %
c9226bcc288d Don't abort when backup files already exist. Don't allow alternative names.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2214
                        (rel, bakname))
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2215
                if not opts.get('dry_run'):
3629
4cfb72bcb978 util: add copyfile function
Matt Mackall <mpm@selenic.com>
parents: 3628
diff changeset
  2216
                    util.copyfile(rel, bakname)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2217
            if ui.verbose or not exact:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2218
                ui.status(xlist[1] % rel)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2219
        for table, hitlist, misslist, backuphit, backupmiss in disptable:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2220
            if abs not in table: continue
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2221
            # file has changed in dirstate
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2222
            if mfentry:
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2223
                handle(hitlist, backuphit)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2224
            elif misslist is not None:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2225
                handle(misslist, backupmiss)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2226
            else:
3679
2956948b81f3 fix warnings generated by pygettext.py.
Marcos Chaves <marcos.nospam@gmail.com>
parents: 3673
diff changeset
  2227
                if exact: ui.warn(_('file not managed: %s\n') % rel)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2228
            break
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2229
        else:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2230
            # file has not changed in dirstate
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2231
            if node == parent:
3679
2956948b81f3 fix warnings generated by pygettext.py.
Marcos Chaves <marcos.nospam@gmail.com>
parents: 3673
diff changeset
  2232
                if exact: ui.warn(_('no changes needed to %s\n') % rel)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2233
                continue
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2234
            if pmf is None:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2235
                # only need parent manifest in this unlikely case,
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2236
                # so do not read by default
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2237
                pmf = repo.manifest.read(repo.changelog.read(parent)[0])
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2238
            if abs in pmf:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2239
                if mfentry:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2240
                    # if version of file is same in parent and target
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2241
                    # manifests, do nothing
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2242
                    if pmf[abs] != mfentry:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2243
                        handle(revert, False)
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2244
                else:
2272
e9a0ed9ed4d9 revert: fix corner case found by faheem mitha.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2268
diff changeset
  2245
                    handle(remove, False)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2246
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2247
    if not opts.get('dry_run'):
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2248
        repo.dirstate.forget(forget[0])
2812
3aeab7bb5adc Refactor update locking slightly
Matt Mackall <mpm@selenic.com>
parents: 2808
diff changeset
  2249
        r = hg.revert(repo, node, update.has_key, wlock)
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2250
        repo.dirstate.update(add[0], 'a')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2251
        repo.dirstate.update(undelete[0], 'n')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2252
        repo.dirstate.update(remove[0], 'r')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2253
        return r
588
0c3bae18403b [PATCH] hg revert
mpm@selenic.com
parents: 582
diff changeset
  2254
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2255
def rollback(ui, repo):
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2256
    """roll back the last transaction in this repository
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2257
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2258
    Roll back the last transaction in this repository, restoring the
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2259
    project to its state prior to the transaction.
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2260
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2261
    Transactions are used to encapsulate the effects of all commands
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2262
    that create new changesets or propagate existing changesets into a
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2263
    repository. For example, the following commands are transactional,
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2264
    and their effects can be rolled back:
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2265
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2266
      commit
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2267
      import
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2268
      pull
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2269
      push (with this repository as destination)
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2270
      unbundle
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2271
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2272
    This command should be used with care. There is only one level of
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2273
    rollback, and there is no way to undo a rollback.
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2274
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2275
    This command is not intended for use on public repositories. Once
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2276
    changes are visible for pull by other users, rolling a transaction
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2277
    back locally is ineffective (someone else may already have pulled
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2278
    the changes). Furthermore, a race is possible with readers of the
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2279
    repository; for example an in-progress pull from the repository
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2280
    may fail if a rollback is performed.
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2281
    """
2362
482d3fb47d80 Renamed localrepo.undo() to rollback() and talk about "rollback information".
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2356
diff changeset
  2282
    repo.rollback()
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2283
468
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2284
def root(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2285
    """print the root (top) of the current working dir
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2286
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2287
    Print the root directory of the current repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2288
    """
468
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2289
    ui.write(repo.root + "\n")
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2290
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2291
def serve(ui, repo, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2292
    """export the repository via HTTP
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2293
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2294
    Start a local HTTP repository browser and pull server.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2295
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2296
    By default, the server logs accesses to stdout and errors to
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2297
    stderr.  Use the "-A" and "-E" options to log to files.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2298
    """
624
876333a295ff Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents: 618
diff changeset
  2299
876333a295ff Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents: 618
diff changeset
  2300
    if opts["stdio"]:
2127
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2301
        if repo is None:
3079
4c9fcb5e3b82 If local repository is missing, make error message clearer.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3072
diff changeset
  2302
            raise hg.RepoError(_("There is no Mercurial repository here"
4c9fcb5e3b82 If local repository is missing, make error message clearer.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3072
diff changeset
  2303
                                 " (.hg not found)"))
2396
8d44649df03b refactor ssh server.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2392
diff changeset
  2304
        s = sshserver.sshserver(ui, repo)
8d44649df03b refactor ssh server.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2392
diff changeset
  2305
        s.serve_forever()
2363
fa4c11751367 Give a response to unknown SSH commands
Matt Mackall <mpm@selenic.com>
parents: 2362
diff changeset
  2306
2125
3610d9468b1e Use string literal concatenation for optlist and import -p option
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2124
diff changeset
  2307
    optlist = ("name templates style address port ipv6"
3610d9468b1e Use string literal concatenation for optlist and import -p option
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2124
diff changeset
  2308
               " accesslog errorlog webdir_conf")
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2309
    for o in optlist.split():
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2310
        if opts[o]:
3344
d9b3d3d34749 ui.py: change the overlay from a dict to a SafeConfigParser.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3319
diff changeset
  2311
            ui.setconfig("web", o, str(opts[o]))
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2312
2127
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2313
    if repo is None and not ui.config("web", "webdir_conf"):
3079
4c9fcb5e3b82 If local repository is missing, make error message clearer.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3072
diff changeset
  2314
        raise hg.RepoError(_("There is no Mercurial repository here"
4c9fcb5e3b82 If local repository is missing, make error message clearer.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3072
diff changeset
  2315
                             " (.hg not found)"))
2127
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2316
1741
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2317
    if opts['daemon'] and not opts['daemon_pipefds']:
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2318
        rfd, wfd = os.pipe()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2319
        args = sys.argv[:]
1741
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2320
        args.append('--daemon-pipefds=%d,%d' % (rfd, wfd))
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2321
        pid = os.spawnvp(os.P_NOWAIT | getattr(os, 'P_DETACH', 0),
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2322
                         args[0], args)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2323
        os.close(wfd)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2324
        os.read(rfd, 1)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2325
        os._exit(0)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2326
3628
dc3504af7722 hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents: 3627
diff changeset
  2327
    httpd = hgweb.server.create_server(ui, repo)
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2328
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2329
    if ui.verbose:
3628
dc3504af7722 hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents: 3627
diff changeset
  2330
        if httpd.port != 80:
dc3504af7722 hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents: 3627
diff changeset
  2331
            ui.status(_('listening at http://%s:%d/\n') %
dc3504af7722 hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents: 3627
diff changeset
  2332
                      (httpd.addr, httpd.port))
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2333
        else:
3628
dc3504af7722 hgweb: internalize some socket details
Matt Mackall <mpm@selenic.com>
parents: 3627
diff changeset
  2334
            ui.status(_('listening at http://%s/\n') % httpd.addr)
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2335
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2336
    if opts['pid_file']:
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2337
        fp = open(opts['pid_file'], 'w')
2571
83cfd95eafb5 tests: add timeouts, make run-tests.py clean up dead daemon processes
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2567
diff changeset
  2338
        fp.write(str(os.getpid()) + '\n')
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2339
        fp.close()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2340
1741
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2341
    if opts['daemon_pipefds']:
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2342
        rfd, wfd = [int(x) for x in opts['daemon_pipefds'].split(',')]
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2343
        os.close(rfd)
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2344
        os.write(wfd, 'y')
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2345
        os.close(wfd)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2346
        sys.stdout.flush()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2347
        sys.stderr.flush()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2348
        fd = os.open(util.nulldev, os.O_RDWR)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2349
        if fd != 0: os.dup2(fd, 0)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2350
        if fd != 1: os.dup2(fd, 1)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2351
        if fd != 2: os.dup2(fd, 2)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2352
        if fd not in (0, 1, 2): os.close(fd)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2353
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2354
    httpd.serve_forever()
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2355
731
91ca3afab8e8 Add name matching to status command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 729
diff changeset
  2356
def status(ui, repo, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2357
    """show changed files in the working directory
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
  2358
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2359
    Show status of files in the repository.  If names are given, only
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2360
    files that match are shown.  Files that are clean or ignored, are
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2361
    not listed unless -c (clean), -i (ignored) or -A is given.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2362
3822
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  2363
    NOTE: status may appear to disagree with diff if permissions have
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  2364
    changed or a merge has occurred. The standard diff format does not
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  2365
    report permission changes and diff only reports changes relative
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  2366
    to one merge parent.
28134d82db9b Add notes about diff/merge asymmetry to export, diff, and log
Matt Mackall <mpm@selenic.com>
parents: 3815
diff changeset
  2367
3467
2b3b703b3a2b Add --rev option to status
Brendan Cully <brendan@kublai.com>
parents: 3465
diff changeset
  2368
    If one revision is given, it is used as the base revision.
2b3b703b3a2b Add --rev option to status
Brendan Cully <brendan@kublai.com>
parents: 3465
diff changeset
  2369
    If two revisions are given, the difference between them is shown.
2b3b703b3a2b Add --rev option to status
Brendan Cully <brendan@kublai.com>
parents: 3465
diff changeset
  2370
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2371
    The codes used to show the status of files are:
746
9095e3456ea7 Change C to M in status
mpm@selenic.com
parents: 745
diff changeset
  2372
    M = modified
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2373
    A = added
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2374
    R = removed
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2375
    C = clean
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  2376
    ! = deleted, but still tracked
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2377
    ? = not tracked
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2378
    I = ignored (not shown by default)
2639
001703ec311d Add an option '-C|--copies' to hg status to show the source of copied files.
Brendan Cully <brendan@kublai.com>
parents: 2630
diff changeset
  2379
      = the previous added file was copied from here
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2380
    """
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
  2381
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2382
    all = opts['all']
3707
67f44b825784 Removed unused ui parameter from revpair/revrange and fix its users.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3706
diff changeset
  2383
    node1, node2 = cmdutil.revpair(repo, opts.get('rev'))
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3204
diff changeset
  2384
2882
cf98cd70d2c4 move walk and matchpats from commands to cmdutil.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2878
diff changeset
  2385
    files, matchfn, anypats = cmdutil.matchpats(repo, pats, opts)
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  2386
    cwd = (pats and repo.getcwd()) or ''
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2387
    modified, added, removed, deleted, unknown, ignored, clean = [
4043
31047b6f7ec1 Copied files sources were not shown by status -C under Win32.
Patrick Mezard <pmezard@gmail.com>
parents: 4014
diff changeset
  2388
        n for n in repo.status(node1=node1, node2=node2, files=files,
3467
2b3b703b3a2b Add --rev option to status
Brendan Cully <brendan@kublai.com>
parents: 3465
diff changeset
  2389
                             match=matchfn,
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2390
                             list_ignored=all or opts['ignored'],
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2391
                             list_clean=all or opts['clean'])]
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2392
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2393
    changetypes = (('modified', 'M', modified),
1966
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2394
                   ('added', 'A', added),
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2395
                   ('removed', 'R', removed),
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2396
                   ('deleted', '!', deleted),
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2397
                   ('unknown', '?', unknown),
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2398
                   ('ignored', 'I', ignored))
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2399
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2400
    explicit_changetypes = changetypes + (('clean', 'C', clean),)
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2401
1085
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2402
    end = opts['print0'] and '\0' or '\n'
1106
95a044b73bd5 Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1105
diff changeset
  2403
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2404
    for opt, char, changes in ([ct for ct in explicit_changetypes
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2405
                                if all or opts[ct[0]]]
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2406
                               or changetypes):
1105
a906b018eaef Replaced hg status -p/--strip with -n/--no-status to not confuse with patch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1085
diff changeset
  2407
        if opts['no_status']:
1085
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2408
            format = "%%s%s" % end
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2409
        else:
1966
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2410
            format = "%s %%s%s" % (char, end)
1106
95a044b73bd5 Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1105
diff changeset
  2411
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2412
        for f in changes:
4043
31047b6f7ec1 Copied files sources were not shown by status -C under Win32.
Patrick Mezard <pmezard@gmail.com>
parents: 4014
diff changeset
  2413
            ui.write(format % util.pathto(cwd, f))
3250
7c114915fbdb Make status -C work with merge+rename
Matt Mackall <mpm@selenic.com>
parents: 3223
diff changeset
  2414
            if ((all or opts.get('copies')) and not opts.get('no_status')):
3159
e43fd1623fe1 fix users of dirstate.copies broken by b1f10d3223c1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3146
diff changeset
  2415
                copied = repo.dirstate.copied(f)
e43fd1623fe1 fix users of dirstate.copies broken by b1f10d3223c1
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3146
diff changeset
  2416
                if copied:
4043
31047b6f7ec1 Copied files sources were not shown by status -C under Win32.
Patrick Mezard <pmezard@gmail.com>
parents: 4014
diff changeset
  2417
                    ui.write('  %s%s' % (util.pathto(cwd, copied), end))
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
  2418
1596
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2419
def tag(ui, repo, name, rev_=None, **opts):
3915
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
  2420
    """add a tag for the current or given revision
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2421
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2422
    Name a particular revision using <name>.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2423
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2424
    Tags are used to name particular revisions of the repository and are
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2425
    very useful to compare different revision, to go back to significant
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2426
    earlier versions or to mark branch points as releases, etc.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2427
3915
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
  2428
    If no revision is given, the parent of the working directory is used,
3c82ab166eea doc fix: hg tags defaults to current parent revision, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3914
diff changeset
  2429
    or tip if no revision is checked out.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2430
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2431
    To facilitate version control, distribution, and merging of tags,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2432
    they are stored as a file named ".hgtags" which is managed
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2433
    similarly to other project files and can be hand-edited if
1654
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2434
    necessary.  The file '.hg/localtags' is used for local tags (not
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2435
    shared among repositories).
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2436
    """
3801
bd7011246fab Add "null" pseudo-tag pointing to nullid
Brendan Cully <brendan@kublai.com>
parents: 3786
diff changeset
  2437
    if name in ['tip', '.', 'null']:
2789
e3564699409c Add '.' as a shortcut revision name for the working directory parent.
Brendan Cully <brendan@kublai.com>
parents: 2784
diff changeset
  2438
        raise util.Abort(_("the name '%s' is reserved") % name)
1654
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2439
    if rev_ is not None:
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2440
        ui.warn(_("use of 'hg tag NAME [REV]' is deprecated, "
1661
b11507d6d16d Added missing quote in warning text.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1657
diff changeset
  2441
                  "please use 'hg tag [-r REV] NAME' instead\n"))
1654
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2442
        if opts['rev']:
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2443
            raise util.Abort(_("use only one form to specify the revision"))
1596
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2444
    if opts['rev']:
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2445
        rev_ = opts['rev']
3132
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2446
    if not rev_ and repo.dirstate.parents()[1] != nullid:
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2447
        raise util.Abort(_('uncommitted merge - please provide a '
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2448
                           'specific revision'))
81da3c45aabd Move defaultrev into changectx
Brendan Cully <brendan@kublai.com>
parents: 3095
diff changeset
  2449
    r = repo.changectx(rev_).node()
2967
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2450
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2451
    message = opts['message']
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2452
    if not message:
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2453
        message = _('Added tag %s for changeset %s') % (name, short(r))
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2454
eef469259745 tag: shorten hash in default commit message
Matt Mackall <mpm@selenic.com>
parents: 2966
diff changeset
  2455
    repo.tag(name, r, message, opts['local'], opts['user'], opts['date'])
401
af4848f83e68 From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents: 396
diff changeset
  2456
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2457
def tags(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2458
    """list repository tags
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2459
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2460
    List the repository tags.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2461
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2462
    This lists both regular and local tags.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2463
    """
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2464
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 340
diff changeset
  2465
    l = repo.tagslist()
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 340
diff changeset
  2466
    l.reverse()
2966
fb493241d7f6 Only show long hashes with --debug, not --verbose
Matt Mackall <mpm@selenic.com>
parents: 2963
diff changeset
  2467
    hexfunc = ui.debugflag and hex or short
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2468
    for t, n in l:
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2469
        try:
2966
fb493241d7f6 Only show long hashes with --debug, not --verbose
Matt Mackall <mpm@selenic.com>
parents: 2963
diff changeset
  2470
            r = "%5d:%s" % (repo.changelog.rev(n), hexfunc(n))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2471
        except KeyError:
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2472
            r = "    ?:?"
2035
107dc72880f8 Make 'hg tags -q' only list tag names without revision numbers and hashes,
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2034
diff changeset
  2473
        if ui.quiet:
107dc72880f8 Make 'hg tags -q' only list tag names without revision numbers and hashes,
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2034
diff changeset
  2474
            ui.write("%s\n" % t)
107dc72880f8 Make 'hg tags -q' only list tag names without revision numbers and hashes,
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2034
diff changeset
  2475
        else:
3772
73860ffbe798 Handle transcoding of tags
Matt Mackall <mpm@selenic.com>
parents: 3767
diff changeset
  2476
            t = util.localsub(t, 30)
73860ffbe798 Handle transcoding of tags
Matt Mackall <mpm@selenic.com>
parents: 3767
diff changeset
  2477
            t += " " * (30 - util.locallen(t))
73860ffbe798 Handle transcoding of tags
Matt Mackall <mpm@selenic.com>
parents: 3767
diff changeset
  2478
            ui.write("%s %s\n" % (t, r))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2479
1731
251729df9cc6 add -p option to tip. for issue 64.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1728
diff changeset
  2480
def tip(ui, repo, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2481
    """show the tip revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2482
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2483
    Show the tip revision.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2484
    """
3671
86d3f966201d Use nullrev+count instead of count-1 in a newly introduced expression.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3663
diff changeset
  2485
    cmdutil.show_changeset(ui, repo, opts).show(nullrev+repo.changelog.count())
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2486
1600
728fd9584993 add --update support to 'hg unbundle'
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1596
diff changeset
  2487
def unbundle(ui, repo, fname, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2488
    """apply a changegroup file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2489
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2490
    Apply a compressed changegroup file generated by the bundle
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2491
    command.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2492
    """
4056
f1622b4f467d unbundle: don't use urllib if it's a local file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4055
diff changeset
  2493
    if os.path.exists(fname):
4063
96863fc3036a Open bundle files in binary mode
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4056
diff changeset
  2494
        f = open(fname, "rb")
4056
f1622b4f467d unbundle: don't use urllib if it's a local file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4055
diff changeset
  2495
    else:
f1622b4f467d unbundle: don't use urllib if it's a local file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4055
diff changeset
  2496
        f = urllib.urlopen(fname)
f1622b4f467d unbundle: don't use urllib if it's a local file
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 4055
diff changeset
  2497
    gen = changegroup.readbundle(f, fname)
3660
8500a13ec44b create a readbundle function
Matt Mackall <mpm@selenic.com>
parents: 3659
diff changeset
  2498
    modheads = repo.addchangegroup(gen, 'unbundle', 'bundle:' + fname)
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2499
    return postincoming(ui, repo, modheads, opts['update'])
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2500
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2501
def update(ui, repo, node=None, clean=False, branch=None, date=None):
4014
509342f95564 various doc fixes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4013
diff changeset
  2502
    """update working directory
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2503
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2504
    Update the working directory to the specified revision.
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2505
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2506
    If there are no outstanding changes in the working directory and
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2507
    there is a linear relationship between the current version and the
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2508
    requested version, the result is the requested version.
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2509
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2510
    To merge the working directory with another revision, use the
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2511
    merge command.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2512
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2513
    By default, update will refuse to run if doing so would require
4014
509342f95564 various doc fixes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4013
diff changeset
  2514
    discarding local changes.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2515
    """
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2516
    if date:
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2517
        if node:
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2518
            raise util.Abort(_("you can't specify a revision and a date"))
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2519
        node = cmdutil.finddate(ui, repo, date)
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2520
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
  2521
    node = _lookup(repo, node, branch)
3521
ba94e80e5540 Remove update -m, deprecated for 0.9.1
Matt Mackall <mpm@selenic.com>
parents: 3520
diff changeset
  2522
    if clean:
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
  2523
        return hg.clean(repo, node)
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
  2524
    else:
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2806
diff changeset
  2525
        return hg.update(repo, node)
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2526
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2527
def _lookup(repo, node, branch=None):
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2528
    if branch:
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2529
        repo.ui.warn(_("the --branch option is deprecated, "
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2530
                       "please use 'hg branch' instead\n"))
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2531
        br = repo.branchlookup(branch=branch)
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2532
        found = []
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2533
        for x in br:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2534
            if branch in br[x]:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2535
                found.append(x)
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2536
        if len(found) > 1:
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2537
            repo.ui.warn(_("Found multiple heads for %s\n") % branch)
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2538
            for x in found:
3649
e50891e461e4 Consolidate brinfo handling
Matt Mackall <mpm@selenic.com>
parents: 3645
diff changeset
  2539
                cmdutil.show_changeset(ui, repo, {}).show(changenode=x)
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2540
            raise util.Abort("")
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2541
        if len(found) == 1:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2542
            node = found[0]
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2543
            repo.ui.warn(_("Using head %s for branch %s\n")
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2544
                         % (short(node), branch))
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2545
        else:
3072
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3071
diff changeset
  2546
            raise util.Abort(_("branch %s not found") % branch)
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2547
    else:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2548
        node = node and repo.lookup(node) or repo.changelog.tip()
2806
0bf22c109cc3 Factor doupdate into _lookup + hg.update
Matt Mackall <mpm@selenic.com>
parents: 2803
diff changeset
  2549
    return node
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2550
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
  2551
def verify(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2552
    """verify the integrity of the repository
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2553
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2554
    Verify the integrity of the current repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2555
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2556
    This will perform an extensive check of the repository's
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2557
    integrity, validating the hashes and checksums of each entry in
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2558
    the changelog, manifest, and tracked files, as well as the
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2559
    integrity of their crosslinks and indices.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2560
    """
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents: 2776
diff changeset
  2561
    return hg.verify(repo)
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
  2562
3651
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2563
def version_(ui):
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2564
    """output version and copyright information"""
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2565
    ui.write(_("Mercurial Distributed SCM (version %s)\n")
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2566
             % version.get_version())
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2567
    ui.status(_(
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2568
        "\nCopyright (C) 2005, 2006 Matt Mackall <mpm@selenic.com>\n"
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2569
        "This is free software; see the source for copying conditions. "
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2570
        "There is NO\nwarranty; "
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2571
        "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2572
    ))
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2573
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2574
# Command options and aliases are listed here, alphabetically
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2575
3187
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2576
globalopts = [
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2577
    ('R', 'repository', '',
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2578
     _('repository root directory or symbolic path name')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2579
    ('', 'cwd', '', _('change working directory')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2580
    ('y', 'noninteractive', None,
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2581
     _('do not prompt, assume \'yes\' for any required answers')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2582
    ('q', 'quiet', None, _('suppress output')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2583
    ('v', 'verbose', None, _('enable additional output')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2584
    ('', 'config', [], _('set/override config option')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2585
    ('', 'debug', None, _('enable debugging output')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2586
    ('', 'debugger', None, _('start debugger')),
3774
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  2587
    ('', 'encoding', util._encoding, _('set the charset encoding')),
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  2588
    ('', 'encodingmode', util._encodingmode, _('set the charset encoding mode')),
3187
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2589
    ('', 'lsprof', None, _('print improved command execution profile')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2590
    ('', 'traceback', None, _('print traceback on exception')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2591
    ('', 'time', None, _('time how long the command takes')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2592
    ('', 'profile', None, _('print command execution profile')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2593
    ('', 'version', None, _('output version information and exit')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2594
    ('h', 'help', None, _('display help and exit')),
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2595
]
fca5ddbaa12a factor opts: move globalopts to a more logical place
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3181
diff changeset
  2596
3189
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2597
dryrunopts = [('n', 'dry-run', None,
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2598
               _('do not perform actions, just print output'))]
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2599
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2600
remoteopts = [
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2601
    ('e', 'ssh', '', _('specify ssh command to use')),
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2602
    ('', 'remotecmd', '', _('specify hg command to run on the remote side')),
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2603
]
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2604
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2605
walkopts = [
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2606
    ('I', 'include', [], _('include names matching the given patterns')),
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2607
    ('X', 'exclude', [], _('exclude names matching the given patterns')),
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2608
]
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2609
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2610
commitopts = [
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2611
    ('m', 'message', '', _('use <text> as commit message')),
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2612
    ('l', 'logfile', '', _('read commit message from <file>')),
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2613
]
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2614
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  2615
table = {
3824
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2616
    "^add": (add, walkopts + dryrunopts, _('hg add [OPTION]... [FILE]...')),
2955
9d1c3529ebbc addremove: do not deprecate.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2617
    "addremove":
841
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2618
        (addremove,
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2619
         [('s', 'similarity', '',
3189
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2620
           _('guess renamed files by similarity (0<=s<=100)')),
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2621
         ] + walkopts + dryrunopts,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2622
         _('hg addremove [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2623
    "^annotate":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2624
        (annotate,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2625
         [('r', 'rev', '', _('annotate the specified revision')),
3172
5c93dd0ae413 Refactor annotate copy support.
Brendan Cully <brendan@kublai.com>
parents: 3159
diff changeset
  2626
          ('f', 'follow', None, _('follow file copies and renames')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2627
          ('a', 'text', None, _('treat all files as text')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2628
          ('u', 'user', None, _('list the author')),
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
  2629
          ('d', 'date', None, _('list the date')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2630
          ('n', 'number', None, _('list the revision number (default)')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2631
          ('c', 'changeset', None, _('list the changeset')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2632
         ] + walkopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2633
         _('hg annotate [-r REV] [-f] [-a] [-u] [-d] [-n] [-c] FILE...')),
2160
858df1f354c1 Cleanup archive command: Don't overwrite gettext, quoting in cmd table entry.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2159
diff changeset
  2634
    "archive":
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2635
        (archive,
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2636
         [('', 'no-decode', None, _('do not pass files through decoders')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2637
          ('p', 'prefix', '', _('directory prefix for files in archive')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2638
          ('r', 'rev', '', _('revision to distribute')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2639
          ('t', 'type', '', _('type of distribution to create')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2640
         ] + walkopts,
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2641
         _('hg archive [OPTION]... DEST')),
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2642
    "backout":
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2643
        (backout,
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2644
         [('', 'merge', None,
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2645
           _('merge with old dirstate parent after backout')),
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2646
          ('d', 'date', '', _('record datecode as commit date')),
2614
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
  2647
          ('', 'parent', '', _('parent to choose when backing out merge')),
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2648
          ('u', 'user', '', _('record user as committer')),
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2649
         ] + walkopts + commitopts,
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2650
         _('hg backout [OPTION]... REV')),
3502
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
  2651
    "branch": (branch, [], _('hg branch [NAME]')),
8dc14d630b29 add branch and branches commands
Matt Mackall <mpm@selenic.com>
parents: 3472
diff changeset
  2652
    "branches": (branches, [], _('hg branches')),
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2653
    "bundle":
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2654
        (bundle,
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2655
         [('f', 'force', None,
3191
545b6d718593 add remoteopts to bundle command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3190
diff changeset
  2656
           _('run even when remote repository is unrelated')),
3284
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
  2657
          ('r', 'rev', [],
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
  2658
           _('a changeset you would like to bundle')),
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
  2659
          ('', 'base', [],
d89e98840b08 add -r/--rev and --base option to bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3278
diff changeset
  2660
           _('a base changeset to specify instead of a destination')),
3191
545b6d718593 add remoteopts to bundle command
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3190
diff changeset
  2661
         ] + remoteopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2662
         _('hg bundle [-f] [-r REV]... [--base REV]... FILE [DEST]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2663
    "cat":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2664
        (cat,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2665
         [('o', 'output', '', _('print output to file with formatted name')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2666
          ('r', 'rev', '', _('print the given revision')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2667
         ] + walkopts,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2668
         _('hg cat [OPTION]... FILE...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2669
    "^clone":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2670
        (clone,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2671
         [('U', 'noupdate', None, _('do not update the new working directory')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2672
          ('r', 'rev', [],
2764
71029a3247cb clone: replace long help string of inaky with doc comment.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2763
diff changeset
  2673
           _('a changeset you would like to have after cloning')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2674
          ('', 'pull', None, _('use pull protocol to copy metadata')),
2620
de82749d3a71 clone: change name of --stream to --uncompressed.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2618
diff changeset
  2675
          ('', 'uncompressed', None,
de82749d3a71 clone: change name of --stream to --uncompressed.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2618
diff changeset
  2676
           _('use uncompressed transfer (fast over LAN)')),
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2677
         ] + remoteopts,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2678
         _('hg clone [OPTION]... SOURCE [DEST]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2679
    "^commit|ci":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2680
        (commit,
2184
2477a7183a6f Add debugaddremove alias to addremove, so it doesn't show up in 'hg help'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2181
diff changeset
  2681
         [('A', 'addremove', None,
2477a7183a6f Add debugaddremove alias to addremove, so it doesn't show up in 'hg help'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2181
diff changeset
  2682
           _('mark new/missing files as added/removed before committing')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2683
          ('d', 'date', '', _('record datecode as commit date')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2684
          ('u', 'user', '', _('record user as commiter')),
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2685
         ] + walkopts + commitopts,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2686
         _('hg commit [OPTION]... [FILE]...')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2687
    "copy|cp":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2688
        (copy,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2689
         [('A', 'after', None, _('record a copy that has already occurred')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2690
          ('f', 'force', None,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2691
           _('forcibly copy over an existing managed file')),
3189
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2692
         ] + walkopts + dryrunopts,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2693
         _('hg copy [OPTION]... [SOURCE]... DEST')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2694
    "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')),
2034
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
  2695
    "debugcomplete":
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
  2696
        (debugcomplete,
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
  2697
         [('o', 'options', None, _('show the command options'))],
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
  2698
         _('debugcomplete [-o] CMD')),
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
  2699
    "debuginstall": (debuginstall, [], _('debuginstall')),
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  2700
    "debugrebuildstate":
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  2701
        (debugrebuildstate,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2702
         [('r', 'rev', '', _('revision to rebuild to'))],
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  2703
         _('debugrebuildstate [-r REV] [REV]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2704
    "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2705
    "debugsetparents": (debugsetparents, [], _('debugsetparents REV1 [REV2]')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2706
    "debugstate": (debugstate, [], _('debugstate')),
3824
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2707
    "debugdate":
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2708
        (debugdate,
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2709
         [('e', 'extended', None, _('try extended date formats'))],
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2710
         _('debugdate [-e] DATE [RANGE]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2711
    "debugdata": (debugdata, [], _('debugdata FILE REV')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2712
    "debugindex": (debugindex, [], _('debugindex FILE')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2713
    "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2714
    "debugrename": (debugrename, [], _('debugrename FILE [REV]')),
3824
2631b506e93d Fixed indentation, spacing and a typo (debugdata->debugdate) in commands.table.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3815
diff changeset
  2715
    "debugwalk": (debugwalk, walkopts, _('debugwalk [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2716
    "^diff":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2717
        (diff,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2718
         [('r', 'rev', [], _('revision')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2719
          ('a', 'text', None, _('treat all files as text')),
1728
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  2720
          ('p', 'show-function', None,
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  2721
           _('show which function each change is in')),
2907
8b02af865990 Add diff --git option
Brendan Cully <brendan@kublai.com>
parents: 2901
diff changeset
  2722
          ('g', 'git', None, _('use git extended diff format')),
3200
367a009c2acb Remove single character equivalent of --nodates (was -D)
Stephen Darnell <stephen@darnell.plus.com>
parents: 3199
diff changeset
  2723
          ('', 'nodates', None, _("don't include dates in diff headers")),
1728
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  2724
          ('w', 'ignore-all-space', None,
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  2725
           _('ignore white space when comparing lines')),
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2726
          ('b', 'ignore-space-change', None,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2727
           _('ignore changes in the amount of white space')),
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2728
          ('B', 'ignore-blank-lines', None,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2729
           _('ignore changes whose lines are all blank')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2730
         ] + walkopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2731
         _('hg diff [OPTION]... [-r REV1 [-r REV2]] [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2732
    "^export":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2733
        (export,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2734
         [('o', 'output', '', _('print output to file with formatted name')),
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  2735
          ('a', 'text', None, _('treat all files as text')),
3029
d161e6f39557 Add --git to hg export
Brendan Cully <brendan@kublai.com>
parents: 3020
diff changeset
  2736
          ('g', 'git', None, _('use git extended diff format')),
3200
367a009c2acb Remove single character equivalent of --nodates (was -D)
Stephen Darnell <stephen@darnell.plus.com>
parents: 3199
diff changeset
  2737
          ('', 'nodates', None, _("don't include dates in diff headers")),
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  2738
          ('', 'switch-parent', None, _('diff against the second parent'))],
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2739
         _('hg export [OPTION]... [-o OUTFILESPEC] REV...')),
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  2740
    "grep":
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  2741
        (grep,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2742
         [('0', 'print0', None, _('end fields with NUL')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2743
          ('', 'all', None, _('print all revisions that match')),
2870
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  2744
          ('f', 'follow', None,
8eaaf1321bfe grep: add --follow support.
Brendan Cully <brendan@kublai.com>
parents: 2869
diff changeset
  2745
           _('follow changeset history, or file history across copies and renames')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2746
          ('i', 'ignore-case', None, _('ignore case when matching')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2747
          ('l', 'files-with-matches', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2748
           _('print only filenames and revs that match')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2749
          ('n', 'line-number', None, _('print matching line numbers')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2750
          ('r', 'rev', [], _('search in given revision range')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2751
          ('u', 'user', None, _('print user who committed change')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2752
         ] + walkopts,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2753
         _('hg grep [OPTION]... PATTERN [FILE]...')),
905
65763ff9fa53 Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 904
diff changeset
  2754
    "heads":
65763ff9fa53 Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 904
diff changeset
  2755
        (heads,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2756
         [('b', 'branches', None, _('show branches (DEPRECATED)')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2757
          ('', 'style', '', _('display using template map file')),
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2758
          ('r', 'rev', '', _('show only heads which are descendants of rev')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2759
          ('', 'template', '', _('display with template'))],
3510
e1421a77427e Corrected synopsis of hg heads
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3504
diff changeset
  2760
         _('hg heads [-r REV]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2761
    "help": (help_, [], _('hg help [COMMAND]')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2762
    "identify|id": (identify, [], _('hg identify')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2763
    "import|patch":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2764
        (import_,
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2765
         [('p', 'strip', 1,
2125
3610d9468b1e Use string literal concatenation for optlist and import -p option
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2124
diff changeset
  2766
           _('directory strip option for patch. This has the same\n'
3610d9468b1e Use string literal concatenation for optlist and import -p option
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2124
diff changeset
  2767
             'meaning as the corresponding patch option')),
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2768
          ('b', 'base', '', _('base path (DEPRECATED)')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2769
          ('f', 'force', None,
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2770
           _('skip check for outstanding uncommitted changes'))] + commitopts,
3517
b0dc459cd06c Remove some more deprecated options from help syntax summaries
Matt Mackall <mpm@selenic.com>
parents: 3516
diff changeset
  2771
         _('hg import [-p NUM] [-m MESSAGE] [-f] PATCH...')),
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2772
    "incoming|in": (incoming,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2773
         [('M', 'no-merges', None, _('do not show merges')),
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2774
          ('f', 'force', None,
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2775
           _('run even when remote repository is unrelated')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2776
          ('', 'style', '', _('display using template map file')),
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2777
          ('n', 'newest-first', None, _('show newest record first')),
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  2778
          ('', 'bundle', '', _('file to store the bundles into')),
1439
65cbe22b03fa allow 'hg out' / 'hg in' to show newest commit first
Michal Kvasnica <kvasnica@gmail.com>
parents: 1437
diff changeset
  2779
          ('p', 'patch', None, _('show patch')),
2878
982c3237c63d Make clear that hg pull -r REV pulls "up to" a revision.
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2875
diff changeset
  2780
          ('r', 'rev', [], _('a specific revision up to which you would like to pull')),
1965
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  2781
          ('', 'template', '', _('display with template')),
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2782
         ] + remoteopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2783
         _('hg incoming [-p] [-n] [-M] [-f] [-r REV]...'
2544
0ab63318bc36 Added missing space in continued string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2521
diff changeset
  2784
           ' [--bundle FILENAME] [SOURCE]')),
2598
b898afee9d0d Add ui method to set --ssh/--remotecmd, use it in init/clone/pull/push/in/out.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2597
diff changeset
  2785
    "^init":
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2786
        (init,
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2787
         remoteopts,
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2788
         _('hg init [-e CMD] [--remotecmd CMD] [DEST]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2789
    "locate":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2790
        (locate,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2791
         [('r', 'rev', '', _('search the repository as it stood at rev')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2792
          ('0', 'print0', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2793
           _('end filenames with NUL, for use with xargs')),
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2794
          ('f', 'fullpath', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2795
           _('print complete paths from the filesystem root')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2796
         ] + walkopts,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2797
         _('hg locate [OPTION]... [PATTERN]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2798
    "^log|history":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2799
        (log,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2800
         [('b', 'branches', None, _('show branches (DEPRECATED)')),
2741
ae5ce3454ef5 log: add -f/--follow option, to follow rename/copy
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2739
diff changeset
  2801
          ('f', 'follow', None,
2782
21e571c21a6b Make log --follow without a file list follow a single head.
Brendan Cully <brendan@kublai.com>
parents: 2764
diff changeset
  2802
           _('follow changeset history, or file history across copies and renames')),
2784
12a7bfcafd8f Add log option --follow-first to follow only the first parent of
Brendan Cully <brendan@kublai.com>
parents: 2783
diff changeset
  2803
          ('', 'follow-first', None,
12a7bfcafd8f Add log option --follow-first to follow only the first parent of
Brendan Cully <brendan@kublai.com>
parents: 2783
diff changeset
  2804
           _('only follow the first parent of merge changesets')),
3813
fc5ba0ab7f45 Add --date support to log
Matt Mackall <mpm@selenic.com>
parents: 3812
diff changeset
  2805
          ('d', 'date', '', _('show revs matching date spec')),
3197
e18c3d08528d Show copies in hg log.
Brendan Cully <brendan@kublai.com>
parents: 3194
diff changeset
  2806
          ('C', 'copies', None, _('show copied files')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2807
          ('k', 'keyword', [], _('search for a keyword')),
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  2808
          ('l', 'limit', '', _('limit number of changes displayed')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2809
          ('r', 'rev', [], _('show the specified revision or range')),
3657
4d988b7412f2 add log --removed
Matt Mackall <mpm@selenic.com>
parents: 3656
diff changeset
  2810
          ('', 'removed', None, _('include revs where files were removed')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2811
          ('M', 'no-merges', None, _('do not show merges')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2812
          ('', 'style', '', _('display using template map file')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2813
          ('m', 'only-merges', None, _('show only merges')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2814
          ('p', 'patch', None, _('show patch')),
2901
9826af4841ef Test for log --prune.
Brendan Cully <brendan@kublai.com>
parents: 2883
diff changeset
  2815
          ('P', 'prune', [], _('do not display revision or any of its ancestors')),
1920
b7cc0f323a4c merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1917 1894
diff changeset
  2816
          ('', 'template', '', _('display with template')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2817
         ] + walkopts,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2818
         _('hg log [OPTION]... [FILE]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2819
    "manifest": (manifest, [], _('hg manifest [REV]')),
4014
509342f95564 various doc fixes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4013
diff changeset
  2820
    "^merge":
2044
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  2821
        (merge,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2822
         [('b', 'branch', '', _('merge with head of a specific branch (DEPRECATED)')),
2044
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  2823
          ('f', 'force', None, _('force a merge with outstanding changes'))],
3504
f4ab58d4ccd4 Remove [-b] options from help syntax lines
Matt Mackall <mpm@selenic.com>
parents: 3503
diff changeset
  2824
         _('hg merge [-f] [REV]')),
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2825
    "outgoing|out": (outgoing,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2826
         [('M', 'no-merges', None, _('do not show merges')),
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2827
          ('f', 'force', None,
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2828
           _('run even when remote repository is unrelated')),
1439
65cbe22b03fa allow 'hg out' / 'hg in' to show newest commit first
Michal Kvasnica <kvasnica@gmail.com>
parents: 1437
diff changeset
  2829
          ('p', 'patch', None, _('show patch')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2830
          ('', 'style', '', _('display using template map file')),
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2831
          ('r', 'rev', [], _('a specific revision you would like to push')),
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2832
          ('n', 'newest-first', None, _('show newest record first')),
1965
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  2833
          ('', 'template', '', _('display with template')),
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2834
         ] + remoteopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2835
         _('hg outgoing [-M] [-p] [-n] [-f] [-r REV]... [DEST]')),
1724
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  2836
    "^parents":
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  2837
        (parents,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2838
         [('b', 'branches', None, _('show branches (DEPRECATED)')),
2644
b24efed24e8f allow specifying a file to hg parents, change the syntax to use -r/--rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2626
diff changeset
  2839
          ('r', 'rev', '', _('show parents from the specified rev')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2840
          ('', 'style', '', _('display using template map file')),
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2841
          ('', 'template', '', _('display with template'))],
3504
f4ab58d4ccd4 Remove [-b] options from help syntax lines
Matt Mackall <mpm@selenic.com>
parents: 3503
diff changeset
  2842
         _('hg parents [-r REV] [FILE]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2843
    "paths": (paths, [], _('hg paths [NAME]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2844
    "^pull":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2845
        (pull,
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2846
         [('u', 'update', None,
3198
a32f65549b9e Documentation clarification for --update option to pull and unbundle
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3197
diff changeset
  2847
           _('update to new tip if changesets were pulled')),
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2848
          ('f', 'force', None,
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  2849
           _('run even when remote repository is unrelated')),
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2850
          ('r', 'rev', [],
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2851
           _('a specific revision up to which you would like to pull')),
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2852
         ] + remoteopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2853
         _('hg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]')),
818
eef752151556 Actually implement the -f switch for push
mpm@selenic.com
parents: 815
diff changeset
  2854
    "^push":
eef752151556 Actually implement the -f switch for push
mpm@selenic.com
parents: 815
diff changeset
  2855
        (push,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2856
         [('f', 'force', None, _('force push')),
1781
284fc722c342 add an optional argument to push only the specified revisions (push -r)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1712
diff changeset
  2857
          ('r', 'rev', [], _('a specific revision you would like to push')),
3190
37b53487c341 factor opts: remote repo access options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3189
diff changeset
  2858
         ] + remoteopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2859
         _('hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]')),
1818
9bbc7b304c34 Make the deprecated rawcommit an alias of debugrawcommit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1816
diff changeset
  2860
    "debugrawcommit|rawcommit":
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2861
        (rawcommit,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2862
         [('p', 'parent', [], _('parent')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2863
          ('d', 'date', '', _('date code')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2864
          ('u', 'user', '', _('user')),
3857
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2865
          ('F', 'files', '', _('file list'))
f6f16f871049 Uniformisation of commit help for -m and -l.
Mathieu Clabaut <mathieu.clabaut@gmail.com>
parents: 3855
diff changeset
  2866
          ] + commitopts,
1818
9bbc7b304c34 Make the deprecated rawcommit an alias of debugrawcommit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1816
diff changeset
  2867
         _('hg debugrawcommit [OPTION]... [FILE]...')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2868
    "recover": (recover, [], _('hg recover')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2869
    "^remove|rm":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2870
        (remove,
2245
d2118a0926bd Added -A as an alias for --after to hg remove, like for other commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2241
diff changeset
  2871
         [('A', 'after', None, _('record remove that has already occurred')),
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2872
          ('f', 'force', None, _('remove file even if modified')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2873
         ] + walkopts,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2874
         _('hg remove [OPTION]... FILE...')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2875
    "rename|mv":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2876
        (rename,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2877
         [('A', 'after', None, _('record a rename that has already occurred')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2878
          ('f', 'force', None,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2879
           _('forcibly copy over an existing managed file')),
3189
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2880
         ] + walkopts + dryrunopts,
1869
42c76ec7a8d4 Reordered options for remove, fixed synopsis for rename.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1867
diff changeset
  2881
         _('hg rename [OPTION]... SOURCE... DEST')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2882
    "^revert":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2883
        (revert,
2983
3b7626b861f8 revert: add -a as alias for --all
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2982
diff changeset
  2884
         [('a', 'all', None, _('revert all changes when no arguments given')),
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2885
          ('d', 'date', '', _('tipmost revision matching date')),
2982
890e285c52a1 revert: require --all to revert all files.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2963
diff changeset
  2886
          ('r', 'rev', '', _('revision to revert to')),
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2887
          ('', 'no-backup', None, _('do not save backup copies of files')),
3189
a73a785ea8e1 factor opts: --dry-run option
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3188
diff changeset
  2888
         ] + walkopts + dryrunopts,
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2889
         _('hg revert [OPTION]... [-r REV] [NAME]...')),
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2890
    "rollback": (rollback, [], _('hg rollback')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2891
    "root": (root, [], _('hg root')),
3553
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
  2892
    "showconfig|debugconfig":
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
  2893
        (showconfig,
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
  2894
         [('u', 'untrusted', None, _('show untrusted configuration options'))],
e1508621e9ef add --untrusted to showconfig
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3521
diff changeset
  2895
         _('showconfig [-u] [NAME]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2896
    "^serve":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2897
        (serve,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2898
         [('A', 'accesslog', '', _('name of access log file to write to')),
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2899
          ('d', 'daemon', None, _('run server in background')),
1742
1e5bb6c929cd Added help string for --daemon-pipefds
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1741
diff changeset
  2900
          ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2901
          ('E', 'errorlog', '', _('name of error log file to write to')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2902
          ('p', 'port', 0, _('port to use (default: 8000)')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2903
          ('a', 'address', '', _('address to use')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2904
          ('n', 'name', '',
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2905
           _('name to show in web pages (default: working dir)')),
2124
27fd8b7a6c51 Cleaned trailing whitespace in hgweb.py, removed command line shortcut for webdir-conf.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 2122
diff changeset
  2906
          ('', 'webdir-conf', '', _('name of the webdir config file'
27fd8b7a6c51 Cleaned trailing whitespace in hgweb.py, removed command line shortcut for webdir-conf.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 2122
diff changeset
  2907
                                    ' (serve more than one repo)')),
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2908
          ('', 'pid-file', '', _('name of file to write process ID to')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2909
          ('', 'stdio', None, _('for remote clients')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2910
          ('t', 'templates', '', _('web templates to use')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2911
          ('', 'style', '', _('template style to use')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2912
          ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2913
         _('hg serve [OPTION]...')),
1507
cd8fadd8c689 Add explicit 'st' alias for status
Matt Mackall <mpm@selenic.com>
parents: 1506
diff changeset
  2914
    "^status|st":
840
141744605b51 hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents: 839
diff changeset
  2915
        (status,
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2916
         [('A', 'all', None, _('show status of all files')),
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2917
          ('m', 'modified', None, _('show only modified files')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2918
          ('a', 'added', None, _('show only added files')),
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2919
          ('r', 'removed', None, _('show only removed files')),
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  2920
          ('d', 'deleted', None, _('show only deleted (but tracked) files')),
2661
5c10b7ed3411 status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2639
diff changeset
  2921
          ('c', 'clean', None, _('show only files without changes')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2922
          ('u', 'unknown', None, _('show only unknown (not tracked) files')),
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2923
          ('i', 'ignored', None, _('show ignored files')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2924
          ('n', 'no-status', None, _('hide status prefix')),
2639
001703ec311d Add an option '-C|--copies' to hg status to show the source of copied files.
Brendan Cully <brendan@kublai.com>
parents: 2630
diff changeset
  2925
          ('C', 'copies', None, _('show source of copied files')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2926
          ('0', 'print0', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2927
           _('end filenames with NUL, for use with xargs')),
3467
2b3b703b3a2b Add --rev option to status
Brendan Cully <brendan@kublai.com>
parents: 3465
diff changeset
  2928
          ('', 'rev', [], _('show difference from revision')),
3188
725e3d3145d8 factor opts: walk options
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3187
diff changeset
  2929
         ] + walkopts,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2930
         _('hg status [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2931
    "tag":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2932
        (tag,
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2933
         [('l', 'local', None, _('make the tag local')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2934
          ('m', 'message', '', _('message for tag commit log entry')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2935
          ('d', 'date', '', _('record datecode as commit date')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2936
          ('u', 'user', '', _('record user as commiter')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2937
          ('r', 'rev', '', _('revision to tag'))],
1812
a81f99dfaa2a fix the synopsis of some commands, mark rawcommit as deprecated in short help
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1811
diff changeset
  2938
         _('hg tag [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2939
    "tags": (tags, [], _('hg tags')),
1762
8eaa8e06a364 Add option -b/--branch to hg tip (as done for hg parents).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1761
diff changeset
  2940
    "tip":
8eaa8e06a364 Add option -b/--branch to hg tip (as done for hg parents).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1761
diff changeset
  2941
        (tip,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2942
         [('b', 'branches', None, _('show branches (DEPRECATED)')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2943
          ('', 'style', '', _('display using template map file')),
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2944
          ('p', 'patch', None, _('show patch')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2945
          ('', 'template', '', _('display with template'))],
3504
f4ab58d4ccd4 Remove [-b] options from help syntax lines
Matt Mackall <mpm@selenic.com>
parents: 3503
diff changeset
  2946
         _('hg tip [-p]')),
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2947
    "unbundle":
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2948
        (unbundle,
1601
a1b25fb2e764 Error handling for unbundle, fix option line wrapping
Matt Mackall <mpm@selenic.com>
parents: 1600
diff changeset
  2949
         [('u', 'update', None,
3198
a32f65549b9e Documentation clarification for --update option to pull and unbundle
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3197
diff changeset
  2950
           _('update to new tip if changesets were unbundled'))],
1600
728fd9584993 add --update support to 'hg unbundle'
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1596
diff changeset
  2951
         _('hg unbundle [-u] FILE')),
593
ca3c499e94c6 Shorten help
mpm@selenic.com
parents: 592
diff changeset
  2952
    "^update|up|checkout|co":
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2953
        (update,
3503
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2954
         [('b', 'branch', '',
b28d3e0f9a8c Deprecate old --branch/branches options
Matt Mackall <mpm@selenic.com>
parents: 3502
diff changeset
  2955
           _('checkout the head of a specific branch (DEPRECATED)')),
3814
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2956
          ('C', 'clean', None, _('overwrite locally modified files')),
120be84f33de Add --date support to update and revert
Matt Mackall <mpm@selenic.com>
parents: 3813
diff changeset
  2957
          ('d', 'date', '', _('tipmost revision matching date'))],
3885
6081b4c68baf Corrected synopsis for many commands.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3862
diff changeset
  2958
         _('hg update [-C] [-d DATE] [REV]')),
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  2959
    "verify": (verify, [], _('hg verify')),
3651
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  2960
    "version": (version_, [], _('hg version')),
1046
772507daaa17 Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1044
diff changeset
  2961
}
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  2962
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2963
norepo = ("clone init version help debugancestor debugcomplete debugdata"
3844
3ba82c3f4bc3 Add debuginstall command to do basic install tests
Matt Mackall <mpm@selenic.com>
parents: 3840
diff changeset
  2964
          " debugindex debugindexdot debugdate debuginstall")
3268
bb057b6ce3cf Un-debugify debugconfig to showconfig. (issue 317)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3250
diff changeset
  2965
optionalrepo = ("paths serve showconfig")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  2966
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
  2967
def findpossible(ui, cmd):
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2968
    """
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2969
    Return cmd -> (aliases, command table entry)
2049
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2970
    for each matching command.
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2971
    Return debug commands (or their aliases) only if no normal command matches.
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2972
    """
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2973
    choice = {}
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2974
    debugchoice = {}
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  2975
    for e in table.keys():
1506
11c8b81f95fe if unambigious command name are passed, use them
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1505
diff changeset
  2976
        aliases = e.lstrip("^").split("|")
2049
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2977
        found = None
1506
11c8b81f95fe if unambigious command name are passed, use them
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1505
diff changeset
  2978
        if cmd in aliases:
2049
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2979
            found = cmd
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
  2980
        elif not ui.config("ui", "strict"):
2049
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2981
            for a in aliases:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2982
                if a.startswith(cmd):
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2983
                    found = a
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2984
                    break
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2985
        if found is not None:
3317
399c04369a1b fix bash completion of debug commands; add test for debugcomplete
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3284
diff changeset
  2986
            if aliases[0].startswith("debug") or found.startswith("debug"):
2049
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2987
                debugchoice[found] = (aliases, table[e])
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2988
            else:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  2989
                choice[found] = (aliases, table[e])
1739
57de7e1a81d2 AmbiguousCommand is raised too soon.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1736
diff changeset
  2990
1850
05f6c0d1bad8 Hide debug commands in ambiguous command list, unless no normal command matches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1849
diff changeset
  2991
    if not choice and debugchoice:
05f6c0d1bad8 Hide debug commands in ambiguous command list, unless no normal command matches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1849
diff changeset
  2992
        choice = debugchoice
05f6c0d1bad8 Hide debug commands in ambiguous command list, unless no normal command matches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1849
diff changeset
  2993
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2994
    return choice
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2995
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
  2996
def findcmd(ui, cmd):
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2997
    """Return (aliases, command table entry) for command string."""
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
  2998
    choice = findpossible(ui, cmd)
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  2999
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3000
    if choice.has_key(cmd):
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3001
        return choice[cmd]
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3002
1848
bb70ffebe77b show choices on ambiguous commands
TK Soh <teekaysoh@yahoo.com>
parents: 1840
diff changeset
  3003
    if len(choice) > 1:
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3004
        clist = choice.keys()
1849
360d0f8d9d6f Show ambiguous aliases, if they are not simple abbreviations. Sort output.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1848
diff changeset
  3005
        clist.sort()
1848
bb70ffebe77b show choices on ambiguous commands
TK Soh <teekaysoh@yahoo.com>
parents: 1840
diff changeset
  3006
        raise AmbiguousCommand(cmd, clist)
1739
57de7e1a81d2 AmbiguousCommand is raised too soon.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1736
diff changeset
  3007
1517
b582dbc16165 Canonicalize command when using aliases or prefix matching.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1507
diff changeset
  3008
    if choice:
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3009
        return choice.values()[0]
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3010
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3011
    raise UnknownCommand(cmd)
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3012
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
  3013
def catchterm(*args):
2153
635653cd73ab move SignalInterrupt class into util module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2140
diff changeset
  3014
    raise util.SignalInterrupt
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
  3015
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3016
def run():
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3017
    sys.exit(dispatch(sys.argv[1:]))
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3018
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3019
class ParseError(Exception):
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3020
    """Exception raised on errors in parsing the command line."""
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3021
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3022
def parse(ui, args):
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3023
    options = {}
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3024
    cmdoptions = {}
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3025
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3026
    try:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3027
        args = fancyopts.fancyopts(args, globalopts, options)
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3028
    except fancyopts.getopt.GetoptError, inst:
618
4051b78c53c7 Handle unrecognised options correctly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 617
diff changeset
  3029
        raise ParseError(None, inst)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3030
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3031
    if args:
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3032
        cmd, args = args[0], args[1:]
2988
63c3a1921a67 Add ui.strict config item.
Bryan O'Sullivan <bos@serpentine.com>
parents: 2983
diff changeset
  3033
        aliases, i = findcmd(ui, cmd)
1567
b4956bbbadc9 make command defaults works for aliases
TK Soh <teekaysoh@yahoo.com>
parents: 1565
diff changeset
  3034
        cmd = aliases[0]
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3035
        defaults = ui.config("defaults", cmd)
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3036
        if defaults:
3068
15526271eafb allow shell-quoting in command defaults
TK Soh <teekaysoh@yahoo.com>
parents: 3029
diff changeset
  3037
            args = shlex.split(defaults) + args
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3038
        c = list(i[1])
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3039
    else:
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3040
        cmd = None
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3041
        c = []
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3042
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3043
    # combine global options into local
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3044
    for o in globalopts:
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3045
        c.append((o[0], o[1], options[o[1]], o[3]))
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
  3046
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3047
    try:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3048
        args = fancyopts.fancyopts(args, c, cmdoptions)
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3049
    except fancyopts.getopt.GetoptError, inst:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3050
        raise ParseError(cmd, inst)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3051
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3052
    # separate global options back out
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3053
    for o in globalopts:
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3054
        n = o[1]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3055
        options[n] = cmdoptions[n]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3056
        del cmdoptions[n]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3057
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3058
    return (cmd, cmd and i[0] or None, args, options, cmdoptions)
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3059
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3060
external = {}
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3061
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3062
def findext(name):
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3063
    '''return module with given extension name'''
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3064
    try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3065
        return sys.modules[external[name]]
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3066
    except KeyError:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3067
        for k, v in external.iteritems():
2755
6c2c10cedf7a Check for parent/mod as well as parent.mod in findext.
Brendan Cully <brendan@kublai.com>
parents: 2743
diff changeset
  3068
            if k.endswith('.' + name) or k.endswith('/' + name) or v == name:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3069
                return sys.modules[v]
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3070
        raise KeyError(name)
2600
c4325f0a9b91 clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2598
diff changeset
  3071
2944
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3072
def load_extensions(ui):
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3073
    added = []
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3074
    for ext_name, load_from_name in ui.extensions():
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3075
        if ext_name in external:
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3076
            continue
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3077
        try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3078
            if load_from_name:
2405
4593d09e534d pick a non-conflicting module name when loading an extension
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2400
diff changeset
  3079
                # the module will be loaded in sys.modules
4593d09e534d pick a non-conflicting module name when loading an extension
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2400
diff changeset
  3080
                # choose an unique name so that it doesn't
4593d09e534d pick a non-conflicting module name when loading an extension
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2400
diff changeset
  3081
                # conflicts with other modules
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3082
                module_name = "hgext_%s" % ext_name.replace('.', '_')
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3083
                mod = imp.load_source(module_name, load_from_name)
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3084
            else:
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3085
                def importh(name):
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3086
                    mod = __import__(name)
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3087
                    components = name.split('.')
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3088
                    for comp in components[1:]:
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3089
                        mod = getattr(mod, comp)
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3090
                    return mod
1889
468730910353 Try to import extensions from the hgext module first.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1887
diff changeset
  3091
                try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3092
                    mod = importh("hgext.%s" % ext_name)
1889
468730910353 Try to import extensions from the hgext module first.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1887
diff changeset
  3093
                except ImportError:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3094
                    mod = importh(ext_name)
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3095
            external[ext_name] = mod.__name__
2944
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3096
            added.append((mod, ext_name))
2428
42b8a1ff46cf honor signals during load of extensions.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2422
diff changeset
  3097
        except (util.SignalInterrupt, KeyboardInterrupt):
42b8a1ff46cf honor signals during load of extensions.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2422
diff changeset
  3098
            raise
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3099
        except Exception, inst:
2943
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3100
            ui.warn(_("*** failed to import extension %s: %s\n") %
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3101
                    (ext_name, inst))
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3102
            if ui.print_exc():
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3103
                return 1
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3104
2944
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3105
    for mod, name in added:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3106
        uisetup = getattr(mod, 'uisetup', None)
2330
b30aa02c85e7 add 'uisetup' function to extension module protocol.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2309
diff changeset
  3107
        if uisetup:
2944
2efa9b8aed30 load extensions from every hgrc.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2943
diff changeset
  3108
            uisetup(ui)
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3109
        cmdtable = getattr(mod, 'cmdtable', {})
1295
abcdf14449ea Make contract with extensions optional.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1285
diff changeset
  3110
        for t in cmdtable:
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1068
diff changeset
  3111
            if t in table:
2943
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3112
                ui.warn(_("module %s overrides %s\n") % (name, t))
1295
abcdf14449ea Make contract with extensions optional.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1285
diff changeset
  3113
        table.update(cmdtable)
3223
53e843840349 Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3204
diff changeset
  3114
3346
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3115
def parseconfig(config):
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3116
    """parse the --config options from the command line"""
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3117
    parsed = []
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3118
    for cfg in config:
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3119
        try:
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3120
            name, value = cfg.split('=', 1)
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3121
            section, name = name.split('.', 1)
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3122
            if not section or not name:
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3123
                raise IndexError
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3124
            parsed.append((section, name, value))
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3125
        except (IndexError, ValueError):
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3126
            raise util.Abort(_('malformed --config option: %s') % cfg)
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3127
    return parsed
1700a103458e move the parsing of --config options to commands.py
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3345
diff changeset
  3128
2943
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3129
def dispatch(args):
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3130
    for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3131
        num = getattr(signal, name, None)
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3132
        if num: signal.signal(num, catchterm)
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3133
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3134
    try:
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2991
diff changeset
  3135
        u = ui.ui(traceback='--traceback' in sys.argv[1:])
2943
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3136
    except util.Abort, inst:
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3137
        sys.stderr.write(_("abort: %s\n") % inst)
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3138
        return -1
8e59010158ce refactor extension loading.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2854
diff changeset
  3139
3014
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2991
diff changeset
  3140
    load_extensions(u)
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2991
diff changeset
  3141
    u.addreadhook(load_extensions)
01454af644b8 load extensions only after the ui object has been completely initialized
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2991
diff changeset
  3142
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3143
    try:
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3144
        cmd, func, args, options, cmdoptions = parse(u, args)
3774
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  3145
        if options["encoding"]:
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  3146
            util._encoding = options["encoding"]
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  3147
        if options["encodingmode"]:
a88e02081a88 Add global options for setting encoding and encodingmode
Matt Mackall <mpm@selenic.com>
parents: 3773
diff changeset
  3148
            util._encodingmode = options["encodingmode"]
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3149
        if options["time"]:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3150
            def get_times():
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3151
                t = os.times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3152
                if t[4] == 0.0: # Windows leaves this as zero, so use time.clock()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3153
                    t = (t[0], t[1], t[2], t[3], time.clock())
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3154
                return t
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3155
            s = get_times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3156
            def print_time():
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3157
                t = get_times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3158
                u.warn(_("Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n") %
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3159
                    (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3]))
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3160
            atexit.register(print_time)
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3161
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3162
        # enter the debugger before command execution
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3163
        if options['debugger']:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3164
            pdb.set_trace()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3165
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3166
        try:
1859
39c46510ed25 Moved --cwd handling in front of -R handling again. Shorter code for initial -R.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1858
diff changeset
  3167
            if options['cwd']:
3840
973c6e6ca7a1 Removed unneeded OSError exception handler.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3837
diff changeset
  3168
                os.chdir(options['cwd'])
1859
39c46510ed25 Moved --cwd handling in front of -R handling again. Shorter code for initial -R.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1858
diff changeset
  3169
3348
e4aa22eaa0e4 call ui.updateopts only after changing directories
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3346
diff changeset
  3170
            u.updateopts(options["verbose"], options["debug"], options["quiet"],
e4aa22eaa0e4 call ui.updateopts only after changing directories
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3346
diff changeset
  3171
                         not options["noninteractive"], options["traceback"],
e4aa22eaa0e4 call ui.updateopts only after changing directories
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3346
diff changeset
  3172
                         parseconfig(options["config"]))
e4aa22eaa0e4 call ui.updateopts only after changing directories
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3346
diff changeset
  3173
1894
4c53aaf2d153 Allow symbolic path names in global -R/--repository parameter.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1893
diff changeset
  3174
            path = u.expandpath(options["repository"]) or ""
1859
39c46510ed25 Moved --cwd handling in front of -R handling again. Shorter code for initial -R.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1858
diff changeset
  3175
            repo = path and hg.repository(u, path=path) or None
3278
23682d3e4111 disallow commands on non local repository
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3268
diff changeset
  3176
            if repo and not repo.local():
23682d3e4111 disallow commands on non local repository
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 3268
diff changeset
  3177
                raise util.Abort(_("repository '%s' is not local") % path)
1857
848152a2e67f Always try to open the repository if -R/--repository is specified.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1851
diff changeset
  3178
1048
7fbb440b2e63 Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1047
diff changeset
  3179
            if options['help']:
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3180
                return help_(u, cmd, options['version'])
1048
7fbb440b2e63 Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1047
diff changeset
  3181
            elif options['version']:
3651
6389205291c6 move show_version to version_
Matt Mackall <mpm@selenic.com>
parents: 3650
diff changeset
  3182
                return version_(u)
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3183
            elif not cmd:
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3184
                return help_(u, 'shortlist')
1047
a0538ea1ac50 Moved special handling of --version and no hg command from parse to dispatch.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1046
diff changeset
  3185
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3186
            if cmd not in norepo.split():
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3187
                try:
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3188
                    if not repo:
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3189
                        repo = hg.repository(u, path=path)
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3190
                    u = repo.ui
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3191
                    for name in external.itervalues():
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3192
                        mod = sys.modules[name]
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3193
                        if hasattr(mod, 'reposetup'):
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3194
                            mod.reposetup(u, repo)
2847
2ff57e3113a4 call reposetup functions of extension modules whenever repo created
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2812
diff changeset
  3195
                            hg.repo_setup_hooks.append(mod.reposetup)
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3196
                except hg.RepoError:
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3197
                    if cmd not in optionalrepo.split():
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3198
                        raise
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3199
                d = lambda: func(u, repo, *args, **cmdoptions)
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3200
            else:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3201
                d = lambda: func(u, *args, **cmdoptions)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3202
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3203
            try:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3204
                if options['profile']:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3205
                    import hotshot, hotshot.stats
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3206
                    prof = hotshot.Profile("hg.prof")
1832
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3207
                    try:
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3208
                        try:
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3209
                            return prof.runcall(d)
1832
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3210
                        except:
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3211
                            try:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3212
                                u.warn(_('exception raised - generating '
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3213
                                         'profile anyway\n'))
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3214
                            except:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3215
                                pass
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3216
                            raise
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3217
                    finally:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3218
                        prof.close()
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3219
                        stats = hotshot.stats.load("hg.prof")
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3220
                        stats.strip_dirs()
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3221
                        stats.sort_stats('time', 'calls')
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3222
                        stats.print_stats(40)
2422
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3223
                elif options['lsprof']:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3224
                    try:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3225
                        from mercurial import lsprof
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3226
                    except ImportError:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3227
                        raise util.Abort(_(
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3228
                            'lsprof not available - install from '
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3229
                            'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/'))
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3230
                    p = lsprof.Profiler()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3231
                    p.enable(subcalls=True)
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3232
                    try:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3233
                        return d()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3234
                    finally:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3235
                        p.disable()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3236
                        stats = lsprof.Stats(p.getstats())
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3237
                        stats.sort()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3238
                        stats.pprint(top=10, file=sys.stderr, climit=5)
1837
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3239
                else:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3240
                    return d()
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3241
            finally:
6f67a4c93493 make ui flush output. this makes error happen if printing to /dev/full.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1835
diff changeset
  3242
                u.flush()
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3243
        except:
1225
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3244
            # enter the debugger when we hit an exception
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3245
            if options['debugger']:
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3246
                pdb.post_mortem(sys.exc_info()[2])
2335
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2331
diff changeset
  3247
            u.print_exc()
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3248
            raise
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3249
    except ParseError, inst:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3250
        if inst.args[0]:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3251
            u.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3252
            help_(u, inst.args[0])
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3253
        else:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3254
            u.warn(_("hg: %s\n") % inst.args[1])
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3255
            help_(u, 'shortlist')
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3256
    except AmbiguousCommand, inst:
1920
b7cc0f323a4c merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1917 1894
diff changeset
  3257
        u.warn(_("hg: command '%s' is ambiguous:\n    %s\n") %
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3258
                (inst.args[0], " ".join(inst.args[1])))
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3259
    except UnknownCommand, inst:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3260
        u.warn(_("hg: unknown command '%s'\n") % inst.args[0])
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3261
        help_(u, 'shortlist')
499
81c563a254be Add exception class for repository errors
mpm@selenic.com
parents: 496
diff changeset
  3262
    except hg.RepoError, inst:
2134
ef81e34ad674 write to stderr with a single write call.
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2127
diff changeset
  3263
        u.warn(_("abort: %s!\n") % inst)
2016
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3264
    except lock.LockHeld, inst:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3265
        if inst.errno == errno.ETIMEDOUT:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3266
            reason = _('timed out waiting for lock held by %s') % inst.locker
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3267
        else:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3268
            reason = _('lock held by %s') % inst.locker
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3269
        u.warn(_("abort: %s: %s\n") % (inst.desc or inst.filename, reason))
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3270
    except lock.LockUnavailable, inst:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3271
        u.warn(_("abort: could not lock %s: %s\n") %
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3272
               (inst.desc or inst.filename, inst.strerror))
1214
34706a835d4a Smarter handling of revlog key errors
mpm@selenic.com
parents: 1212
diff changeset
  3273
    except revlog.RevlogError, inst:
3072
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3071
diff changeset
  3274
        u.warn(_("abort: %s!\n") % inst)
2153
635653cd73ab move SignalInterrupt class into util module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2140
diff changeset
  3275
    except util.SignalInterrupt:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3276
        u.warn(_("killed!\n"))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3277
    except KeyboardInterrupt:
832
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3278
        try:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3279
            u.warn(_("interrupted!\n"))
832
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3280
        except IOError, inst:
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3281
            if inst.errno == errno.EPIPE:
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3282
                if u.debugflag:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3283
                    u.warn(_("\nbroken pipe\n"))
832
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3284
            else:
b65773f7db41 Handle broken pipe on pressing Ctrl-C with e.g. 'hg log|grep something'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 818
diff changeset
  3285
                raise
4013
54fa628b8c78 catch socket.error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4010
diff changeset
  3286
    except socket.error, inst:
54fa628b8c78 catch socket.error
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4010
diff changeset
  3287
        u.warn(_("abort: %s\n") % inst[1])
250
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3288
    except IOError, inst:
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3289
        if hasattr(inst, "code"):
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3290
            u.warn(_("abort: %s\n") % inst)
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3291
        elif hasattr(inst, "reason"):
4010
e282448d68f1 inst.reason isn't alway in the form (errno, strerror)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4009
diff changeset
  3292
            try: # usually it is in the form (errno, strerror)
e282448d68f1 inst.reason isn't alway in the form (errno, strerror)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4009
diff changeset
  3293
                reason = inst.reason.args[1]
e282448d68f1 inst.reason isn't alway in the form (errno, strerror)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4009
diff changeset
  3294
            except: # it might be anything, for example a string
e282448d68f1 inst.reason isn't alway in the form (errno, strerror)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4009
diff changeset
  3295
                reason = inst.reason
e282448d68f1 inst.reason isn't alway in the form (errno, strerror)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4009
diff changeset
  3296
            u.warn(_("abort: error: %s\n") % reason)
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3297
        elif hasattr(inst, "args") and inst[0] == errno.EPIPE:
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  3298
            if u.debugflag:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3299
                u.warn(_("broken pipe\n"))
1350
3729e2773cca Fix pipe error regression
Matt Mackall <mpm@selenic.com>
parents: 1342
diff changeset
  3300
        elif getattr(inst, "strerror", None):
1354
8cf364c65425 Made the abort message for IOError nicer when the filename is known.
Eric Hopper <hopper@omnifarious.org>
parents: 1350
diff changeset
  3301
            if getattr(inst, "filename", None):
3080
e270cbd4aa20 Fixed OSError "No such file or directory: None" and make IOError consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3079
diff changeset
  3302
                u.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
1354
8cf364c65425 Made the abort message for IOError nicer when the filename is known.
Eric Hopper <hopper@omnifarious.org>
parents: 1350
diff changeset
  3303
            else:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3304
                u.warn(_("abort: %s\n") % inst.strerror)
250
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3305
        else:
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3306
            raise
549
92b60cabf808 [PATCH] Catch OSError usefully
mpm@selenic.com
parents: 547
diff changeset
  3307
    except OSError, inst:
3080
e270cbd4aa20 Fixed OSError "No such file or directory: None" and make IOError consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3079
diff changeset
  3308
        if getattr(inst, "filename", None):
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3309
            u.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
549
92b60cabf808 [PATCH] Catch OSError usefully
mpm@selenic.com
parents: 547
diff changeset
  3310
        else:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3311
            u.warn(_("abort: %s\n") % inst.strerror)
3564
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3312
    except util.UnexpectedOutput, inst:
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3313
        u.warn(_("abort: %s") % inst[0])
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3314
        if not isinstance(inst[1], basestring):
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3315
            u.warn(" %r\n" % (inst[1],))
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3316
        elif not inst[1]:
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3317
            u.warn(_(" empty string\n"))
eda9e7c9300d New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3563
diff changeset
  3318
        else:
3767
1861fa38a6a7 Move ellipsis code to util.ellipsis() and improve maxlength handling.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3736
diff changeset
  3319
            u.warn("\n%r\n" % util.ellipsis(inst[1]))
870
a82eae840447 Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents: 868
diff changeset
  3320
    except util.Abort, inst:
3072
bc3fe3b5b785 Never apply string formatting to generated errors with util.Abort.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3071
diff changeset
  3321
        u.warn(_("abort: %s\n") % inst)
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3322
    except TypeError, inst:
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3323
        # was this an argument error?
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3324
        tb = traceback.extract_tb(sys.exc_info()[2])
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3325
        if len(tb) > 2: # no
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3326
            raise
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3327
        u.debug(inst, "\n")
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3328
        u.warn(_("%s: invalid arguments\n") % cmd)
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3329
        help_(u, cmd)
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3330
    except SystemExit, inst:
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3331
        # Commands shouldn't sys.exit directly, but give a return code.
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3332
        # Just in case catch this and and pass exit code to caller.
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3333
        return inst.code
1215
8b4435aae40a Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents: 1214
diff changeset
  3334
    except:
1402
9d2c2e6b32b5 i18n part2: use '_' for all strings who are part of the user interface
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1400
diff changeset
  3335
        u.warn(_("** unknown exception encountered, details follow\n"))
2625
70d65ca6d893 mention the bts for bug reporting in traceback message
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2617
diff changeset
  3336
        u.warn(_("** report bug details to "
70d65ca6d893 mention the bts for bug reporting in traceback message
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2617
diff changeset
  3337
                 "http://www.selenic.com/mercurial/bts\n"))
70d65ca6d893 mention the bts for bug reporting in traceback message
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2617
diff changeset
  3338
        u.warn(_("** or mercurial@selenic.com\n"))
1552
7509fa02437f Added version information to "report bug" message for unknown exceptions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1551
diff changeset
  3339
        u.warn(_("** Mercurial Distributed SCM (version %s)\n")
7509fa02437f Added version information to "report bug" message for unknown exceptions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1551
diff changeset
  3340
               % version.get_version())
1215
8b4435aae40a Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents: 1214
diff changeset
  3341
        raise
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3342
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3343
    return -1