mercurial/commands.py
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
Sat, 15 Jul 2006 17:01:01 +0200
changeset 2618 8367b67ad397
parent 2617 0b4bff2b0ce3
parent 2614 8ba1c31f6864
child 2620 de82749d3a71
permissions -rw-r--r--
merge with crew
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
#
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
     3
# Copyright 2005 Matt Mackall <mpm@selenic.com>
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 _
2461
ff9ee834e3b6 tidy up mtime patch of andrea, get back half of performance loss.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2460
diff changeset
    11
demandload(globals(), "os re sys signal shutil imp urllib pdb")
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
    12
demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo")
2356
2db831b33e8f Final stage of the hgweb split up.
Eric Hopper <hopper@omnifarious.org>
parents: 2355
diff changeset
    13
demandload(globals(), "fnmatch mdiff random signal tempfile time")
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
    14
demandload(globals(), "traceback errno socket version struct atexit sets bz2")
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
    15
demandload(globals(), "archival cStringIO changegroup email.Parser")
2396
8d44649df03b refactor ssh server.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2392
diff changeset
    16
demandload(globals(), "hgweb.server sshserver")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    17
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    18
class UnknownCommand(Exception):
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    19
    """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
    20
class AmbiguousCommand(Exception):
ac4ca6bf2383 Improved error message for ambiguous command shortcuts.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1517
diff changeset
    21
    """Exception raised if command shortcut matches more than one command."""
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    22
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    23
def bail_if_changed(repo):
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    24
    modified, added, removed, deleted, unknown = repo.changes()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    25
    if modified or added or removed or deleted:
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    26
        raise util.Abort(_("outstanding uncommitted changes"))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
    27
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
    28
def filterfiles(filters, files):
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    29
    l = [x for x in files if x in filters]
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
    30
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
    31
    for t in filters:
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    32
        if t and t[-1] != "/":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    33
            t += "/"
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
    34
        l += [x for x in files if x.startswith(t)]
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
    35
    return l
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
    36
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    37
def relpath(repo, args):
628
8d7f6e68828a Use repo.getcwd() in a few obvious places.
Bryan O'Sullivan <bos@serpentine.com>
parents: 627
diff changeset
    38
    cwd = repo.getcwd()
8d7f6e68828a Use repo.getcwd() in a few obvious places.
Bryan O'Sullivan <bos@serpentine.com>
parents: 627
diff changeset
    39
    if cwd:
886
509de8ab6f31 Fix walk path handling on Windows
Bryan O'Sullivan <bos@serpentine.com>
parents: 884
diff changeset
    40
        return [util.normpath(os.path.join(cwd, x)) for x in args]
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
    41
    return args
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
    42
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    43
def matchpats(repo, pats=[], opts={}, head=''):
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    44
    cwd = repo.getcwd()
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    45
    if not pats and cwd:
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    46
        opts['include'] = [os.path.join(cwd, i) for i in opts['include']]
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    47
        opts['exclude'] = [os.path.join(cwd, x) for x in opts['exclude']]
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    48
        cwd = ''
1413
1c64c628d15f Do not use 'glob' expansion by default on OS != 'nt'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1405
diff changeset
    49
    return util.cmdmatcher(repo.root, cwd, pats or ['.'], opts.get('include'),
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
    50
                           opts.get('exclude'), head)
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    51
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
    52
def makewalk(repo, pats, opts, node=None, head='', badmatch=None):
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
    53
    files, matchfn, anypats = matchpats(repo, pats, opts, head)
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
    54
    exact = dict(zip(files, files))
837
a95c9b3fc3bf Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 823
diff changeset
    55
    def walk():
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
    56
        for src, fn in repo.walk(node=node, files=files, match=matchfn,
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
    57
                                 badmatch=badmatch):
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
    58
            yield src, fn, util.pathto(repo.getcwd(), fn), fn in exact
837
a95c9b3fc3bf Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 823
diff changeset
    59
    return files, matchfn, walk()
a95c9b3fc3bf Fix performance of hg diff.
Bryan O'Sullivan <bos@serpentine.com>
parents: 823
diff changeset
    60
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
    61
def walk(repo, pats, opts, node=None, head='', badmatch=None):
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
    62
    files, matchfn, results = makewalk(repo, pats, opts, node, head, badmatch)
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
    63
    for r in results:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
    64
        yield r
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
    65
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
    66
def walkchangerevs(ui, repo, pats, opts):
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    67
    '''Iterate over files and the revs they changed in.
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    68
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    69
    Callers most commonly need to iterate backwards over the history
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    70
    it is interested in.  Doing so has awful (quadratic-looking)
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    71
    performance, so we use iterators in a "windowed" way.
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    72
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    73
    We walk a window of revisions in the desired order.  Within the
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    74
    window, we first walk forwards to gather data, then in the desired
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    75
    order (usually backwards) to display it.
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    76
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
    77
    This function returns an (iterator, getchange, matchfn) tuple.  The
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    78
    getchange function returns the changelog entry for a numeric
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    79
    revision.  The iterator yields 3-tuples.  They will be of one of
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    80
    the following forms:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    81
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    82
    "window", incrementing, lastrev: stepping through a window,
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    83
    positive if walking forwards through revs, last rev in the
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    84
    sequence iterated over - use to reset state for the current window
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    85
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    86
    "add", rev, fns: out-of-order traversal of the given file names
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    87
    fns, which changed during revision rev - use to gather data for
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    88
    possible display
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    89
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    90
    "iter", rev, None: in-order traversal of the revs earlier iterated
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
    91
    over with "add" - use to display data'''
1337
d4b25df77a9e Fix up some bugs for log and grep with empty repo
mpm@selenic.com
parents: 1331
diff changeset
    92
1799
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    93
    def increasing_windows(start, end, windowsize=8, sizelimit=512):
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    94
        if start < end:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    95
            while start < end:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    96
                yield start, min(windowsize, end-start)
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    97
                start += windowsize
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    98
                if windowsize < sizelimit:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
    99
                    windowsize *= 2
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   100
        else:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   101
            while start > end:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   102
                yield start, min(windowsize, start-end-1)
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   103
                start -= windowsize
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   104
                if windowsize < sizelimit:
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   105
                    windowsize *= 2
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   106
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   107
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
   108
    files, matchfn, anypats = matchpats(repo, pats, opts)
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
   109
1337
d4b25df77a9e Fix up some bugs for log and grep with empty repo
mpm@selenic.com
parents: 1331
diff changeset
   110
    if repo.changelog.count() == 0:
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
   111
        return [], False, matchfn
1337
d4b25df77a9e Fix up some bugs for log and grep with empty repo
mpm@selenic.com
parents: 1331
diff changeset
   112
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   113
    revs = map(int, revrange(ui, repo, opts['rev'] or ['tip:0']))
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   114
    wanted = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   115
    slowpath = anypats
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   116
    fncache = {}
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   117
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   118
    chcache = {}
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   119
    def getchange(rev):
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   120
        ch = chcache.get(rev)
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   121
        if ch is None:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   122
            chcache[rev] = ch = repo.changelog.read(repo.lookup(str(rev)))
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   123
        return ch
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   124
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   125
    if not slowpath and not files:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   126
        # No files, no patterns.  Display all revs.
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   127
        wanted = dict(zip(revs, revs))
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   128
    if not slowpath:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   129
        # Only files, no patterns.  Check the history of each file.
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   130
        def filerevgen(filelog):
1799
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   131
            for i, window in increasing_windows(filelog.count()-1, -1):
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   132
                revs = []
1800
414e81ae971f Removed now obsolete min/max check in walkchangerevs().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1799
diff changeset
   133
                for j in xrange(i - window, i + 1):
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   134
                    revs.append(filelog.linkrev(filelog.node(j)))
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   135
                revs.reverse()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   136
                for rev in revs:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   137
                    yield rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   138
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   139
        minrev, maxrev = min(revs), max(revs)
1749
d457fec76ab0 fix warnings from pychecker (unused variables and shadowing)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
   140
        for file_ in files:
d457fec76ab0 fix warnings from pychecker (unused variables and shadowing)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
   141
            filelog = repo.file(file_)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   142
            # A zero count may be a directory or deleted file, so
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   143
            # try to find matching entries on the slow path.
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   144
            if filelog.count() == 0:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   145
                slowpath = True
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   146
                break
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   147
            for rev in filerevgen(filelog):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   148
                if rev <= maxrev:
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
   149
                    if rev < minrev:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
   150
                        break
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   151
                    fncache.setdefault(rev, [])
1749
d457fec76ab0 fix warnings from pychecker (unused variables and shadowing)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
   152
                    fncache[rev].append(file_)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   153
                    wanted[rev] = 1
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   154
    if slowpath:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   155
        # The slow path checks files modified in every changeset.
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   156
        def changerevgen():
1799
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   157
            for i, window in increasing_windows(repo.changelog.count()-1, -1):
1800
414e81ae971f Removed now obsolete min/max check in walkchangerevs().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1799
diff changeset
   158
                for j in xrange(i - window, i + 1):
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   159
                    yield j, getchange(j)[3]
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   160
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   161
        for rev, changefiles in changerevgen():
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   162
            matches = filter(matchfn, changefiles)
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   163
            if matches:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   164
                fncache[rev] = matches
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   165
                wanted[rev] = 1
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   166
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   167
    def iterate():
1799
b942f5cfd326 Replaced fixed window size for walkchangerevs with an increasing one. Window
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1782
diff changeset
   168
        for i, window in increasing_windows(0, len(revs)):
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   169
            yield 'window', revs[0] < revs[-1], revs[-1]
1800
414e81ae971f Removed now obsolete min/max check in walkchangerevs().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1799
diff changeset
   170
            nrevs = [rev for rev in revs[i:i+window]
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   171
                     if rev in wanted]
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   172
            srevs = list(nrevs)
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   173
            srevs.sort()
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   174
            for rev in srevs:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   175
                fns = fncache.get(rev) or filter(matchfn, getchange(rev)[3])
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   176
                yield 'add', rev, fns
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   177
            for rev in nrevs:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   178
                yield 'iter', rev, None
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
   179
    return iterate(), getchange, matchfn
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
   180
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   181
revrangesep = ':'
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   182
2331
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   183
def revfix(repo, val, defval):
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   184
    '''turn user-level id of changeset into rev number.
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   185
    user-level id can be tag, changeset, rev number, or negative rev
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   186
    number relative to number of revs (-1 is tip, etc).'''
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   187
    if not val:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   188
        return defval
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   189
    try:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   190
        num = int(val)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   191
        if str(num) != val:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   192
            raise ValueError
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   193
        if num < 0:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   194
            num += repo.changelog.count()
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   195
        if num < 0:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   196
            num = 0
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   197
        elif num >= repo.changelog.count():
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   198
            raise ValueError
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   199
    except ValueError:
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   200
        try:
2331
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   201
            num = repo.changelog.rev(repo.lookup(val))
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   202
        except KeyError:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   203
            raise util.Abort(_('invalid revision identifier %s'), val)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   204
    return num
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   205
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   206
def revpair(ui, repo, revs):
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   207
    '''return pair of nodes, given list of revisions. second item can
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   208
    be None, meaning use working dir.'''
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   209
    if not revs:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   210
        return repo.dirstate.parents()[0], None
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   211
    end = None
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   212
    if len(revs) == 1:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   213
        start = revs[0]
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   214
        if revrangesep in start:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   215
            start, end = start.split(revrangesep, 1)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   216
            start = revfix(repo, start, 0)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   217
            end = revfix(repo, end, repo.changelog.count() - 1)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   218
        else:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   219
            start = revfix(repo, start, None)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   220
    elif len(revs) == 2:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   221
        if revrangesep in revs[0] or revrangesep in revs[1]:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   222
            raise util.Abort(_('too many revisions specified'))
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   223
        start = revfix(repo, revs[0], None)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   224
        end = revfix(repo, revs[1], None)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   225
    else:
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   226
        raise util.Abort(_('too many revisions specified'))
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   227
    if end is not None: end = repo.lookup(str(end))
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   228
    return repo.lookup(str(start)), end
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   229
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   230
def revrange(ui, repo, revs):
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   231
    """Yield revision as strings from a list of revision specifications."""
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   232
    seen = {}
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   233
    for spec in revs:
2579
0875cda033fd use __contains__, index or split instead of str.find
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2574
diff changeset
   234
        if revrangesep in spec:
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   235
            start, end = spec.split(revrangesep, 1)
2331
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   236
            start = revfix(repo, start, 0)
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   237
            end = revfix(repo, end, repo.changelog.count() - 1)
1066
ea878688221e Shortened commands.revrange() a little bit, added docstring.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1065
diff changeset
   238
            step = start > end and -1 or 1
ea878688221e Shortened commands.revrange() a little bit, added docstring.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1065
diff changeset
   239
            for rev in xrange(start, end+step, step):
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   240
                if rev in seen:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   241
                    continue
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   242
                seen[rev] = 1
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   243
                yield str(rev)
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   244
        else:
2331
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
   245
            rev = revfix(repo, spec, None)
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   246
            if rev in seen:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   247
                continue
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   248
            seen[rev] = 1
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   249
            yield str(rev)
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
   250
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   251
def make_filename(repo, pat, node,
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   252
                  total=None, seqno=None, revwidth=None, pathname=None):
632
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   253
    node_expander = {
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
   254
        'H': lambda: hex(node),
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   255
        'R': lambda: str(repo.changelog.rev(node)),
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
   256
        'h': lambda: short(node),
632
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   257
        }
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   258
    expander = {
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   259
        '%': lambda: '%',
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   260
        'b': lambda: os.path.basename(repo.root),
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   261
        }
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   262
727
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   263
    try:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   264
        if node:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   265
            expander.update(node_expander)
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   266
        if node and revwidth is not None:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   267
            expander['r'] = lambda: str(r.rev(node)).zfill(revwidth)
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   268
        if total is not None:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   269
            expander['N'] = lambda: str(total)
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   270
        if seqno is not None:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   271
            expander['n'] = lambda: str(seqno)
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   272
        if total is not None and seqno is not None:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   273
            expander['n'] = lambda:str(seqno).zfill(len(str(total)))
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   274
        if pathname is not None:
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   275
            expander['s'] = lambda: os.path.basename(pathname)
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   276
            expander['d'] = lambda: os.path.dirname(pathname) or '.'
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   277
            expander['p'] = lambda: pathname
632
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   278
727
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   279
        newname = []
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   280
        patlen = len(pat)
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   281
        i = 0
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   282
        while i < patlen:
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   283
            c = pat[i]
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   284
            if c == '%':
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   285
                i += 1
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   286
                c = pat[i]
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   287
                c = expander[c]()
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   288
            newname.append(c)
632
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   289
            i += 1
739
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   290
        return ''.join(newname)
727
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   291
    except KeyError, inst:
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
   292
        raise util.Abort(_("invalid format spec '%%%s' in output file name"),
727
acee766fcb79 Get commands to raise Abort instead of ui.warn(...),sys.exit(1).
Bryan O'Sullivan <bos@serpentine.com>
parents: 726
diff changeset
   293
                    inst.args[0])
632
8b8f710bb658 Provides output option to cat command
thananck@yahoo.com
parents: 630
diff changeset
   294
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   295
def make_file(repo, pat, node=None,
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   296
              total=None, seqno=None, revwidth=None, mode='wb', pathname=None):
739
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   297
    if not pat or pat == '-':
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
   298
        return 'w' in mode and sys.stdout or sys.stdin
739
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   299
    if hasattr(pat, 'write') and 'w' in mode:
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   300
        return pat
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   301
    if hasattr(pat, 'read') and 'r' in mode:
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   302
        return pat
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   303
    return open(make_filename(repo, pat, node, total, seqno, revwidth,
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   304
                              pathname),
739
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   305
                mode)
36edb39e8e8c Split make_file back out into make_filename and make_file.
Bryan O'Sullivan <bos@serpentine.com>
parents: 738
diff changeset
   306
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
   307
def write_bundle(cg, filename=None, compress=True):
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   308
    """Write a bundle file and return its filename.
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   309
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   310
    Existing files will not be overwritten.
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   311
    If no filename is specified, a temporary file is created.
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   312
    bz2 compression can be turned off.
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   313
    The bundle file will be deleted in case of errors.
1972
ce127cb4ee6e Documented behaviour of write_bundle regarding file handles.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1971
diff changeset
   314
    """
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   315
    class nocompress(object):
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   316
        def compress(self, x):
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   317
            return x
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   318
        def flush(self):
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   319
            return ""
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
   320
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   321
    fh = 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
   322
    cleanup = None
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   323
    try:
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
   324
        if filename:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   325
            if os.path.exists(filename):
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   326
                raise util.Abort(_("file '%s' already exists"), filename)
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   327
            fh = open(filename, "wb")
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   328
        else:
2165
d821918e3bee Use better names (hg-{usage}-{random}.{suffix}) for temporary files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2160
diff changeset
   329
            fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg")
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
   330
            fh = os.fdopen(fd, "wb")
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   331
        cleanup = filename
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   332
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   333
        if compress:
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   334
            fh.write("HG10")
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   335
            z = bz2.BZ2Compressor(9)
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   336
        else:
1980
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
   337
            fh.write("HG10UN")
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   338
            z = nocompress()
1981
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   339
        # parse the changegroup data, otherwise we will block
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   340
        # in case of sshrepo because we don't know the end of the stream
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   341
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   342
        # an empty chunkiter is the end of the changegroup
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   343
        empty = False
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   344
        while not empty:
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   345
            empty = True
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   346
            for chunk in changegroup.chunkiter(cg):
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   347
                empty = False
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   348
                fh.write(z.compress(changegroup.genchunk(chunk)))
736b6c96bbbc make incoming work via ssh (issue139); move chunk code into separate module.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1980
diff changeset
   349
            fh.write(z.compress(changegroup.closechunk()))
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   350
        fh.write(z.flush())
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
   351
        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
   352
        return filename
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
   353
    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
   354
        if fh is not 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
   355
            fh.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
   356
        if cleanup is not 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
   357
            os.unlink(cleanup)
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   358
1014
e37cd99fa909 Clean up argument passing for dodiff
mpm@selenic.com
parents: 989
diff changeset
   359
def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
1728
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
   360
           changes=None, text=False, opts={}):
1804
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   361
    if not node1:
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   362
        node1 = repo.dirstate.parents()[0]
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   363
    # reading the data for node1 early allows it to play nicely
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   364
    # with repo.changes and the revlog cache.
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   365
    change = repo.changelog.read(node1)
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   366
    mmap = repo.manifest.read(change[0])
c3f959c1c3ff refactor the dodiff optimization
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1803
diff changeset
   367
    date1 = util.datestr(change[2])
1803
06e7447c7302 speed up hg log --patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1801
diff changeset
   368
904
969647d5100a Add optional parameter for changed/added/del/unknown files to commands.dodiff
mason@suse.com
parents: 899
diff changeset
   369
    if not changes:
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   370
        changes = repo.changes(node1, node2, files, match=match)
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
   371
    modified, added, removed, deleted, unknown = changes
537
411e05b04ffa Propagate file list through dodiff
mpm@selenic.com
parents: 536
diff changeset
   372
    if files:
1626
f2b1df3dbcbb make the order of the arguments for filterfiles consistent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1625
diff changeset
   373
        modified, added, removed = map(lambda x: filterfiles(files, x),
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   374
                                       (modified, added, removed))
537
411e05b04ffa Propagate file list through dodiff
mpm@selenic.com
parents: 536
diff changeset
   375
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   376
    if not modified and not added and not removed:
537
411e05b04ffa Propagate file list through dodiff
mpm@selenic.com
parents: 536
diff changeset
   377
        return
411e05b04ffa Propagate file list through dodiff
mpm@selenic.com
parents: 536
diff changeset
   378
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   379
    if node2:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   380
        change = repo.changelog.read(node2)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   381
        mmap2 = repo.manifest.read(change[0])
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   382
        _date2 = util.datestr(change[2])
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   383
        def date2(f):
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   384
            return _date2
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   385
        def read(f):
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   386
            return repo.file(f).read(mmap2[f])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   387
    else:
2461
ff9ee834e3b6 tidy up mtime patch of andrea, get back half of performance loss.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2460
diff changeset
   388
        tz = util.makedate()[1]
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   389
        _date2 = util.datestr()
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   390
        def date2(f):
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   391
            try:
2461
ff9ee834e3b6 tidy up mtime patch of andrea, get back half of performance loss.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2460
diff changeset
   392
                return util.datestr((os.lstat(repo.wjoin(f)).st_mtime, tz))
2482
818ebebc4554 Fix hg diff regression
andrea@suse.de
parents: 2476
diff changeset
   393
            except OSError, err:
2461
ff9ee834e3b6 tidy up mtime patch of andrea, get back half of performance loss.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2460
diff changeset
   394
                if err.errno != errno.ENOENT: raise
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   395
                return _date2
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   396
        def read(f):
1648
80640ef93aec Process working files through encode filters in dodiff()
Petr Mazanec <petr.mazanec@tiscali.cz>
parents: 1637
diff changeset
   397
            return repo.wread(f)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   398
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
   399
    if ui.quiet:
8f8bb77d560e Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 395
diff changeset
   400
        r = None
8f8bb77d560e Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 395
diff changeset
   401
    else:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
   402
        hexfunc = ui.verbose and hex or short
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
   403
        r = [hexfunc(node) for node in [node1, node2] if node]
8f8bb77d560e Show revisions in diffs like CVS, based on a patch from Goffredo Baroncelli.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 395
diff changeset
   404
1637
3b1b44b917f4 Add new bdiff based unidiff generation.
mason@suse.com
parents: 1634
diff changeset
   405
    diffopts = ui.diffopts()
1728
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
   406
    showfunc = opts.get('show_function') or diffopts['showfunc']
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
   407
    ignorews = opts.get('ignore_all_space') or diffopts['ignorews']
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   408
    ignorewsamount = opts.get('ignore_space_change') or \
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   409
                     diffopts['ignorewsamount']
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   410
    ignoreblanklines = opts.get('ignore_blank_lines') or \
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   411
                     diffopts['ignoreblanklines']
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   412
    for f in modified:
275
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
   413
        to = None
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
   414
        if f in mmap:
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
   415
            to = repo.file(f).read(mmap[f])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   416
        tn = read(f)
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   417
        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   418
                               showfunc=showfunc, ignorews=ignorews,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   419
                               ignorewsamount=ignorewsamount,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   420
                               ignoreblanklines=ignoreblanklines))
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   421
    for f in added:
264
4c1d7072d5cd Attempt to make diff deal with null sources properly
mpm@selenic.com
parents: 262
diff changeset
   422
        to = None
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   423
        tn = read(f)
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   424
        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   425
                               showfunc=showfunc, ignorews=ignorews,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   426
                               ignorewsamount=ignorewsamount,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   427
                               ignoreblanklines=ignoreblanklines))
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
   428
    for f in removed:
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
   429
        to = repo.file(f).read(mmap[f])
264
4c1d7072d5cd Attempt to make diff deal with null sources properly
mpm@selenic.com
parents: 262
diff changeset
   430
        tn = None
2460
605e26a2e96e report correct mtime in the hg diff output
andrea@suse.de
parents: 2458
diff changeset
   431
        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   432
                               showfunc=showfunc, ignorews=ignorews,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   433
                               ignorewsamount=ignorewsamount,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
   434
                               ignoreblanklines=ignoreblanklines))
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
   435
1147
d32b91ebad5d Merge with TAH.
bos@serpentine.internal.keyresearch.com
parents: 1146 1133
diff changeset
   436
def trimuser(ui, name, rev, revcache):
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   437
    """trim the name of the user who committed a change"""
1147
d32b91ebad5d Merge with TAH.
bos@serpentine.internal.keyresearch.com
parents: 1146 1133
diff changeset
   438
    user = revcache.get(rev)
d32b91ebad5d Merge with TAH.
bos@serpentine.internal.keyresearch.com
parents: 1146 1133
diff changeset
   439
    if user is None:
d32b91ebad5d Merge with TAH.
bos@serpentine.internal.keyresearch.com
parents: 1146 1133
diff changeset
   440
        user = revcache[rev] = ui.shortuser(name)
d32b91ebad5d Merge with TAH.
bos@serpentine.internal.keyresearch.com
parents: 1146 1133
diff changeset
   441
    return user
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   442
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   443
class changeset_printer(object):
1909
37b9f80a5fbb add doc comments to template code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1908
diff changeset
   444
    '''show changeset information when templating not requested.'''
37b9f80a5fbb add doc comments to template code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1908
diff changeset
   445
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   446
    def __init__(self, ui, repo):
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   447
        self.ui = ui
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   448
        self.repo = repo
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   449
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   450
    def show(self, rev=0, changenode=None, brinfo=None):
1909
37b9f80a5fbb add doc comments to template code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1908
diff changeset
   451
        '''show a single changeset or file revision'''
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   452
        log = self.repo.changelog
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   453
        if changenode is None:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   454
            changenode = log.node(rev)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   455
        elif not rev:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   456
            rev = log.rev(changenode)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   457
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   458
        if self.ui.quiet:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   459
            self.ui.write("%d:%s\n" % (rev, short(changenode)))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   460
            return
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   461
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   462
        changes = log.read(changenode)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   463
        date = util.datestr(changes[2])
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   464
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   465
        parents = [(log.rev(p), self.ui.verbose and hex(p) or short(p))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   466
                   for p in log.parents(changenode)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   467
                   if self.ui.debugflag or p != nullid]
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   468
        if (not self.ui.debugflag and len(parents) == 1 and
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   469
            parents[0][0] == rev-1):
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   470
            parents = []
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   471
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   472
        if self.ui.verbose:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   473
            self.ui.write(_("changeset:   %d:%s\n") % (rev, hex(changenode)))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   474
        else:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   475
            self.ui.write(_("changeset:   %d:%s\n") % (rev, short(changenode)))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   476
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   477
        for tag in self.repo.nodetags(changenode):
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   478
            self.ui.status(_("tag:         %s\n") % tag)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   479
        for parent in parents:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   480
            self.ui.write(_("parent:      %d:%s\n") % parent)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   481
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   482
        if brinfo and changenode in brinfo:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   483
            br = brinfo[changenode]
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   484
            self.ui.write(_("branch:      %s\n") % " ".join(br))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   485
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   486
        self.ui.debug(_("manifest:    %d:%s\n") %
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   487
                      (self.repo.manifest.rev(changes[0]), hex(changes[0])))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   488
        self.ui.status(_("user:        %s\n") % changes[1])
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   489
        self.ui.status(_("date:        %s\n") % date)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   490
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   491
        if self.ui.debugflag:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   492
            files = self.repo.changes(log.parents(changenode)[0], changenode)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   493
            for key, value in zip([_("files:"), _("files+:"), _("files-:")],
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   494
                                  files):
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   495
                if value:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   496
                    self.ui.note("%-12s %s\n" % (key, " ".join(value)))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   497
        else:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   498
            self.ui.note(_("files:       %s\n") % " ".join(changes[3]))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   499
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   500
        description = changes[4].strip()
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   501
        if description:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   502
            if self.ui.verbose:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   503
                self.ui.status(_("description:\n"))
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   504
                self.ui.status(description)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   505
                self.ui.status("\n\n")
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   506
            else:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   507
                self.ui.status(_("summary:     %s\n") %
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   508
                               description.splitlines()[0])
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   509
        self.ui.status("\n")
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   510
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   511
def show_changeset(ui, repo, opts):
1909
37b9f80a5fbb add doc comments to template code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1908
diff changeset
   512
    '''show one changeset.  uses template or regular display.  caller
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
   513
    can pass in 'style' and 'template' options in opts.'''
1909
37b9f80a5fbb add doc comments to template code.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1908
diff changeset
   514
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   515
    tmpl = opts.get('template')
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   516
    if tmpl:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   517
        tmpl = templater.parsestring(tmpl, quoted=False)
778
d09975474928 Shorten hashes displayed in log
mpm@selenic.com
parents: 773
diff changeset
   518
    else:
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   519
        tmpl = ui.config('ui', 'logtemplate')
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   520
        if tmpl: tmpl = templater.parsestring(tmpl)
1914
a5bf0030df5f make --style=compact look for map-cmdline.compact.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1913
diff changeset
   521
    mapfile = opts.get('style') or ui.config('ui', 'style')
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   522
    if tmpl or mapfile:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   523
        if mapfile:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   524
            if not os.path.isfile(mapfile):
1914
a5bf0030df5f make --style=compact look for map-cmdline.compact.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1913
diff changeset
   525
                mapname = templater.templatepath('map-cmdline.' + mapfile)
a5bf0030df5f make --style=compact look for map-cmdline.compact.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1913
diff changeset
   526
                if not mapname: mapname = templater.templatepath(mapfile)
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   527
                if mapname: mapfile = mapname
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   528
        try:
2189
e3eba577a0ae move changeset_templater into templater module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2184
diff changeset
   529
            t = templater.changeset_templater(ui, repo, mapfile)
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   530
        except SyntaxError, inst:
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   531
            raise util.Abort(inst.args[0])
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   532
        if tmpl: t.use_template(tmpl)
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   533
        return t
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
   534
    return changeset_printer(ui, repo)
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
   535
470
0ab093b473c5 Fix up version module name and command conflict
mpm@selenic.com
parents: 468
diff changeset
   536
def show_version(ui):
423
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   537
    """output version and copyright information"""
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
   538
    ui.write(_("Mercurial Distributed SCM (version %s)\n")
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   539
             % version.get_version())
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
   540
    ui.status(_(
423
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   541
        "\nCopyright (C) 2005 Matt Mackall <mpm@selenic.com>\n"
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   542
        "This is free software; see the source for copying conditions. "
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   543
        "There is NO\nwarranty; "
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   544
        "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\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
   545
    ))
423
25afb21d97ba Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 396
diff changeset
   546
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   547
def help_(ui, name=None, with_version=False):
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   548
    """show help for a command, extension, or list of commands
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   549
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   550
    With no arguments, print a list of commands and short help.
2600
c4325f0a9b91 clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2598
diff changeset
   551
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   552
    Given a command name, print help for that command.
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   554
    Given an extension name, print help for that extension, and the
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   555
    commands it provides."""
1052
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   556
    option_lists = []
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   557
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   558
    def helpcmd(name):
1049
160a68cd393f Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1048
diff changeset
   559
        if with_version:
160a68cd393f Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1048
diff changeset
   560
            show_version(ui)
160a68cd393f Allow --help and --version being used together.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1048
diff changeset
   561
            ui.write('\n')
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   562
        aliases, i = findcmd(name)
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   563
        # synopsis
848
221628fe9b62 Always show short help when an unknown command is given.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 846
diff changeset
   564
        ui.write("%s\n\n" % i[2])
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
   565
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   566
        # description
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   567
        doc = i[0].__doc__
1710
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   568
        if not doc:
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   569
            doc = _("(No help text available)")
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   570
        if ui.quiet:
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   571
            doc = doc.splitlines(0)[0]
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   572
        ui.write("%s\n" % doc.rstrip())
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   573
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   574
        if not ui.quiet:
1052
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   575
            # aliases
1517
b582dbc16165 Canonicalize command when using aliases or prefix matching.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1507
diff changeset
   576
            if len(aliases) > 1:
b582dbc16165 Canonicalize command when using aliases or prefix matching.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1507
diff changeset
   577
                ui.write(_("\naliases: %s\n") % ', '.join(aliases[1:]))
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   578
1052
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   579
            # options
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   580
            if i[1]:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   581
                option_lists.append(("options", i[1]))
2600
c4325f0a9b91 clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2598
diff changeset
   582
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   583
    def helplist(select=None):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   584
        h = {}
844
5a717cfa7406 'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents: 843
diff changeset
   585
        cmds = {}
479
7293cb91bf2a Cleaned up command alias handling in help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 477
diff changeset
   586
        for c, e in table.items():
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   587
            f = c.split("|", 1)[0]
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   588
            if select and not select(f):
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   589
                continue
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   590
            if name == "shortlist" and not f.startswith("^"):
479
7293cb91bf2a Cleaned up command alias handling in help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 477
diff changeset
   591
                continue
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   592
            f = f.lstrip("^")
593
ca3c499e94c6 Shorten help
mpm@selenic.com
parents: 592
diff changeset
   593
            if not ui.debugflag and f.startswith("debug"):
ca3c499e94c6 Shorten help
mpm@selenic.com
parents: 592
diff changeset
   594
                continue
1710
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   595
            doc = e[0].__doc__
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   596
            if not doc:
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   597
                doc = _("(No help text available)")
c65113f3627a Show "(No help text available)" for commands without doc string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1661
diff changeset
   598
            h[f] = doc.splitlines(0)[0].rstrip()
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   599
            cmds[f] = c.lstrip("^")
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   600
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   601
        fns = h.keys()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   602
        fns.sort()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   603
        m = max(map(len, fns))
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   604
        for f in fns:
844
5a717cfa7406 'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents: 843
diff changeset
   605
            if ui.verbose:
5a717cfa7406 'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents: 843
diff changeset
   606
                commands = cmds[f].replace("|",", ")
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   607
                ui.write(" %s:\n      %s\n"%(commands, h[f]))
844
5a717cfa7406 'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents: 843
diff changeset
   608
            else:
5a717cfa7406 'hg help -v' mentions the alias of the commands
kreijack@inwind.REMOVEME.it
parents: 843
diff changeset
   609
                ui.write(' %-*s   %s\n' % (m, f, h[f]))
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   610
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   611
    def helpext(name):
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   612
        try:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   613
            mod = findext(name)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   614
        except KeyError:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   615
            raise UnknownCommand(name)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   616
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   617
        doc = (mod.__doc__ or _('No help text available')).splitlines(0)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   618
        ui.write(_('%s extension - %s\n') % (name.split('.')[-1], doc[0]))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   619
        for d in doc[1:]:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   620
            ui.write(d, '\n')
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   621
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   622
        ui.status('\n')
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   623
        if ui.verbose:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   624
            ui.status(_('list of commands:\n\n'))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   625
        else:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   626
            ui.status(_('list of commands (use "hg help -v %s" '
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   627
                        'to show aliases and global options):\n\n') % name)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   628
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   629
        modcmds = dict.fromkeys([c.split('|', 1)[0] for c in mod.cmdtable])
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   630
        helplist(modcmds.has_key)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   631
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   632
    if name and name != 'shortlist':
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   633
        try:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   634
            helpcmd(name)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   635
        except UnknownCommand:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   636
            helpext(name)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   637
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   638
    else:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   639
        # program name
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   640
        if ui.verbose or with_version:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   641
            show_version(ui)
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   642
        else:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   643
            ui.status(_("Mercurial Distributed SCM\n"))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   644
        ui.status('\n')
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   645
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   646
        # list of commands
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   647
        if name == "shortlist":
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   648
            ui.status(_('basic commands (use "hg help" '
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   649
                        'for the full list or option "-v" for details):\n\n'))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   650
        elif ui.verbose:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   651
            ui.status(_('list of commands:\n\n'))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   652
        else:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   653
            ui.status(_('list of commands (use "hg help -v" '
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   654
                        'to show aliases and global options):\n\n'))
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   655
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   656
        helplist()
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
   657
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   658
    # global options
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   659
    if ui.verbose:
1052
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   660
        option_lists.append(("global options", globalopts))
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   661
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   662
    # list all option lists
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   663
    opt_output = []
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   664
    for title, options in option_lists:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   665
        opt_output.append(("\n%s:\n" % title, None))
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   666
        for shortopt, longopt, default, desc in options:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   667
            opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt,
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   668
                                          longopt and " --%s" % longopt),
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   669
                               "%s%s" % (desc,
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
   670
                                         default
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
   671
                                         and _(" (default: %s)") % default
1052
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   672
                                         or "")))
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   673
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   674
    if opt_output:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   675
        opts_len = max([len(line[0]) for line in opt_output if line[1]])
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   676
        for first, second in opt_output:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   677
            if second:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   678
                ui.write(" %-*s  %s\n" % (opts_len, first, second))
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   679
            else:
d8279ca39dc7 Adjust display and alignment of command options to match global options.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1051
diff changeset
   680
                ui.write("%s\n" % first)
849
8933ef744325 Further help improvements:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 848
diff changeset
   681
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
   682
# Commands start here, listed alphabetically
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   683
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
   684
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
   685
    """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
   686
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   687
    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
   688
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   689
    The files will be added to the repository at the next commit.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   690
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
   691
    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
   692
    """
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   693
724
1c0c413cccdd Get add and locate to use new repo and dirstate walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 723
diff changeset
   694
    names = []
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
   695
    for src, abs, rel, exact in walk(repo, pats, opts):
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
   696
        if exact:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   697
            if ui.verbose:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   698
                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
   699
            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
   700
        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
   701
            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
   702
            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
   703
    if not opts.get('dry_run'):
2411
734df6333ca4 add: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2410
diff changeset
   704
        repo.add(names)
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
   705
766
b444a7e053f1 Get addremove to use new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 764
diff changeset
   706
def addremove(ui, repo, *pats, **opts):
2181
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   707
    """add all new files, delete all missing files (DEPRECATED)
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   708
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   709
    (DEPRECATED)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   710
    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
   711
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   712
    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
   713
    with add, these changes take effect at the next commit.
2181
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   714
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   715
    This command is now deprecated and will be removed in a future
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   716
    release. Please use add and remove --after instead.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   717
    """
2181
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   718
    ui.warn(_('(the addremove command is deprecated; use add and remove '
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
   719
              '--after instead)\n'))
1712
21dcf38e5d7d Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents: 1710
diff changeset
   720
    return addremove_lock(ui, repo, pats, opts)
21dcf38e5d7d Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents: 1710
diff changeset
   721
21dcf38e5d7d Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents: 1710
diff changeset
   722
def addremove_lock(ui, repo, pats, opts, wlock=None):
809
d0fb9efa2b2d Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 783
diff changeset
   723
    add, remove = [], []
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
   724
    for src, abs, rel, exact in walk(repo, pats, opts):
880
409a9a7b0da2 addremove was not correctly finding removed files when given
mason@suse.com
parents: 879
diff changeset
   725
        if src == 'f' and repo.dirstate.state(abs) == '?':
409a9a7b0da2 addremove was not correctly finding removed files when given
mason@suse.com
parents: 879
diff changeset
   726
            add.append(abs)
1255
e825dfea3823 Get all commands that operate on files to honour --verbose and --quiet.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1254
diff changeset
   727
            if ui.verbose or not exact:
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
   728
                ui.status(_('adding %s\n') % ((pats and rel) or abs))
880
409a9a7b0da2 addremove was not correctly finding removed files when given
mason@suse.com
parents: 879
diff changeset
   729
        if repo.dirstate.state(abs) != 'r' and not os.path.exists(rel):
809
d0fb9efa2b2d Fix performance regression in addremove command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 783
diff changeset
   730
            remove.append(abs)
1255
e825dfea3823 Get all commands that operate on files to honour --verbose and --quiet.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1254
diff changeset
   731
            if ui.verbose or not exact:
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
   732
                ui.status(_('removing %s\n') % ((pats and rel) or abs))
2412
e5cb39577b9f addremove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2411
diff changeset
   733
    if not opts.get('dry_run'):
e5cb39577b9f addremove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2411
diff changeset
   734
        repo.add(add, wlock=wlock)
e5cb39577b9f addremove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2411
diff changeset
   735
        repo.remove(remove, wlock=wlock)
219
8ff4532376a4 hg checkout: refuse to checkout if there are outstanding changes
mpm@selenic.com
parents: 214
diff changeset
   736
733
1966c553f652 Convert annotate over to walk interface.
Bryan O'Sullivan <bos@serpentine.com>
parents: 732
diff changeset
   737
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
   738
    """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
   739
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   740
    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
   741
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   742
    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
   743
    place.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   744
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   745
    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
   746
    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
   747
    anyway, probably with undesirable results.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   748
    """
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   749
    def getnode(rev):
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
   750
        return short(repo.changelog.node(rev))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   751
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
   752
    ucache = {}
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   753
    def getname(rev):
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   754
        try:
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   755
            return ucache[rev]
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   756
        except:
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   757
            u = trimuser(ui, repo.changectx(rev).user(), rev, ucache)
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   758
            ucache[rev] = u
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   759
            return u
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
   760
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   761
    dcache = {}
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   762
    def getdate(rev):
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   763
        datestr = dcache.get(rev)
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   764
        if datestr is None:
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   765
            datestr = dcache[rev] = util.datestr(repo.changectx(rev).date())
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
   766
        return datestr
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   767
744
3d88f6dd1ed4 Handle empty file list for annotate
mpm@selenic.com
parents: 743
diff changeset
   768
    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
   769
        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
   770
1523
fdda77dcf601 Fix line wrapping
Matt Mackall <mpm@selenic.com>
parents: 1522
diff changeset
   771
    opmap = [['user', getname], ['number', str], ['changeset', getnode],
fdda77dcf601 Fix line wrapping
Matt Mackall <mpm@selenic.com>
parents: 1522
diff changeset
   772
             ['date', getdate]]
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
   773
    if not opts['user'] and not opts['changeset'] and not opts['date']:
714
29fcd195e056 Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 712
diff changeset
   774
        opts['number'] = 1
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   775
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   776
    ctx = repo.changectx(opts['rev'] or repo.dirstate.parents()[0])
1016
836667830fee Teach annotate about binary files
mpm@selenic.com
parents: 1015
diff changeset
   777
2568
82e3b2966862 Fix annotate breakage
Matt Mackall <mpm@selenic.com>
parents: 2567
diff changeset
   778
    for src, abs, rel, exact in walk(repo, pats, opts, node=ctx.node()):
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   779
        fctx = ctx.filectx(abs)
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   780
        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
   781
            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
   782
            continue
836667830fee Teach annotate about binary files
mpm@selenic.com
parents: 1015
diff changeset
   783
2566
d8560b458f76 Convert hg annotate to context api
Matt Mackall <mpm@selenic.com>
parents: 2565
diff changeset
   784
        lines = fctx.annotate()
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   785
        pieces = []
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   786
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   787
        for o, f in opmap:
714
29fcd195e056 Some cleanups in commands.annotate().
Thomas Arendsen Hein <thomas@intevation.de>
parents: 712
diff changeset
   788
            if opts[o]:
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   789
                l = [f(n) for n, dummy in lines]
771
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   790
                if l:
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   791
                    m = max(map(len, l))
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   792
                    pieces.append(["%*s" % (m, x) for x in l])
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   793
771
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   794
        if pieces:
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   795
            for p, l in zip(zip(*pieces), lines):
0de223012086 Fixes for annotate
mpm@selenic.com
parents: 770
diff changeset
   796
                ui.write("%s: %s" % (" ".join(p), l[1]))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
   797
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   798
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
   799
    '''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
   800
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   801
    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
   802
    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
   803
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   804
    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
   805
    types are:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   806
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   807
    "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
   808
    "tar": tar archive, uncompressed
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   809
    "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
   810
    "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
   811
    "uzip": zip archive, uncompressed
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   812
    "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
   813
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   814
    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
   815
    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
   816
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   817
    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
   818
    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
   819
    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
   820
    '''
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   821
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   822
    if opts['rev']:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   823
        node = repo.lookup(opts['rev'])
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   824
    else:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   825
        node, p2 = repo.dirstate.parents()
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   826
        if p2 != nullid:
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   827
            raise util.Abort(_('uncommitted merge - please provide a '
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   828
                               'specific revision'))
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   829
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   830
    dest = 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
   831
    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
   832
        raise util.Abort(_('repository root cannot be destination'))
2160
858df1f354c1 Cleanup archive command: Don't overwrite gettext, quoting in cmd table entry.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2159
diff changeset
   833
    dummy, matchfn, dummy = 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
   834
    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
   835
    prefix = opts['prefix']
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   836
    if dest == '-':
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   837
        if kind == 'files':
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   838
            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
   839
        dest = sys.stdout
0f7e4a39d9af archive: make "hg archive -t XXX -" to write to stdout
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2473
diff changeset
   840
        if not prefix: prefix = os.path.basename(repo.root) + '-%h'
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
   841
    prefix = 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
   842
    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
   843
                     matchfn, prefix)
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
   844
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   845
def backout(ui, repo, rev, **opts):
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   846
    '''reverse effect of earlier changeset
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   847
2254
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   848
    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
   849
    changeset is a child of the backed out changeset.
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   850
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   851
    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
   852
    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
   853
    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
   854
    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
   855
    with another head.
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   856
827fcfe88b14 backout command: better help.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2245
diff changeset
   857
    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
   858
    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
   859
    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
   860
    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
   861
    merge.'''
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   862
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   863
    bail_if_changed(repo)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   864
    op1, op2 = repo.dirstate.parents()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   865
    if op2 != nullid:
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   866
        raise util.Abort(_('outstanding uncommitted merge'))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   867
    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
   868
    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
   869
    if p1 == nullid:
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   870
        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
   871
    if p2 != nullid:
2614
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   872
        if not opts['parent']:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   873
            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
   874
                               '--parent'))
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   875
        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
   876
        if p not in (p1, p2):
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   877
            raise util.Abort(_('%s is not a parent of %s' %
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   878
                               (short(p), short(node))))
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   879
        parent = p
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   880
    else:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   881
        if opts['parent']:
8ba1c31f6864 backout: allow backout of merge changeset with --parent option.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
   882
            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
   883
        parent = p1
2175
b2ae81a7df29 Make hg update more verbose by default (issue12)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2167
diff changeset
   884
    repo.update(node, force=True, show_stats=False)
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   885
    revert_opts = opts.copy()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   886
    revert_opts['rev'] = hex(parent)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   887
    revert(ui, repo, **revert_opts)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   888
    commit_opts = opts.copy()
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   889
    commit_opts['addremove'] = False
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
   890
    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
   891
        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
   892
        commit_opts['force_editor'] = True
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   893
    commit(ui, repo, **commit_opts)
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   894
    def nice(node):
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   895
        return '%d:%s' % (repo.changelog.rev(node), short(node))
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   896
    ui.status(_('changeset %s backs out changeset %s\n') %
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   897
              (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
   898
    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
   899
        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
   900
            ui.status(_('merging with changeset %s\n') % nice(op1))
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   901
            doupdate(ui, repo, hex(op1), **opts)
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   902
        else:
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   903
            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
   904
                        'do not forget to merge\n'))
9c660e691e90 print message after backout that tells that backout adds new head.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2482
diff changeset
   905
            ui.status(_('(use "backout -m" if you want to auto-merge)\n'))
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
   906
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
   907
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
   908
    """create a changegroup file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   909
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   910
    Generate a compressed changegroup file collecting all changesets
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   911
    not found in the other repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   912
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   913
    This file can then be transferred using conventional means and
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   914
    applied to another repository with the unbundle command. This is
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   915
    useful when native push and pull are not available or when
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   916
    exporting an entire repository is undesirable. The standard file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   917
    extension is ".hg".
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   918
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   919
    Unlike import/export, this exactly preserves all changeset
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   920
    contents including permissions, rename data, and revision history.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   921
    """
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
   922
    dest = ui.expandpath(dest or 'default-push', dest or 'default')
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
   923
    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
   924
    o = repo.findoutgoing(other, force=opts['force'])
1736
50de0887bbcd add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1734
diff changeset
   925
    cg = repo.changegroup(o, 'bundle')
1943
8198c60f7914 refactor the bundle writing code, since we will reuse it later
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1940
diff changeset
   926
    write_bundle(cg, fname)
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
   927
1254
e6560042b7b8 Switch cat command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1253
diff changeset
   928
def cat(ui, repo, file1, *pats, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   929
    """output the latest or given revisions of files
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   930
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   931
    Print the specified files as they were at the given revision.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   932
    If no revision is given then the tip is used.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   933
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   934
    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
   935
    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
   936
    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
   937
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   938
    %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
   939
    %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
   940
    %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
   941
    """
2565
7f78ca2c7977 convert hg cat to new context api
Matt Mackall <mpm@selenic.com>
parents: 2562
diff changeset
   942
    ctx = repo.changectx(opts['rev'] or -1)
7f78ca2c7977 convert hg cat to new context api
Matt Mackall <mpm@selenic.com>
parents: 2562
diff changeset
   943
    for src, abs, rel, exact in walk(repo, (file1,) + pats, opts, ctx.node()):
7f78ca2c7977 convert hg cat to new context api
Matt Mackall <mpm@selenic.com>
parents: 2562
diff changeset
   944
        fp = make_file(repo, opts['output'], ctx.node(), pathname=abs)
7f78ca2c7977 convert hg cat to new context api
Matt Mackall <mpm@selenic.com>
parents: 2562
diff changeset
   945
        fp.write(ctx.filectx(abs).data())
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
   946
698
df78d8ccac4c Use python function instead of external 'cp' command when cloning repos.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 697
diff changeset
   947
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
   948
    """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
   949
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   950
    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
   951
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   952
    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
   953
    basename of the source.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   954
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   955
    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
   956
    .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
   957
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   958
    For efficiency, hardlinks are used for cloning whenever the source
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   959
    and destination are on the same filesystem.  Some filesystems,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   960
    such as AFS, implement hardlinking incorrectly, but do not report
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   961
    errors.  In these cases, use the --pull option to avoid
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   962
    hardlinking.
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
   963
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
   964
    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
   965
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
   966
    It is possible to specify an ssh:// URL as the destination, but no
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
   967
    .hg/hgrc will be created on the remote side. Look at the help text
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
   968
    for the pull command for important details about ssh:// URLs.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   969
    """
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
   970
    ui.setconfig_remoteopts(**opts)
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   971
    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
   972
             pull=opts['pull'],
2613
479e26afa10f clone: do not make streaming default. add --stream option instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2601
diff changeset
   973
             stream=opts['stream'],
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   974
             rev=opts['rev'],
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2590
diff changeset
   975
             update=not opts['noupdate'])
515
03f27b1381f9 Whitespace cleanups
mpm@selenic.com
parents: 513
diff changeset
   976
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
   977
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
   978
    """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
   979
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   980
    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
   981
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   982
    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
   983
    will be committed.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
   984
1996
4c70b10f0418 Don't mention deprecated HGEDITOR variable in the help text of commit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1995
diff changeset
   985
    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
   986
    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
   987
    """
1443
3a0b69ea5708 Remove deprecated commit -t option
Matt Mackall <mpm@selenic.com>
parents: 1440
diff changeset
   988
    message = opts['message']
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   989
    logfile = opts['logfile']
1319
5a15df632e6a Fix behaviour of commit.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1318
diff changeset
   990
5a15df632e6a Fix behaviour of commit.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1318
diff changeset
   991
    if message and logfile:
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
   992
        raise util.Abort(_('options --message and --logfile are mutually '
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
   993
                           'exclusive'))
762
312b4a10d862 Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 761
diff changeset
   994
    if not message and logfile:
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
   995
        try:
899
aa5b726e9619 Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents: 898
diff changeset
   996
            if logfile == '-':
aa5b726e9619 Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents: 898
diff changeset
   997
                message = sys.stdin.read()
aa5b726e9619 Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents: 898
diff changeset
   998
            else:
aa5b726e9619 Add '-' support to the commit logfile option to read message from stdin.
mark.williamson@cl.cam.ac.uk
parents: 898
diff changeset
   999
                message = open(logfile).read()
1319
5a15df632e6a Fix behaviour of commit.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1318
diff changeset
  1000
        except IOError, inst:
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
  1001
            raise util.Abort(_("can't read commit message '%s': %s") %
1319
5a15df632e6a Fix behaviour of commit.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1318
diff changeset
  1002
                             (logfile, inst.strerror))
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
  1003
354
e3667e3a18ac hg commit: add -A flag
mpm@selenic.com
parents: 353
diff changeset
  1004
    if opts['addremove']:
2181
690da72b0b16 deprecate addremove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2179
diff changeset
  1005
        addremove_lock(ui, 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
  1006
    fns, match, anypats = matchpats(repo, pats, opts)
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
  1007
    if pats:
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1008
        modified, added, removed, deleted, unknown = (
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
  1009
            repo.changes(files=fns, match=match))
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1010
        files = modified + added + removed
813
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
  1011
    else:
80fd2958235a Adapt commit to use file matching code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 812
diff changeset
  1012
        files = []
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  1013
    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
  1014
        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
  1015
                    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
  1016
    except ValueError, inst:
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  1017
        raise util.Abort(str(inst))
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  1018
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1019
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
  1020
    # called with the repo lock held
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1021
    cwd = repo.getcwd()
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1022
    errors = 0
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1023
    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
  1024
    targets = {}
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
  1025
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
  1026
    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
  1027
        reasons = {'?': _('is not managed'),
1634
f49f602fae92 copy & rename can ignore removed source files
Robin Farine <robin.farine@terminus.org>
parents: 1633
diff changeset
  1028
                   'a': _('has been marked for add'),
f49f602fae92 copy & rename can ignore removed source files
Robin Farine <robin.farine@terminus.org>
parents: 1633
diff changeset
  1029
                   'r': _('has been marked for remove')}
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1030
        state = repo.dirstate.state(abs)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1031
        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
  1032
        if reason:
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1033
            if state == 'a':
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1034
                origsrc = repo.dirstate.copied(abs)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1035
                if origsrc is not None:
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1036
                    return origsrc
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1037
            if exact:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1038
                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
  1039
        else:
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1040
            return abs
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1041
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1042
    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
  1043
        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
  1044
        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
  1045
        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
  1046
        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
  1047
            ui.warn(_('%s: not overwriting - %s collides with %s\n') %
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
  1048
                    (reltarget, abssrc, prevsrc))
faf46d810a85 avoid to copy more than one file to the same destination file
Robin Farine <robin.farine@terminus.org>
parents: 1513
diff changeset
  1049
            return
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1050
        if (not opts['after'] and os.path.exists(reltarget) or
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1051
            opts['after'] and repo.dirstate.state(abstarget) not in '?r'):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1052
            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
  1053
                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
  1054
                        reltarget)
5c3b93b244aa copy & rename don't overwrite unless --force is specified
Robin Farine <robin.farine@terminus.org>
parents: 1512
diff changeset
  1055
                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
  1056
            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
  1057
                os.unlink(reltarget)
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1058
        if opts['after']:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1059
            if not os.path.exists(reltarget):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1060
                return
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1061
        else:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1062
            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
  1063
            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
  1064
                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
  1065
            try:
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1066
                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
  1067
                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
  1068
                    repo.undelete([abstarget], wlock)
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1069
                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
  1070
                    if not opts.get('dry_run'):
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  1071
                        shutil.copyfile(relsrc, reltarget)
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  1072
                        shutil.copymode(relsrc, reltarget)
1822
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1073
                    restore = False
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1074
                finally:
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1075
                    if restore:
64df4220b349 copy/rename to a removed destination file
Robin Farine <robin.farine@terminus.org>
parents: 1812
diff changeset
  1076
                        repo.remove([abstarget], wlock)
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  1077
            except shutil.Error, inst:
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  1078
                raise util.Abort(str(inst))
1249
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
  1079
            except IOError, inst:
a5355fa5e33a Fix up copy command to behave more like regular "cp".
Bryan O'Sullivan <bos@serpentine.com>
parents: 1247
diff changeset
  1080
                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
  1081
                    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
  1082
                else:
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1083
                    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
  1084
                            (relsrc, inst.strerror))
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1085
                    errors += 1
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1086
                    return
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1087
        if ui.verbose or not exact:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1088
            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
  1089
        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
  1090
        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
  1091
            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
  1092
        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
  1093
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1094
    def targetpathfn(pat, dest, srcs):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1095
        if os.path.isdir(pat):
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1096
            abspfx = util.canonpath(repo.root, cwd, pat)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1097
            if destdirexists:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1098
                striplen = len(os.path.split(abspfx)[0])
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1099
            else:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1100
                striplen = len(abspfx)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1101
            if striplen:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1102
                striplen += len(os.sep)
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1103
            res = lambda p: os.path.join(dest, p[striplen:])
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1104
        elif destdirexists:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1105
            res = lambda p: os.path.join(dest, os.path.basename(p))
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1106
        else:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1107
            res = lambda p: dest
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1108
        return res
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1109
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1110
    def targetpathafterfn(pat, dest, srcs):
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1111
        if util.patkind(pat, None)[0]:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1112
            # a mercurial pattern
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1113
            res = lambda p: os.path.join(dest, os.path.basename(p))
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1114
        else:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1115
            abspfx = util.canonpath(repo.root, cwd, pat)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1116
            if len(abspfx) < len(srcs[0][0]):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1117
                # A directory. Either the target path contains the last
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1118
                # component of the source path or it does not.
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1119
                def evalpath(striplen):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1120
                    score = 0
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1121
                    for s in srcs:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1122
                        t = os.path.join(dest, s[0][striplen:])
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1123
                        if os.path.exists(t):
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1124
                            score += 1
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1125
                    return score
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1126
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1127
                striplen = len(abspfx)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1128
                if striplen:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1129
                    striplen += len(os.sep)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1130
                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
  1131
                    score = evalpath(striplen)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1132
                    striplen1 = len(os.path.split(abspfx)[0])
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1133
                    if striplen1:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1134
                        striplen1 += len(os.sep)
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1135
                    if evalpath(striplen1) > score:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1136
                        striplen = striplen1
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1137
                res = lambda p: os.path.join(dest, p[striplen:])
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1138
            else:
1633
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1139
                # a file
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1140
                if destdirexists:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1141
                    res = lambda p: os.path.join(dest, os.path.basename(p))
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1142
                else:
94c179a92f4a copy/rename '.' or '..' correctly
Robin Farine <robin.farine@terminus.org>
parents: 1626
diff changeset
  1143
                    res = lambda p: dest
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1144
        return res
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1145
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1146
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1147
    pats = list(pats)
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1148
    if not pats:
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1149
        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
  1150
    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
  1151
        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
  1152
    dest = pats.pop()
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1153
    destdirexists = os.path.isdir(dest)
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1154
    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
  1155
        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
  1156
                         'existing directory'))
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1157
    if opts['after']:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1158
        tfn = targetpathafterfn
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1159
    else:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1160
        tfn = targetpathfn
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1161
    copylist = []
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1162
    for pat in pats:
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1163
        srcs = []
1512
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1164
        for tag, abssrc, relsrc, exact in walk(repo, [pat], opts):
1747
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1165
            origsrc = okaytocopy(abssrc, relsrc, exact)
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1166
            if origsrc:
91c56c427171 transitive copy/rename
Robin Farine <robin.farine@terminus.org>
parents: 1743
diff changeset
  1167
                srcs.append((origsrc, abssrc, relsrc, exact))
1565
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1168
        if not srcs:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1169
            continue
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1170
        copylist.append((tfn(pat, dest, srcs), srcs))
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1171
    if not copylist:
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1172
        raise util.Abort(_('no files to copy'))
4bcbc126b80b fix rename --after
Robin Farine <robin.farine@terminus.org>
parents: 1561
diff changeset
  1173
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  1174
    for targetpath, srcs in copylist:
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  1175
        for origsrc, abssrc, relsrc, exact in srcs:
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  1176
            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
  1177
53ad6ee6ede4 generalize copy/rename to handle more than one source directory
Robin Farine <robin.farine@terminus.org>
parents: 1507
diff changeset
  1178
    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
  1179
        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
  1180
    return errors, copied
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  1181
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  1182
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
  1183
    """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
  1184
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1185
    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
  1186
    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
  1187
    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
  1188
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1189
    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
  1190
    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
  1191
    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
  1192
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1193
    This command takes effect in the next commit.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1194
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1195
    NOTE: This command should be treated as experimental. While it
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1196
    should properly record copied files, this information is not yet
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1197
    fully used by merge, nor fully reported by log.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1198
    """
2016
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1199
    wlock = repo.wlock(0)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  1200
    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
  1201
    return errs
363
ae96b7e1318d Add hg copy
mpm@selenic.com
parents: 355
diff changeset
  1202
1262
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
  1203
def debugancestor(ui, index, rev1, rev2):
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
  1204
    """find the ancestor revision of two revisions in a given index"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1205
    r = revlog.revlog(util.opener(os.getcwd(), audit=False), index, "", 0)
1262
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
  1206
    a = r.ancestor(r.lookup(rev1), r.lookup(rev2))
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
  1207
    ui.write("%d:%s\n" % (r.rev(a), hex(a)))
325c07fd2ebd Add debugancestor command
mpm@selenic.com
parents: 1257
diff changeset
  1208
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
  1209
def debugcomplete(ui, cmd='', **opts):
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  1210
    """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
  1211
5e7aff1b6ae1 add --options to debugcomplete and change bash_completion to use it
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2033
diff changeset
  1212
    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
  1213
        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
  1214
        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
  1215
        if cmd:
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  1216
            aliases, entry = findcmd(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
  1217
            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
  1218
        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
  1219
            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
  1220
                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
  1221
                    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
  1222
                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
  1223
        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
  1224
        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
  1225
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  1226
    clist = findpossible(cmd).keys()
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  1227
    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
  1228
    ui.write("%s\n" % "\n".join(clist))
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  1229
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  1230
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
  1231
    """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
  1232
    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
  1233
        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
  1234
    else:
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  1235
        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
  1236
    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
  1237
    n = change[0]
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  1238
    files = repo.manifest.readflags(n)
1760
13f8e068d13c fix typo in debugrebuildstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1755
diff changeset
  1239
    wlock = repo.wlock()
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  1240
    repo.dirstate.rebuild(rev, files.iteritems())
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  1241
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1242
def debugcheckstate(ui, repo):
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1243
    """validate the correctness of the current dirstate"""
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1244
    parent1, parent2 = repo.dirstate.parents()
555
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
  1245
    repo.dirstate.read()
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
  1246
    dc = repo.dirstate.map
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1247
    keys = dc.keys()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1248
    keys.sort()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1249
    m1n = repo.changelog.read(parent1)[0]
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1250
    m2n = repo.changelog.read(parent2)[0]
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1251
    m1 = repo.manifest.read(m1n)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1252
    m2 = repo.manifest.read(m2n)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1253
    errors = 0
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1254
    for f in dc:
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1255
        state = repo.dirstate.state(f)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1256
        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
  1257
            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
  1258
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1259
        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
  1260
            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
  1261
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1262
        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
  1263
            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
  1264
                    (f, state))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1265
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1266
    for f in m1:
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1267
        state = repo.dirstate.state(f)
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1268
        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
  1269
            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
  1270
            errors += 1
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1271
    if errors:
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  1272
        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
  1273
        raise util.Abort(error)
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1274
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1275
def debugconfig(ui, repo, *values):
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1276
    """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
  1277
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1278
    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
  1279
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1280
    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
  1281
    that config item.
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1282
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1283
    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
  1284
    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
  1285
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1286
    if values:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1287
        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
  1288
            raise util.Abort(_('only one config item permitted'))
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 989
diff changeset
  1289
    for section, name, value in ui.walkconfig():
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1290
        sectname = section + '.' + name
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1291
        if values:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1292
            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
  1293
                if v == section:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1294
                    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
  1295
                elif v == sectname:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1296
                    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
  1297
        else:
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  1298
            ui.write('%s=%s\n' % (sectname, value))
1028
25e7ea0f2cff Add commands.debugconfig.
Bryan O'Sullivan <bos@serpentine.com>
parents: 989
diff changeset
  1299
1395
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1300
def debugsetparents(ui, repo, rev1, rev2=None):
1470
fb9b84c91222 minor fix on command help docstrings
TK Soh <teekaysoh@yahoo.com>
parents: 1469
diff changeset
  1301
    """manually set the parents of the current working directory
1395
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1302
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1303
    This is useful for writing repository conversion tools, but should
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1304
    be used with care.
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1305
    """
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1306
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1307
    if not rev2:
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1308
        rev2 = hex(nullid)
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1309
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1310
    repo.dirstate.setparents(repo.lookup(rev1), repo.lookup(rev2))
c2eb204917f8 Add debugsetparents command
Matt Mackall <mpm@selenic.com>
parents: 1390
diff changeset
  1311
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1312
def debugstate(ui, repo):
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1313
    """show the contents of the current dirstate"""
555
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
  1314
    repo.dirstate.read()
39a1cfb03ebd Unbreak dirstate debug commands
mpm@selenic.com
parents: 554
diff changeset
  1315
    dc = repo.dirstate.map
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1316
    keys = dc.keys()
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1317
    keys.sort()
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1318
    for file_ in keys:
791
040655ea0cc4 Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 770
diff changeset
  1319
        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
  1320
                 % (dc[file_][0], dc[file_][1] & 0777, dc[file_][2],
040655ea0cc4 Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 770
diff changeset
  1321
                    time.strftime("%x %X",
040655ea0cc4 Show all dirstate info for 'hg debugstate'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 770
diff changeset
  1322
                                  time.localtime(dc[file_][3])), file_))
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1323
    for f in repo.dirstate.copies:
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
  1324
        ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copies[f], f))
460
6409d9a0df43 add dirstate debugging commands
mpm@selenic.com
parents: 452
diff changeset
  1325
1039
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
  1326
def debugdata(ui, file_, rev):
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
  1327
    """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
  1328
    r = revlog.revlog(util.opener(os.getcwd(), audit=False),
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1329
                      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
  1330
    try:
1cc7c0cbc30b Fix traceback during invalid rev identifier for debugdata
Anupam Kapoor<anupam.kapoor@gmail.com>
parents: 1312
diff changeset
  1331
        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
  1332
    except KeyError:
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
  1333
        raise util.Abort(_('invalid revision identifier %s'), rev)
1039
4296754ba7b4 Add debugdata for dumping revlog revision data
mpm@selenic.com
parents: 1037
diff changeset
  1334
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1335
def debugindex(ui, file_):
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1336
    """dump the contents of an index file"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1337
    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
  1338
    ui.write("   rev    offset  length   base linkrev" +
989
1b6eb272b238 Reformat debugindex output
mpm@selenic.com
parents: 988
diff changeset
  1339
             " nodeid       p1           p2\n")
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  1340
    for i in range(r.count()):
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1341
        node = r.node(i)
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1342
        pp = r.parents(node)
989
1b6eb272b238 Reformat debugindex output
mpm@selenic.com
parents: 988
diff changeset
  1343
        ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1344
                i, r.start(i), r.length(i), r.base(i), r.linkrev(node),
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1345
            short(node), short(pp[0]), short(pp[1])))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  1346
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1347
def debugindexdot(ui, file_):
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  1348
    """dump an index DAG as a .dot file"""
2072
74d3f5336b66 Implement revlogng.
mason@suse.com
parents: 2042
diff changeset
  1349
    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
  1350
    ui.write("digraph G {\n")
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  1351
    for i in range(r.count()):
2287
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
  1352
        node = r.node(i)
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
  1353
        pp = r.parents(node)
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
  1354
        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
  1355
        if pp[1] != nullid:
3f18d1eea370 Update debugindexdot to work with RevlogNG.
Samuel Masham <samuel.masham@gmail.com>
parents: 2283
diff changeset
  1356
            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
  1357
    ui.write("}\n")
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  1358
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1359
def debugrename(ui, repo, file, rev=None):
1194
c165cbf56bb1 Add doc string for debugrename.
bos@serpentine.internal.keyresearch.com
parents: 1193
diff changeset
  1360
    """dump rename information"""
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1361
    r = repo.file(relpath(repo, [file])[0])
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1362
    if rev:
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1363
        try:
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1364
            # assume all revision numbers are for changesets
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1365
            n = repo.lookup(rev)
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1366
            change = repo.changelog.read(n)
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1367
            m = repo.manifest.read(change[0])
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1368
            n = m[relpath(repo, [file])[0]]
1541
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1526
diff changeset
  1369
        except (hg.RepoError, KeyError):
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1370
            n = r.lookup(rev)
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1371
    else:
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1372
        n = r.tip()
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1373
    m = r.renamed(n)
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1374
    if m:
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
  1375
        ui.write(_("renamed from %s:%s\n") % (m[0], hex(m[1])))
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1376
    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
  1377
        ui.write(_("not renamed\n"))
1116
0cdd73b0767c Add some rename debugging support
mpm@selenic.com
parents: 1114
diff changeset
  1378
820
89985a1b3427 Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 815
diff changeset
  1379
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
  1380
    """show how files match on given patterns"""
820
89985a1b3427 Clean up walk and changes code to use normalised names properly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 815
diff changeset
  1381
    items = list(walk(repo, pats, opts))
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1382
    if not items:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1383
        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
  1384
    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
  1385
        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
  1386
        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
  1387
    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
  1388
        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
  1389
        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
  1390
732
ba0b6d17a6de Convert diff command over to using walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 731
diff changeset
  1391
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
  1392
    """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
  1393
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1394
    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
  1395
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1396
    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
  1397
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1398
    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
  1399
    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
  1400
    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
  1401
    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
  1402
    to its parent.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1403
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1404
    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
  1405
    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
  1406
    probably with undesirable results.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1407
    """
2331
953dbfb2824c diff: allow to use -rA:B syntax as well as -rA -rB
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2330
diff changeset
  1408
    node1, node2 = revpair(ui, repo, opts['rev'])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  1409
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  1410
    fns, matchfn, anypats = matchpats(repo, pats, opts)
1014
e37cd99fa909 Clean up argument passing for dodiff
mpm@selenic.com
parents: 989
diff changeset
  1411
1267
b0633406c07a Fix diff command so it doesn't walk the dirstate unnecessarily.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1262
diff changeset
  1412
    dodiff(sys.stdout, ui, repo, node1, node2, fns, match=matchfn,
1728
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  1413
           text=opts['text'], opts=opts)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  1414
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1415
def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1416
    node = repo.lookup(changeset)
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1417
    parents = [p for p in repo.changelog.parents(node) if p != nullid]
1589
fce5292866c6 fix a bug in hg export --switch-parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1586
diff changeset
  1418
    if opts['switch_parent']:
fce5292866c6 fix a bug in hg export --switch-parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1586
diff changeset
  1419
        parents.reverse()
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1420
    prev = (parents and parents[0]) or nullid
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1421
    change = repo.changelog.read(node)
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1422
2562
a020024c5870 simplify make_filename, fix hg cat bug
Matt Mackall <mpm@selenic.com>
parents: 2494
diff changeset
  1423
    fp = make_file(repo, opts['output'], node, total=total, seqno=seqno,
729
626aa658e2a9 Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents: 727
diff changeset
  1424
                   revwidth=revwidth)
626aa658e2a9 Turn make_filename into make_file, which returns a file handle.
Bryan O'Sullivan <bos@serpentine.com>
parents: 727
diff changeset
  1425
    if fp != sys.stdout:
755
87e2b094ab86 Show filenames for hg export in verbose mode on a separate lines.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 750
diff changeset
  1426
        ui.note("%s\n" % fp.name)
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1427
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
  1428
    fp.write("# HG changeset patch\n")
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
  1429
    fp.write("# User %s\n" % change[1])
2300
52b9b6751b2c Use "# Date" instead of "# Timestamp" for dated export/import of patches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2299
diff changeset
  1430
    fp.write("# Date %d %d\n" % change[2])
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1431
    fp.write("# Node ID %s\n" % hex(node))
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1432
    fp.write("# Parent  %s\n" % hex(prev))
1571
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1433
    if len(parents) > 1:
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1434
        fp.write("# Parent  %s\n" % hex(parents[1]))
582
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
  1435
    fp.write(change[4].rstrip())
df8a5a0098d4 Remove all remaining print statements
mpm@selenic.com
parents: 580
diff changeset
  1436
    fp.write("\n\n")
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1437
1015
22571b8d35d3 Add automatic binary file detection to diff and export
mpm@selenic.com
parents: 1014
diff changeset
  1438
    dodiff(fp, ui, repo, prev, node, text=opts['text'])
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1439
    if fp != sys.stdout:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1440
        fp.close()
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
  1441
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1442
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
  1443
    """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
  1444
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1445
    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
  1446
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1447
    The information shown in the changeset header is: author,
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1448
    changeset hash, parent and commit comment.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1449
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1450
    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
  1451
    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
  1452
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1453
    %%   literal "%" character
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1454
    %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
  1455
    %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
  1456
    %R   changeset revision number
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1457
    %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
  1458
    %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
  1459
    %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
  1460
    %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
  1461
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1462
    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
  1463
    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
  1464
    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
  1465
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  1466
    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
  1467
    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
  1468
    """
610
4c02464cb9f0 check export options for changeset before running
shaleh@speakeasy.net
parents: 609
diff changeset
  1469
    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
  1470
        raise util.Abort(_("export requires at least one changeset"))
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1471
    seqno = 0
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1472
    revs = list(revrange(ui, repo, changesets))
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1473
    total = len(revs)
1067
fae1204603dc Fixed zero-padded filenames with %r if there is a longer number in the middle.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1066
diff changeset
  1474
    revwidth = max(map(len, revs))
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  1475
    msg = len(revs) > 1 and _("Exporting patches:\n") or _("Exporting patch:\n")
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  1476
    ui.note(msg)
580
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1477
    for cset in revs:
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1478
        seqno += 1
353a2ce50423 [PATCH] New export patch
mpm@selenic.com
parents: 577
diff changeset
  1479
        doexport(ui, repo, cset, seqno, total, revwidth, opts)
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  1480
810
790a0ff306f2 Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 809
diff changeset
  1481
def forget(ui, repo, *pats, **opts):
2135
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1482
    """don't add the specified files on the next commit (DEPRECATED)
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1483
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1484
    (DEPRECATED)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1485
    Undo an 'hg add' scheduled for the next commit.
2135
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1486
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1487
    This command is now deprecated and will be removed in a future
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1488
    release. Please use revert instead.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1489
    """
2135
11ad47f22023 mark forget command as deprecated.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2134
diff changeset
  1490
    ui.warn(_("(the forget command is deprecated; use revert instead)\n"))
810
790a0ff306f2 Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 809
diff changeset
  1491
    forget = []
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 940
diff changeset
  1492
    for src, abs, rel, exact in walk(repo, pats, opts):
810
790a0ff306f2 Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 809
diff changeset
  1493
        if repo.dirstate.state(abs) == 'a':
790a0ff306f2 Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 809
diff changeset
  1494
            forget.append(abs)
1255
e825dfea3823 Get all commands that operate on files to honour --verbose and --quiet.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1254
diff changeset
  1495
            if ui.verbose or not exact:
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  1496
                ui.status(_('forgetting %s\n') % ((pats and rel) or abs))
810
790a0ff306f2 Move commands.forget over to using new walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 809
diff changeset
  1497
    repo.forget(forget)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  1498
1108
7a75d8fbbdaf Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1106
diff changeset
  1499
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
  1500
    """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
  1501
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1502
    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
  1503
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1504
    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
  1505
    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
  1506
    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
  1507
    a match appears.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1508
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1509
    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
  1510
    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
  1511
    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
  1512
    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
  1513
    use the --all flag.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1514
    """
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1515
    reflags = 0
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1516
    if opts['ignore_case']:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1517
        reflags |= re.I
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1518
    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
  1519
    sep, eol = ':', '\n'
1108
7a75d8fbbdaf Remove some options from 'hg grep':
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1106
diff changeset
  1520
    if opts['print0']:
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1521
        sep = eol = '\0'
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1522
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1523
    fcache = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1524
    def getfile(fn):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1525
        if fn not in fcache:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1526
            fcache[fn] = repo.file(fn)
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1527
        return fcache[fn]
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1528
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1529
    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
  1530
        begin = 0
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1531
        linenum = 0
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1532
        while True:
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1533
            match = regexp.search(body, begin)
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1534
            if not match:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1535
                break
1059
4eab07ef66e2 grep: speed up matching, and only return one match per line.
bos@serpentine.internal.keyresearch.com
parents: 1058
diff changeset
  1536
            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
  1537
            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
  1538
            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
  1539
            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
  1540
            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
  1541
            begin = lend + 1
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1542
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1552
diff changeset
  1543
    class linestate(object):
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1544
        def __init__(self, line, linenum, colstart, colend):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1545
            self.line = line
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1546
            self.linenum = linenum
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1547
            self.colstart = colstart
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1548
            self.colend = colend
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1549
        def __eq__(self, other):
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1550
            return self.line == other.line
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1551
        def __hash__(self):
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1552
            return hash(self.line)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1553
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1554
    matches = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1555
    def grepbody(fn, rev, body):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1556
        matches[rev].setdefault(fn, {})
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1557
        m = matches[rev][fn]
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1558
        for lnum, cstart, cend, line in matchlines(body):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1559
            s = linestate(line, lnum, cstart, cend)
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1560
            m[s] = s
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1561
1749
d457fec76ab0 fix warnings from pychecker (unused variables and shadowing)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1747
diff changeset
  1562
    # FIXME: prev isn't used, why ?
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1563
    prev = {}
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1564
    ucache = {}
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1565
    def display(fn, rev, states, prevstates):
1061
fed8d078840b Fix set type usage for Python 2.3
mpm@selenic.com
parents: 1060
diff changeset
  1566
        diff = list(sets.Set(states).symmetric_difference(sets.Set(prevstates)))
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1567
        diff.sort(lambda x, y: cmp(x.linenum, y.linenum))
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1568
        counts = {'-': 0, '+': 0}
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1569
        filerevmatches = {}
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1570
        for l in diff:
1212
ccb6201e3f28 Change grep -e to grep --all
mpm@selenic.com
parents: 1211
diff changeset
  1571
            if incrementing or not opts['all']:
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1572
                change = ((l in prevstates) and '-') or '+'
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1573
                r = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1574
            else:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1575
                change = ((l in states) and '-') or '+'
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1576
                r = prev[fn]
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1577
            cols = [fn, str(rev)]
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1578
            if opts['line_number']:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1579
                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
  1580
            if opts['all']:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1581
                cols.append(change)
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1582
            if opts['user']:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1583
                cols.append(trimuser(ui, getchange(rev)[1], rev,
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1584
                                                  ucache))
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1585
            if opts['files_with_matches']:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1586
                c = (fn, rev)
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1587
                if c in filerevmatches:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1588
                    continue
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1589
                filerevmatches[c] = 1
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1590
            else:
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1591
                cols.append(l.line)
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1592
            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
  1593
            counts[change] += 1
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1594
        return counts['+'], counts['-']
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1595
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1596
    fstate = {}
1145
bd917e1a26dd grep: change default to printing first matching rev.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1116
diff changeset
  1597
    skip = {}
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
  1598
    changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1599
    count = 0
1337
d4b25df77a9e Fix up some bugs for log and grep with empty repo
mpm@selenic.com
parents: 1331
diff changeset
  1600
    incrementing = False
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1601
    for st, rev, fns in changeiter:
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1602
        if st == 'window':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1603
            incrementing = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1604
            matches.clear()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1605
        elif st == 'add':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1606
            change = repo.changelog.read(repo.lookup(str(rev)))
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1607
            mf = repo.manifest.read(change[0])
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1608
            matches[rev] = {}
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1609
            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
  1610
                if fn in skip:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1611
                    continue
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1612
                fstate.setdefault(fn, {})
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1613
                try:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1614
                    grepbody(fn, rev, getfile(fn).read(mf[fn]))
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1615
                except KeyError:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1616
                    pass
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1617
        elif st == 'iter':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1618
            states = matches[rev].items()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1619
            states.sort()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1620
            for fn, m in states:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1621
                if fn in skip:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1622
                    continue
1212
ccb6201e3f28 Change grep -e to grep --all
mpm@selenic.com
parents: 1211
diff changeset
  1623
                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
  1624
                    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
  1625
                    count += pos + neg
1212
ccb6201e3f28 Change grep -e to grep --all
mpm@selenic.com
parents: 1211
diff changeset
  1626
                    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
  1627
                        skip[fn] = True
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1628
                fstate[fn] = m
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1629
                prev[fn] = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1630
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1631
    if not incrementing:
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1632
        fstate = fstate.items()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1633
        fstate.sort()
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1634
        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
  1635
            if fn in skip:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  1636
                continue
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1637
            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
  1638
    return (count == 0 and 1) or 0
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1639
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  1640
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
  1641
    """show current repository heads
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1642
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1643
    Show all repository head changesets.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1644
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1645
    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
  1646
    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
  1647
    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
  1648
    """
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
  1649
    if opts['rev']:
1551
e793cbc8be00 Fixes to "hg heads -r FOO":
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1550
diff changeset
  1650
        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
  1651
    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
  1652
        heads = repo.heads()
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  1653
    br = None
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  1654
    if opts['branches']:
1551
e793cbc8be00 Fixes to "hg heads -r FOO":
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1550
diff changeset
  1655
        br = repo.branchlookup(heads)
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  1656
    displayer = 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
  1657
    for n in heads:
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  1658
        displayer.show(changenode=n, brinfo=br)
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
  1659
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1660
def identify(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1661
    """print information about the working copy
1470
fb9b84c91222 minor fix on command help docstrings
TK Soh <teekaysoh@yahoo.com>
parents: 1469
diff changeset
  1662
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1663
    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
  1664
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1665
    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
  1666
    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
  1667
    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
  1668
    """
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1669
    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
  1670
    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
  1671
        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
  1672
        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
  1673
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  1674
    hexfunc = ui.verbose and hex or short
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1675
    modified, added, removed, deleted, unknown = repo.changes()
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1676
    output = ["%s%s" %
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  1677
              ('+'.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
  1678
              (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
  1679
339
a76fc9c4b67b added hg identify|id (based on a patch from Andrew Thompson)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 338
diff changeset
  1680
    if not ui.quiet:
386
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1681
        # multiple tags for a single parent separated by '/'
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1682
        parenttags = ['/'.join(tags)
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1683
                      for tags in map(repo.nodetags, parents) if tags]
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1684
        # 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
  1685
        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
  1686
            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
  1687
386
494c8e3f47f3 Improvements for hg identify:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 371
diff changeset
  1688
    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
  1689
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1690
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
  1691
    """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
  1692
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1693
    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
  1694
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1695
    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
  1696
    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
  1697
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1698
    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
  1699
    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
  1700
    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
  1701
    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
  1702
    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
  1703
    message.
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1704
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1705
    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
  1706
    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
  1707
    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
  1708
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1709
    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
  1710
    """
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1711
    patches = (patch1,) + patches
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  1712
966
022bcc738389 hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents: 965
diff changeset
  1713
    if not opts['force']:
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  1714
        bail_if_changed(repo)
966
022bcc738389 hg import: abort with uncommitted changes, override with --force
mpm@selenic.com
parents: 965
diff changeset
  1715
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1716
    d = opts["base"]
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1717
    strip = opts["strip"]
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1718
1193
04d1ca8ae9ec Fortify the recognition of a diff header.
bos@serpentine.internal.keyresearch.com
parents: 1192
diff changeset
  1719
    mailre = re.compile(r'(?:From |[\w-]+:)')
1390
ce95599eedac Borrow patch header detection heuristic from quilt
Matt Mackall <mpm@selenic.com>
parents: 1381
diff changeset
  1720
ce95599eedac Borrow patch header detection heuristic from quilt
Matt Mackall <mpm@selenic.com>
parents: 1381
diff changeset
  1721
    # attempt to detect the start of a patch
ce95599eedac Borrow patch header detection heuristic from quilt
Matt Mackall <mpm@selenic.com>
parents: 1381
diff changeset
  1722
    # (this heuristic is borrowed from quilt)
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1723
    diffre = re.compile(r'^(?:Index:[ \t]|diff[ \t]|RCS file: |' +
1390
ce95599eedac Borrow patch header detection heuristic from quilt
Matt Mackall <mpm@selenic.com>
parents: 1381
diff changeset
  1724
                        'retrieving revision [0-9]+(\.[0-9]+)*$|' +
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1725
                        '(---|\*\*\*)[ \t])', re.MULTILINE)
1190
737f9b90c571 Make import command reject patches that resemble email messages.
bos@serpentine.internal.keyresearch.com
parents: 1189
diff changeset
  1726
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1727
    for patch in patches:
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1728
        pf = os.path.join(d, patch)
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1729
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1730
        message = None
701
80ed193efff7 On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 700
diff changeset
  1731
        user = None
2299
dacf718e1d48 Add timestamp field to export format. Make import and mq use it.
Danek Duvall <danek.duvall@sun.com>
parents: 2293
diff changeset
  1732
        date = None
701
80ed193efff7 On importing the result of 'hg export', parse while reading and drop headers.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 700
diff changeset
  1733
        hgpatch = False
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1734
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1735
        p = email.Parser.Parser()
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1736
        if pf == '-':
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1737
            msg = p.parse(sys.stdin)
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1738
            ui.status(_("applying patch from stdin\n"))
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1739
        else:
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1740
            msg = p.parse(file(pf))
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1741
            ui.status(_("applying %s\n") % patch)
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1742
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1743
        fd, tmpname = tempfile.mkstemp(prefix='hg-patch-')
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1744
        tmpfp = os.fdopen(fd, 'w')
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1745
        try:
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1746
            message = msg['Subject']
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1747
            if message:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1748
                message = message.replace('\n\t', ' ')
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1749
                ui.debug('Subject: %s\n' % message)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1750
            user = msg['From']
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1751
            if user:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1752
                ui.debug('From: %s\n' % user)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1753
            diffs_seen = 0
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1754
            ok_types = ('text/plain', 'text/x-patch')
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1755
            for part in msg.walk():
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1756
                content_type = part.get_content_type()
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1757
                ui.debug('Content-Type: %s\n' % content_type)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1758
                if content_type not in ok_types:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1759
                    continue
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1760
                payload = part.get_payload(decode=True)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1761
                m = diffre.search(payload)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1762
                if m:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1763
                    ui.debug(_('found patch at byte %d\n') % m.start(0))
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1764
                    diffs_seen += 1
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1765
                    hgpatch = False
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1766
                    fp = cStringIO.StringIO()
2513
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1767
                    if message:
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1768
                        fp.write(message)
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1769
                        fp.write('\n')
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1770
                    for line in payload[:m.start(0)].splitlines():
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1771
                        if line.startswith('# HG changeset patch'):
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1772
                            ui.debug(_('patch generated by hg export\n'))
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1773
                            hgpatch = True
2513
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1774
                            # drop earlier commit message content
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1775
                            fp.seek(0)
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1776
                            fp.truncate()
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1777
                        elif hgpatch:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1778
                            if line.startswith('# User '):
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1779
                                user = line[7:]
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1780
                                ui.debug('From: %s\n' % user)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1781
                            elif line.startswith("# Date "):
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1782
                                date = line[7:]
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1783
                        if not line.startswith('# '):
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1784
                            fp.write(line)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1785
                            fp.write('\n')
2513
f22e3e8fd457 import: added tests, fixed bugs found by tests and asak.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2510
diff changeset
  1786
                    message = fp.getvalue()
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1787
                    if tmpfp:
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1788
                        tmpfp.write(payload)
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1789
                        if not payload.endswith('\n'):
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1790
                            tmpfp.write('\n')
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1791
                elif not diffs_seen and message and content_type == 'text/plain':
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1792
                    message += '\n' + payload
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1793
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1794
            if opts['message']:
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1795
                # pickup the cmdline msg
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1796
                message = opts['message']
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1797
            elif message:
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1798
                # pickup the patch msg
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1799
                message = message.strip()
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1800
            else:
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1801
                # launch the editor
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  1802
                message = None
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1803
            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
  1804
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1805
            tmpfp.close()
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1806
            if not diffs_seen:
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1807
                raise util.Abort(_('no diffs found'))
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1808
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1809
            files = util.patch(strip, tmpname, ui)
2400
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1810
            if len(files) > 0:
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1811
                addremove_lock(ui, repo, files, {})
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1812
            repo.commit(files, message, user, date)
2e90024e1471 import: allow to import stdin with file name "-"
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2397
diff changeset
  1813
        finally:
2504
158d3d2ae070 import: parse email messages
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2494
diff changeset
  1814
            os.unlink(tmpname)
437
5b38a5af4019 Commands cleanup
mpm@selenic.com
parents: 429
diff changeset
  1815
1192
6e165de907c5 Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents: 1191
diff changeset
  1816
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
  1817
    """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
  1818
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1819
    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
  1820
    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
  1821
    was requested.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1822
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1823
    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
  1824
    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
  1825
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  1826
    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
  1827
    """
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
  1828
    source = ui.expandpath(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
  1829
    ui.setconfig_remoteopts(**opts)
1965
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  1830
927
5a830d7bea52 Add hg incoming command for local repositories
mpm@selenic.com
parents: 924
diff changeset
  1831
    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
  1832
    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
  1833
    if not incoming:
1993
fb6ca9801d04 show message if no changes found on incoming
TK Soh <teekaysoh@yahoo.com>
parents: 1981
diff changeset
  1834
        ui.status(_("no changes found\n"))
931
32e8f64b25b0 Fix incoming for empty set
mpm@selenic.com
parents: 928
diff changeset
  1835
        return
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1836
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1837
    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
  1838
    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
  1839
        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
  1840
        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
  1841
            # 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
  1842
            cg = other.changegroup(incoming, "incoming")
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1843
            fname = cleanup = write_bundle(cg, fname, compress=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
  1844
            # 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
  1845
            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
  1846
                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
  1847
            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
  1848
                # 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
  1849
                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
  1850
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1851
        revs = None
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1852
        if opts['rev']:
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  1853
            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
  1854
        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
  1855
        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
  1856
            o.reverse()
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1857
        displayer = show_changeset(ui, other, opts)
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1858
        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
  1859
            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
  1860
            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
  1861
                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
  1862
            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
  1863
            if opts['patch']:
0d54675cd566 Delete bundle file of hg incoming in case of errors, preserve existing files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1973
diff changeset
  1864
                prev = (parents and parents[0]) or 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
  1865
                dodiff(ui, ui, other, prev, 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
  1866
                ui.write("\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
  1867
    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
  1868
        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
  1869
            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
  1870
        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
  1871
            os.unlink(cleanup)
1944
fdf40c9b3306 incoming: add support for remote repo using bundlerepo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1943
diff changeset
  1872
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
  1873
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
  1874
    """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
  1875
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1876
    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
  1877
    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
  1878
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1879
    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
  1880
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  1881
    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
  1882
    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
  1883
    about ssh:// URLs.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1884
    """
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
  1885
    ui.setconfig_remoteopts(**opts)
907
652507dc9fce Modify init command to take an optional directory to set up.
Bryan O'Sullivan <bos@serpentine.com>
parents: 906
diff changeset
  1886
    hg.repository(ui, dest, create=1)
338
1e091b3293d5 default path support with .hg/hgrc
mpm@selenic.com
parents: 335
diff changeset
  1887
627
b6c42714d900 Add locate command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 625
diff changeset
  1888
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
  1889
    """locate files matching specific patterns
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1890
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1891
    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
  1892
    given patterns.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1893
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1894
    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
  1895
    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
  1896
    of the repository.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1897
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1898
    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
  1899
    names.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1900
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1901
    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
  1902
    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
  1903
    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
  1904
    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
  1905
    """
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1906
    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
  1907
    rev = opts['rev']
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1908
    if rev:
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1909
        node = repo.lookup(rev)
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1910
    else:
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1911
        node = None
742
092937de2ad7 Refactor matchpats and walk
mpm@selenic.com
parents: 740
diff changeset
  1912
1622
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1913
    for src, abs, rel, exact in walk(repo, pats, opts, node=node,
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1914
                                     head='(?:.*/|)'):
5e9168401a68 fix locate broken since 63799b01985c
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1619
diff changeset
  1915
        if not node and repo.dirstate.state(abs) == '?':
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1916
            continue
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  1917
        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
  1918
            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
  1919
        else:
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  1920
            ui.write(((pats and rel) or abs), end)
627
b6c42714d900 Add locate command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 625
diff changeset
  1921
1031
503aaf19a040 Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1030
diff changeset
  1922
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
  1923
    """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
  1924
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1925
    Print the revision history of the specified files or the entire project.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1926
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1927
    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
  1928
    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
  1929
    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
  1930
    files and full commit message is shown.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  1931
    """
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 1552
diff changeset
  1932
    class dui(object):
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1933
        # Implement and delegate some ui protocol.  Save hunks of
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1934
        # output for later display in the desired order.
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1935
        def __init__(self, ui):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1936
            self.ui = ui
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1937
            self.hunk = {}
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  1938
            self.header = {}
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1939
        def bump(self, rev):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1940
            self.rev = rev
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1941
            self.hunk[rev] = []
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  1942
            self.header[rev] = []
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1943
        def note(self, *args):
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1944
            if self.verbose:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1945
                self.write(*args)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1946
        def status(self, *args):
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1947
            if not self.quiet:
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  1948
                self.write(*args)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1949
        def write(self, *args):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1950
            self.hunk[self.rev].append(args)
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  1951
        def write_header(self, *args):
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  1952
            self.header[self.rev].append(args)
1381
c29c36745c6e log --debug: fix misplaced manifest field
TK Soh <teekaysoh@yahoo.com>
parents: 1380
diff changeset
  1953
        def debug(self, *args):
c29c36745c6e log --debug: fix misplaced manifest field
TK Soh <teekaysoh@yahoo.com>
parents: 1380
diff changeset
  1954
            if self.debugflag:
c29c36745c6e log --debug: fix misplaced manifest field
TK Soh <teekaysoh@yahoo.com>
parents: 1380
diff changeset
  1955
                self.write(*args)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1956
        def __getattr__(self, key):
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1957
            return getattr(self.ui, key)
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1958
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
  1959
    changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts)
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1960
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1961
    if opts['limit']:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1962
        try:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1963
            limit = int(opts['limit'])
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1964
        except ValueError:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1965
            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
  1966
        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
  1967
    else:
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1968
        limit = sys.maxint
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1969
    count = 0
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  1970
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  1971
    displayer = show_changeset(ui, repo, opts)
1146
9061f79c6c6f grep: extend functionality, add man page entry, add unit test.
bos@serpentine.internal.keyresearch.com
parents: 1145
diff changeset
  1972
    for st, rev, fns in changeiter:
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1973
        if st == 'window':
1031
503aaf19a040 Rewrite log command. New version is faster and more featureful.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1030
diff changeset
  1974
            du = dui(ui)
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  1975
            displayer.ui = du
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1976
        elif st == 'add':
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  1977
            du.bump(rev)
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1978
            changenode = repo.changelog.node(rev)
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1979
            parents = [p for p in repo.changelog.parents(changenode)
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1980
                       if p != nullid]
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1981
            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
  1982
                continue
1436
db6d7b4005ba add --only-merges (-m) log
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1435
diff changeset
  1983
            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
  1984
                continue
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  1985
1373
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1986
            if opts['keyword']:
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
  1987
                changes = getchange(rev)
1373
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1988
                miss = 0
1404
67e20e27d8df log: make keyword search truly case-insensitive
TK Soh <teekaysoh@yahoo.com>
parents: 1402
diff changeset
  1989
                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
  1990
                    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
  1991
                            k in changes[4].lower() or
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1992
                            k in " ".join(changes[3][:20]).lower()):
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1993
                        miss = 1
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1994
                        break
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1995
                if miss:
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1996
                    continue
965d1db5c95d hg log: add -k for keyword searching
Matt Mackall <mpm@selenic.com>
parents: 1366
diff changeset
  1997
1764
4671078dbfe7 Cleanup: Put initialization of br in front of --branches option handling.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1763
diff changeset
  1998
            br = None
1763
fa34a74efc40 Make option --branch vs. --branches more consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1762
diff changeset
  1999
            if opts['branches']:
1405
6fd6527f95eb log: speedup keyword search when used with --branch
TK Soh <teekaysoh@yahoo.com>
parents: 1404
diff changeset
  2000
                br = repo.branchlookup([repo.changelog.node(rev)])
6fd6527f95eb log: speedup keyword search when used with --branch
TK Soh <teekaysoh@yahoo.com>
parents: 1404
diff changeset
  2001
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2002
            displayer.show(rev, brinfo=br)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  2003
            if opts['patch']:
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  2004
                prev = (parents and parents[0]) or nullid
1570
6a104941d56a hg log -p should show file deletions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1568
diff changeset
  2005
                dodiff(du, du, repo, prev, changenode, match=matchfn)
1057
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  2006
                du.write("\n\n")
2fd15d743b3b Add grep command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1042
diff changeset
  2007
        elif st == 'iter':
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  2008
            if count == limit: break
2033
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2009
            if du.header[rev]:
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2010
                for args in du.header[rev]:
e3280d350792 Group changes done by the same developer on the same with --style=changelog
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2029
diff changeset
  2011
                    ui.write_header(*args)
1765
b9fac31f34c9 hg log --limit shouldn't count unprinted revisions (found by TK Soh)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1764
diff changeset
  2012
            if du.hunk[rev]:
b9fac31f34c9 hg log --limit shouldn't count unprinted revisions (found by TK Soh)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1764
diff changeset
  2013
                count += 1
b9fac31f34c9 hg log --limit shouldn't count unprinted revisions (found by TK Soh)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1764
diff changeset
  2014
                for args in du.hunk[rev]:
b9fac31f34c9 hg log --limit shouldn't count unprinted revisions (found by TK Soh)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1764
diff changeset
  2015
                    ui.write(*args)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2016
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2017
def manifest(ui, repo, rev=None):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2018
    """output the latest or given revision of the project manifest
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2019
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2020
    Print a list of version controlled files for the given revision.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2021
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2022
    The manifest is the list of files being version controlled. If no revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2023
    is given then the tip is used.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2024
    """
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2025
    if rev:
689
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2026
        try:
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2027
            # assume all revision numbers are for changesets
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2028
            n = repo.lookup(rev)
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2029
            change = repo.changelog.read(n)
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2030
            n = change[0]
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2031
        except hg.RepoError:
689
4315db147f00 Make manifest lookup use changeset ids
mpm@selenic.com
parents: 687
diff changeset
  2032
            n = repo.manifest.lookup(rev)
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2033
    else:
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2034
        n = repo.manifest.tip()
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2035
    m = repo.manifest.read(n)
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
  2036
    mf = repo.manifest.readflags(n)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2037
    files = m.keys()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2038
    files.sort()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2039
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2040
    for f in files:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  2041
        ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2042
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2043
def merge(ui, repo, node=None, **opts):
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2044
    """Merge working directory with another revision
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2045
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2046
    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
  2047
    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
  2048
    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
  2049
    performed before any further updates are allowed.
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2050
    """
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2051
    return doupdate(ui, repo, node=node, merge=True, **opts)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2052
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  2053
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
  2054
    """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
  2055
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2056
    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
  2057
    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
  2058
    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
  2059
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2060
    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
  2061
    """
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  2062
    dest = ui.expandpath(dest or 'default-push', dest or 'default')
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
  2063
    ui.setconfig_remoteopts(**opts)
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2064
    revs = None
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2065
    if opts['rev']:
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2066
        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
  2067
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  2068
    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
  2069
    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
  2070
    if not o:
78ef83c9e9e1 show message if no changes found on outgoing
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1993
diff changeset
  2071
        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
  2072
        return
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2073
    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
  2074
    if opts['newest_first']:
65cbe22b03fa allow 'hg out' / 'hg in' to show newest commit first
Michal Kvasnica <kvasnica@gmail.com>
parents: 1437
diff changeset
  2075
        o.reverse()
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2076
    displayer = show_changeset(ui, repo, opts)
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  2077
    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
  2078
        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
  2079
        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
  2080
            continue
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2081
        displayer.show(changenode=n)
1192
6e165de907c5 Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents: 1191
diff changeset
  2082
        if opts['patch']:
1435
22b44fd9a166 add --no-merges (-M) for log, outgoing, incoming
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1431
diff changeset
  2083
            prev = (parents and parents[0]) or nullid
1192
6e165de907c5 Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents: 1191
diff changeset
  2084
            dodiff(ui, ui, repo, prev, n)
6e165de907c5 Add -p to incoming and outgoing commands to show patch
TK Soh <teekaysoh@yahoo.com>
parents: 1191
diff changeset
  2085
            ui.write("\n")
920
270756aa29d5 Add hg outgoing command
mpm@selenic.com
parents: 918
diff changeset
  2086
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2087
def parents(ui, repo, rev=None, branches=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2088
    """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
  2089
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2090
    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
  2091
    """
706
5107a7b6b14a Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 705
diff changeset
  2092
    if rev:
5107a7b6b14a Make "hg parents REV" work (again?)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 705
diff changeset
  2093
        p = repo.changelog.parents(repo.lookup(rev))
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2094
    else:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2095
        p = repo.dirstate.parents()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2096
1724
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  2097
    br = None
1763
fa34a74efc40 Make option --branch vs. --branches more consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1762
diff changeset
  2098
    if branches is not None:
1724
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  2099
        br = repo.branchlookup(p)
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2100
    displayer = show_changeset(ui, repo, opts)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2101
    for n in p:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  2102
        if n != nullid:
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2103
            displayer.show(changenode=n, brinfo=br)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2104
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  2105
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
  2106
    """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
  2107
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2108
    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
  2109
    definition of available names.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2110
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2111
    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
  2112
    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
  2113
    """
779
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2114
    if search:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2115
        for name, path in ui.configitems("paths"):
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2116
            if name == search:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2117
                ui.write("%s\n" % path)
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2118
                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
  2119
        ui.warn(_("not found!\n"))
779
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2120
        return 1
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2121
    else:
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2122
        for name, path in ui.configitems("paths"):
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2123
            ui.write("%s = %s\n" % (name, path))
b3c7cb74d325 Add paths command
TK Soh <teekaysoh@yahoo.com>
parents: 778
diff changeset
  2124
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2125
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
  2126
    if modheads == 0:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2127
        return
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2128
    if optupdate:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2129
        if modheads == 1:
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2130
            return doupdate(ui, repo)
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2131
        else:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2132
            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
  2133
    if modheads > 1:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2134
        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
  2135
    else:
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2136
        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
  2137
404
a1ecef497721 [PATCH] Unintuive use
mpm@selenic.com
parents: 403
diff changeset
  2138
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
  2139
    """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
  2140
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2141
    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
  2142
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2143
    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
  2144
    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
  2145
    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
  2146
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2147
    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
  2148
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2149
      local/filesystem/path
2589
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  2150
      http://[user@]host[:port]/[path]
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  2151
      https://[user@]host[:port]/[path]
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  2152
      ssh://[user@]host[:port]/[path]
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2153
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2154
    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
  2155
    - 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
  2156
      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
  2157
    - 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
  2158
      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
  2159
        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
  2160
    - Mercurial doesn't use its own compression via SSH; the right thing
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2161
      to do is to configure it in your ~/.ssh/ssh_config, e.g.:
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2162
        Host *.mylocalnetwork.example.com
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2163
          Compression off
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2164
        Host *
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2165
          Compression on
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2166
      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
  2167
      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
  2168
    """
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
  2169
    source = ui.expandpath(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
  2170
    ui.setconfig_remoteopts(**opts)
963
84355e3e4493 Add -e and --remotecmd for clone and pull too
mpm@selenic.com
parents: 961
diff changeset
  2171
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  2172
    other = hg.repository(ui, source)
2473
30c267cb4c2f change some repo messages in small ways.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2461
diff changeset
  2173
    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
  2174
    revs = None
be6b5ce60b7f Implementing pull -r and changing clone -r. Both now support
Eric Hopper <hopper@omnifarious.org>
parents: 1461
diff changeset
  2175
    if opts['rev'] and not other.local():
1607
d72d27ee72b9 add '_' to several strings
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1602
diff changeset
  2176
        raise util.Abort(_("pull -r doesn't work for remote repositories yet"))
1465
be6b5ce60b7f Implementing pull -r and changing clone -r. Both now support
Eric Hopper <hopper@omnifarious.org>
parents: 1461
diff changeset
  2177
    elif opts['rev']:
be6b5ce60b7f Implementing pull -r and changing clone -r. Both now support
Eric Hopper <hopper@omnifarious.org>
parents: 1461
diff changeset
  2178
        revs = [other.lookup(rev) for rev in opts['rev']]
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2179
    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
  2180
    return postincoming(ui, repo, modheads, opts['update'])
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  2181
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  2182
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
  2183
    """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
  2184
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2185
    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
  2186
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2187
    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
  2188
    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
  2189
    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
  2190
    from the current one.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2191
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2192
    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
  2193
    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
  2194
    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
  2195
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2196
    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
  2197
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2198
      local/filesystem/path
2589
dc63db82b530 disambiguate help about url syntax
"Aurelien Jacobs <aurel@gnuage.org>"
parents: 2580
diff changeset
  2199
      ssh://[user@]host[:port]/[path]
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2200
1979
d545fa1426b9 More detailed documentation about ssh:// URLs; fixes issue170.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1974
diff changeset
  2201
    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
  2202
    about ssh:// URLs.
2590
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  2203
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  2204
    Pushing to http:// and https:// URLs is possible, too, if this
911b56853fdd Additional information about URLs in pull/push/clone/init:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2589
diff changeset
  2205
    feature is 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
  2206
    """
2494
73ac95671788 push, outgoing, bundle: fall back to "default" if "default-push" not defined
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2493
diff changeset
  2207
    dest = ui.expandpath(dest or 'default-push', dest or 'default')
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
  2208
    ui.setconfig_remoteopts(**opts)
961
3e11d5038649 Add --ssh and --remotecmd to push
mpm@selenic.com
parents: 955
diff changeset
  2209
640
b48b91d3fb4a Switch push over to the new scheme
Matt Mackall <mpm@selenic.com>
parents: 639
diff changeset
  2210
    other = hg.repository(ui, dest)
2473
30c267cb4c2f change some repo messages in small ways.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2461
diff changeset
  2211
    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
  2212
    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
  2213
    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
  2214
        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
  2215
    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
  2216
    return r == 0
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
  2217
403
fda7bb480020 [PATCH] rawcommit fix again
mpm@selenic.com
parents: 401
diff changeset
  2218
def rawcommit(ui, repo, *flist, **rc):
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
  2219
    """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
  2220
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2221
    (DEPRECATED)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2222
    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
  2223
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2224
    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
  2225
    primarily useful for importing from other SCMs.
1657
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2226
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2227
    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
  2228
    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
  2229
    """
1657
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2230
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2231
    ui.warn(_("(the rawcommit command is deprecated)\n"))
dbb8bba48510 deprecate the rawcommit command
Matt Mackall <mpm@selenic.com>
parents: 1654
diff changeset
  2232
1496
3cf287a03664 remove the deprecated --text (t) option to rawcommit and tag
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1490
diff changeset
  2233
    message = rc['message']
762
312b4a10d862 Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 761
diff changeset
  2234
    if not message and rc['logfile']:
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2235
        try:
762
312b4a10d862 Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 761
diff changeset
  2236
            message = open(rc['logfile']).read()
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2237
        except IOError:
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2238
            pass
762
312b4a10d862 Changed more occurances of 'text' to 'message'.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 761
diff changeset
  2239
    if not message and not rc['logfile']:
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
  2240
        raise util.Abort(_("missing commit message"))
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  2241
403
fda7bb480020 [PATCH] rawcommit fix again
mpm@selenic.com
parents: 401
diff changeset
  2242
    files = relpath(repo, list(flist))
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  2243
    if rc['files']:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
  2244
        files += open(rc['files']).read().splitlines()
452
a1e91c24dab5 rawcommit: do lookup of parents at the appropriate layer
mpm@selenic.com
parents: 443
diff changeset
  2245
a1e91c24dab5 rawcommit: do lookup of parents at the appropriate layer
mpm@selenic.com
parents: 443
diff changeset
  2246
    rc['parent'] = map(repo.lookup, rc['parent'])
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2247
1202
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2248
    try:
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2249
        repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent'])
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2250
    except ValueError, inst:
71111d796e40 Commit date validation: more stringent checks, more useful error messages.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1194
diff changeset
  2251
        raise util.Abort(str(inst))
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2252
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2253
def recover(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2254
    """roll back an interrupted transaction
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2255
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2256
    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
  2257
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2258
    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
  2259
    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
  2260
    """
1516
0b1b029b4de3 Automatically run "verify" whenever we run "recover"
Matt Mackall <mpm@selenic.com>
parents: 1514
diff changeset
  2261
    if repo.recover():
0b1b029b4de3 Automatically run "verify" whenever we run "recover"
Matt Mackall <mpm@selenic.com>
parents: 1514
diff changeset
  2262
        return repo.verify()
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  2263
    return 1
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2264
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2265
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
  2266
    """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
  2267
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2268
    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
  2269
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2270
    This command schedules the files to be removed at the next commit.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2271
    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
  2272
    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
  2273
    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
  2274
    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
  2275
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2276
    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
  2277
    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
  2278
    """
1188
b3ceb2d470fc Fix up remove command to use walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1187
diff changeset
  2279
    names = []
2179
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2280
    if not opts['after'] and not pats:
520dd3d28e9b add --after option to remove command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2175
diff changeset
  2281
        raise util.Abort(_('no files specified'))
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2282
    files, matchfn, anypats = matchpats(repo, pats, opts)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2283
    exact = dict.fromkeys(files)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2284
    mardu = map(dict.fromkeys, repo.changes(files=files, match=matchfn))
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2285
    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
  2286
    remove, forget = [], []
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2287
    for src, abs, rel, exact in walk(repo, pats, opts):
1189
4cbcc54695b2 Make removal check more complete and informative.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1188
diff changeset
  2288
        reason = None
2309
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2289
        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
  2290
            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
  2291
        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
  2292
            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
  2293
        elif abs in added:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2294
            if opts['force']:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2295
                forget.append(abs)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2296
                continue
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2297
            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
  2298
        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
  2299
            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
  2300
        elif abs in removed:
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2301
            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
  2302
        if reason:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2303
            if exact:
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2304
                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
  2305
        else:
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2306
            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
  2307
                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
  2308
            remove.append(abs)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2309
    repo.forget(forget)
b2f37c7026ca remove: rewrite to be ~400x faster, bit more friendly
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2301
diff changeset
  2310
    repo.remove(remove, unlink=not opts['after'])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2311
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2312
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
  2313
    """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
  2314
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2315
    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
  2316
    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
  2317
    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
  2318
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2319
    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
  2320
    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
  2321
    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
  2322
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2323
    This command takes effect in the next commit.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2324
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2325
    NOTE: This command should be treated as experimental. While it
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2326
    should properly record rename files, this information is not yet
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2327
    fully used by merge, nor fully reported by log.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2328
    """
2016
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2329
    wlock = repo.wlock(0)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2330
    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
  2331
    names = []
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2332
    for abs, rel, exact in copied:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2333
        if ui.verbose or not exact:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2334
            ui.status(_('removing %s\n') % rel)
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2335
        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
  2336
    if not opts.get('dry_run'):
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  2337
        repo.remove(names, True, wlock)
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2338
    return errs
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2339
1472
3c909a747d7f make revert use standard matcher
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1470
diff changeset
  2340
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
  2341
    """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
  2342
2212
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2343
    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
  2344
    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
  2345
    This restores the contents of the affected files to an unmodified
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2346
    state.  If the working directory has two parents, you must
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2347
    explicitly specify the 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
  2348
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
  2349
    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
  2350
    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
  2351
2204
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2352
    Using the -r option, revert the given files or directories to
eb5fa83ffcfa fix doc comments for revert command. people found them confusing.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2189
diff changeset
  2353
    their 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
  2354
    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
  2355
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  2356
    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
  2357
    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
  2358
    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
  2359
    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
  2360
    afterwards.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2361
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2362
    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
  2363
    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
  2364
1472
3c909a747d7f make revert use standard matcher
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1470
diff changeset
  2365
    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
  2366
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
  2367
    If no arguments are given, all files in the repository are reverted.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2368
    """
2212
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2369
    parent, p2 = repo.dirstate.parents()
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2370
    if opts['rev']:
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2371
        node = repo.lookup(opts['rev'])
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2372
    elif p2 != nullid:
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2373
        raise util.Abort(_('working dir has two parents; '
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2374
                           'you must specify the revision to revert to'))
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2375
    else:
8164e3f31638 revert: require explicit revision when working dir has two parents.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2204
diff changeset
  2376
        node = parent
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2377
    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
  2378
    if node == parent:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2379
        pmf = mf
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2380
    else:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2381
        pmf = None
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2382
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2383
    wlock = repo.wlock()
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2384
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2385
    # 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
  2386
    # 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
  2387
    # but not other.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2388
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2389
    names = {}
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2390
    target_only = {}
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2391
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2392
    # walk dirstate.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2393
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2394
    for src, abs, rel, exact in walk(repo, pats, opts, badmatch=mf.has_key):
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2395
        names[abs] = (rel, exact)
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2396
        if src == 'b':
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2397
            target_only[abs] = True
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2398
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2399
    # walk target manifest.
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2400
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2401
    for src, abs, rel, exact in walk(repo, pats, opts, node=node,
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2402
                                     badmatch=names.has_key):
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2403
        if abs in names: continue
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2404
        names[abs] = (rel, exact)
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2405
        target_only[abs] = True
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2406
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2407
    changes = repo.changes(match=names.has_key, wlock=wlock)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2408
    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
  2409
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2410
    revert = ([], _('reverting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2411
    add = ([], _('adding %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2412
    remove = ([], _('removing %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2413
    forget = ([], _('forgetting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2414
    undelete = ([], _('undeleting %s\n'))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2415
    update = {}
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2416
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2417
    disptable = (
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2418
        # dispatch table:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2419
        #   file state
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2420
        #   action if in target manifest
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2421
        #   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
  2422
        #   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
  2423
        #   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
  2424
        (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
  2425
        (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
  2426
        (removed, undelete, None, False, False),
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2427
        (deleted, revert, remove, False, False),
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2428
        (unknown, add, None, True, False),
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2429
        (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
  2430
        )
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2431
2042
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2432
    entries = names.items()
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2433
    entries.sort()
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2434
a514c7509fa9 small changes to revert command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2037
diff changeset
  2435
    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
  2436
        mfentry = mf.get(abs)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2437
        def handle(xlist, dobackup):
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2438
            xlist[0].append(abs)
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2439
            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
  2440
            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
  2441
                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
  2442
                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
  2443
                        (rel, bakname))
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2444
                if not opts.get('dry_run'):
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2445
                    shutil.copyfile(rel, bakname)
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2446
                    shutil.copymode(rel, bakname)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2447
            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
  2448
                ui.status(xlist[1] % rel)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2449
        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
  2450
            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
  2451
            # 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
  2452
            if mfentry:
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2453
                handle(hitlist, backuphit)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2454
            elif misslist is not None:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2455
                handle(misslist, backupmiss)
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2456
            else:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2457
                if exact: ui.warn(_('file not managed: %s\n' % rel))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2458
            break
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2459
        else:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2460
            # 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
  2461
            if node == parent:
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2462
                if exact: ui.warn(_('no changes needed to %s\n' % rel))
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2463
                continue
2407
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2464
            if pmf is None:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2465
                # 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
  2466
                # 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
  2467
                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
  2468
            if abs in pmf:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2469
                if mfentry:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2470
                    # 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
  2471
                    # manifests, do nothing
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2472
                    if pmf[abs] != mfentry:
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2473
                        handle(revert, False)
8fe3d60b7f19 revert: better fix for not printing 'reverting' message
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2406
diff changeset
  2474
                else:
2272
e9a0ed9ed4d9 revert: fix corner case found by faheem mitha.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2268
diff changeset
  2475
                    handle(remove, False)
2029
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  2476
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2477
    if not opts.get('dry_run'):
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2478
        repo.dirstate.forget(forget[0])
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2479
        r = repo.update(node, False, True, update.has_key, False, wlock=wlock,
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2480
                        show_stats=False)
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2481
        repo.dirstate.update(add[0], 'a')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2482
        repo.dirstate.update(undelete[0], 'n')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2483
        repo.dirstate.update(remove[0], 'r')
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  2484
        return r
588
0c3bae18403b [PATCH] hg revert
mpm@selenic.com
parents: 582
diff changeset
  2485
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2486
def rollback(ui, repo):
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2487
    """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
  2488
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2489
    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
  2490
    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
  2491
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2492
    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
  2493
    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
  2494
    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
  2495
    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
  2496
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2497
      commit
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2498
      import
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2499
      pull
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2500
      push (with this repository as destination)
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2501
      unbundle
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2502
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2503
    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
  2504
    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
  2505
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2506
    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
  2507
    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
  2508
    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
  2509
    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
  2510
    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
  2511
    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
  2512
    """
2362
482d3fb47d80 Renamed localrepo.undo() to rollback() and talk about "rollback information".
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2356
diff changeset
  2513
    repo.rollback()
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2514
468
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2515
def root(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2516
    """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
  2517
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2518
    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
  2519
    """
468
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2520
    ui.write(repo.root + "\n")
157675add351 [PATCH] add "root" command
mpm@selenic.com
parents: 467
diff changeset
  2521
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2522
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
  2523
    """export the repository via HTTP
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2524
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2525
    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
  2526
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2527
    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
  2528
    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
  2529
    """
624
876333a295ff Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents: 618
diff changeset
  2530
876333a295ff Add an sshrepository class and hg serve --stdio
Matt Mackall <mpm@selenic.com>
parents: 618
diff changeset
  2531
    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
  2532
        if repo is None:
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2533
            raise hg.RepoError(_('no repo found'))
2396
8d44649df03b refactor ssh server.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2392
diff changeset
  2534
        s = sshserver.sshserver(ui, repo)
8d44649df03b refactor ssh server.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2392
diff changeset
  2535
        s.serve_forever()
2363
fa4c11751367 Give a response to unknown SSH commands
Matt Mackall <mpm@selenic.com>
parents: 2362
diff changeset
  2536
2125
3610d9468b1e Use string literal concatenation for optlist and import -p option
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2124
diff changeset
  2537
    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
  2538
               " accesslog errorlog webdir_conf")
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2539
    for o in optlist.split():
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2540
        if opts[o]:
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2541
            ui.setconfig("web", o, opts[o])
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2542
2127
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2543
    if repo is None and not ui.config("web", "webdir_conf"):
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2544
        raise hg.RepoError(_('no repo found'))
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  2545
1741
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2546
    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
  2547
        rfd, wfd = os.pipe()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2548
        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
  2549
        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
  2550
        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
  2551
                         args[0], args)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2552
        os.close(wfd)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2553
        os.read(rfd, 1)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2554
        os._exit(0)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2555
1177
862f53c1d0f9 hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1147
diff changeset
  2556
    try:
2392
8238a3f039e6 Adjusting hgweb splitup to be a little cleaner.
Eric Hopper <hopper@omnifarious.org>
parents: 2362
diff changeset
  2557
        httpd = hgweb.server.create_server(ui, repo)
1177
862f53c1d0f9 hg serve: print a more useful error message if server can't start.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1147
diff changeset
  2558
    except socket.error, inst:
1607
d72d27ee72b9 add '_' to several strings
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1602
diff changeset
  2559
        raise util.Abort(_('cannot start server: ') + inst.args[1])
987
bfe12654764d hgweb: change startup argument processing
mpm@selenic.com
parents: 981
diff changeset
  2560
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2561
    if ui.verbose:
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2562
        addr, port = httpd.socket.getsockname()
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2563
        if addr == '0.0.0.0':
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2564
            addr = socket.gethostname()
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2565
        else:
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2566
            try:
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2567
                addr = socket.gethostbyaddr(addr)[0]
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2568
            except socket.error:
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2569
                pass
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2570
        if port != 80:
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
  2571
            ui.status(_('listening at http://%s:%d/\n') % (addr, port))
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2572
        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
  2573
            ui.status(_('listening at http://%s/\n') % addr)
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2574
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2575
    if opts['pid_file']:
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2576
        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
  2577
        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
  2578
        fp.close()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2579
1741
9777298fed84 stop read end of pipe from staying open forever in child process.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1740
diff changeset
  2580
    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
  2581
        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
  2582
        os.close(rfd)
1740
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2583
        os.write(wfd, 'y')
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2584
        os.close(wfd)
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2585
        sys.stdout.flush()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2586
        sys.stderr.flush()
f95654385065 add --daemon option to serve command. for issue 45.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1736
diff changeset
  2587
        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
  2588
        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
  2589
        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
  2590
        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
  2591
        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
  2592
603
bc5d058e65e9 [PATCH] Get "hg serve" to print the URL being served
mpm@selenic.com
parents: 596
diff changeset
  2593
    httpd.serve_forever()
500
ebc4714a7632 [PATCH] Clean up destination directory if a clone fails.
mpm@selenic.com
parents: 499
diff changeset
  2594
731
91ca3afab8e8 Add name matching to status command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 729
diff changeset
  2595
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
  2596
    """show changed files in the working directory
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
  2597
1568
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
  2598
    Show changed files in the repository.  If names are
1d7d0c07e8f3 make all commands be repo-wide by default
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1567
diff changeset
  2599
    given, only files that match are shown.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2600
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2601
    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
  2602
    M = modified
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2603
    A = added
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2604
    R = removed
1619
1ba0d7041ac4 Distinguish removed and deleted files. Tests are not fixed yet.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1618
diff changeset
  2605
    ! = deleted, but still tracked
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2606
    ? = 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
  2607
    I = ignored (not shown by default)
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2608
    """
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
  2609
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2610
    show_ignored = opts['ignored'] and True or False
1625
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  2611
    files, matchfn, anypats = matchpats(repo, pats, opts)
e1bcf7fa983f correct the relative path when walking from a subdir
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1622
diff changeset
  2612
    cwd = (pats and repo.getcwd()) or ''
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2613
    modified, added, removed, deleted, unknown, ignored = [
1618
ff339dd21976 Renamed c, a, d, u to modified, added, removed, unknown for users of changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1615
diff changeset
  2614
        [util.pathto(cwd, x) for x in n]
2022
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2615
        for n in repo.changes(files=files, match=matchfn,
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2616
                              show_ignored=show_ignored)]
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
  2617
1966
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2618
    changetypes = [('modified', 'M', modified),
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2619
                   ('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
  2620
                   ('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
  2621
                   ('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
  2622
                   ('unknown', '?', unknown),
a59da8cc35e4 New option -i/--ignored for 'hg status' to show ignored files.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2020
diff changeset
  2623
                   ('ignored', 'I', ignored)]
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2624
1085
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2625
    end = opts['print0'] and '\0' or '\n'
1106
95a044b73bd5 Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1105
diff changeset
  2626
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2627
    for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]]
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2628
                               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
  2629
        if opts['no_status']:
1085
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2630
            format = "%%s%s" % end
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2631
        else:
1966
f8b0e73e320f hg status cleanups: Don't translate long options, remove stray semicolon.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1965
diff changeset
  2632
            format = "%s %%s%s" % (char, end)
1106
95a044b73bd5 Whitespace cleanup.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1105
diff changeset
  2633
842
8fb488773063 Rewritten change type selection for hg status.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 841
diff changeset
  2634
        for f in changes:
1085
6f94688b81b6 status: added option -p and -0 to assist xargs
TK Soh <teekaysoh@yahoo.com>
parents: 1081
diff changeset
  2635
            ui.write(format % f)
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
  2636
1596
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2637
def tag(ui, repo, name, rev_=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2638
    """add a tag for the current tip or a given revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2639
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2640
    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
  2641
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2642
    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
  2643
    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
  2644
    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
  2645
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2646
    If no revision is given, the tip is used.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2647
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2648
    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
  2649
    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
  2650
    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
  2651
    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
  2652
    shared among repositories).
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2653
    """
401
af4848f83e68 From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents: 396
diff changeset
  2654
    if name == "tip":
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
  2655
        raise util.Abort(_("the name 'tip' is reserved"))
1654
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2656
    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
  2657
        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
  2658
                  "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
  2659
        if opts['rev']:
b7fc961507db deprecate the use of 'hg tag NAME [REV]'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1648
diff changeset
  2660
            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
  2661
    if opts['rev']:
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2662
        rev_ = opts['rev']
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2663
    if rev_:
41366b7d6709 fix 'hg tag <tagname> <revision>
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1589
diff changeset
  2664
        r = hex(repo.lookup(rev_))
609
2acf1f5df2e6 [PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents: 607
diff changeset
  2665
    else:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  2666
        r = hex(repo.changelog.tip())
609
2acf1f5df2e6 [PATCH] hg tag: local tag support in file .hg/localtags
Matt Mackall <mpm@selenic.com>
parents: 607
diff changeset
  2667
2601
00fc88b0b256 move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2600
diff changeset
  2668
    repo.tag(name, r, opts['local'], opts['message'], opts['user'],
00fc88b0b256 move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2600
diff changeset
  2669
             opts['date'])
401
af4848f83e68 From: Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
mpm@selenic.com
parents: 396
diff changeset
  2670
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2671
def tags(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2672
    """list repository tags
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2673
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2674
    List the repository tags.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2675
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2676
    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
  2677
    """
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2678
343
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 340
diff changeset
  2679
    l = repo.tagslist()
d7df759d0e97 rework all code using tags
mpm@selenic.com
parents: 340
diff changeset
  2680
    l.reverse()
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2681
    for t, n in l:
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2682
        try:
1092
0a02315976ff commands: use node functions directly
mpm@selenic.com
parents: 1090
diff changeset
  2683
            r = "%5d:%s" % (repo.changelog.rev(n), hex(n))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2684
        except KeyError:
477
520540fd6b64 Handle errors in .hgtags or hgrc [tags] section more gracefully.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 470
diff changeset
  2685
            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
  2686
        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
  2687
            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
  2688
        else:
107dc72880f8 Make 'hg tags -q' only list tag names without revision numbers and hashes,
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2034
diff changeset
  2689
            ui.write("%-30s %s\n" % (t, r))
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
  2690
1731
251729df9cc6 add -p option to tip. for issue 64.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1728
diff changeset
  2691
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
  2692
    """show the tip revision
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2693
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2694
    Show the tip revision.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2695
    """
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2696
    n = repo.changelog.tip()
1762
8eaa8e06a364 Add option -b/--branch to hg tip (as done for hg parents).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1761
diff changeset
  2697
    br = None
1763
fa34a74efc40 Make option --branch vs. --branches more consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1762
diff changeset
  2698
    if opts['branches']:
1762
8eaa8e06a364 Add option -b/--branch to hg tip (as done for hg parents).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1761
diff changeset
  2699
        br = repo.branchlookup([n])
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2700
    show_changeset(ui, repo, opts).show(changenode=n, brinfo=br)
1731
251729df9cc6 add -p option to tip. for issue 64.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1728
diff changeset
  2701
    if opts['patch']:
251729df9cc6 add -p option to tip. for issue 64.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1728
diff changeset
  2702
        dodiff(ui, ui, repo, repo.changelog.parents(n)[0], n)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
  2703
1600
728fd9584993 add --update support to 'hg unbundle'
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1596
diff changeset
  2704
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
  2705
    """apply a changegroup file
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2706
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2707
    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
  2708
    command.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2709
    """
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2710
    f = urllib.urlopen(fname)
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2711
1980
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2712
    header = f.read(6)
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2713
    if not header.startswith("HG"):
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2714
        raise util.Abort(_("%s: not a Mercurial bundle file") % fname)
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2715
    elif not header.startswith("HG10"):
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2716
        raise util.Abort(_("%s: unknown bundle version") % fname)
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2717
    elif header == "HG10BZ":
1940
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2718
        def generator(f):
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2719
            zd = bz2.BZ2Decompressor()
1980
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2720
            zd.decompress("BZ")
1940
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2721
            for chunk in f:
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2722
                yield zd.decompress(chunk)
1980
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2723
    elif header == "HG10UN":
1940
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2724
        def generator(f):
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2725
            for chunk in f:
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2726
                yield chunk
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2727
    else:
1980
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2728
        raise util.Abort(_("%s: unknown bundle compression type")
dfb796786337 use HG10UN header for uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1979
diff changeset
  2729
                         % fname)
1940
7ae177a70f54 add a new bundle type: uncompressed bundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1920
diff changeset
  2730
    gen = generator(util.filechunkiter(f, 4096))
2230
332950340788 localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2227
diff changeset
  2731
    modheads = repo.addchangegroup(util.chunkbuffer(gen), 'unbundle')
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  2732
    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
  2733
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  2734
def undo(ui, repo):
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2735
    """undo the last commit or pull (DEPRECATED)
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2736
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2737
    (DEPRECATED)
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2738
    This command is now deprecated and will be removed in a future
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2739
    release. Please use the rollback command instead.  For usage
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  2740
    instructions, see the rollback command.
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  2741
    """
2238
25af3f17ce95 undo: add "deprecated" message to output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2230
diff changeset
  2742
    ui.warn(_('(the undo command is deprecated; use rollback instead)\n'))
2362
482d3fb47d80 Renamed localrepo.undo() to rollback() and talk about "rollback information".
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2356
diff changeset
  2743
    repo.rollback()
210
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 209
diff changeset
  2744
1581
db10b7114de0 abort when merging two heads and repository has local changes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1571
diff changeset
  2745
def update(ui, repo, node=None, merge=False, clean=False, force=None,
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2746
           branch=None, **opts):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2747
    """update or merge working directory
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2748
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2749
    Update the working directory to the specified revision.
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2750
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2751
    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
  2752
    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
  2753
    requested version, the result is the requested version.
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2754
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2755
    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
  2756
    merge command.
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2757
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2758
    By default, update will refuse to run if doing so would require
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2759
    merging or discarding local changes.
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2760
    """
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2761
    if merge:
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2762
        ui.warn(_('(the -m/--merge option is deprecated; '
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2763
                  'use the merge command instead)\n'))
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2764
    return doupdate(ui, repo, node, merge, clean, force, branch, **opts)
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2765
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2766
def doupdate(ui, repo, node=None, merge=False, clean=False, force=None,
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  2767
             branch=None, **opts):
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2768
    if branch:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2769
        br = repo.branchlookup(branch=branch)
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2770
        found = []
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2771
        for x in br:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2772
            if branch in br[x]:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2773
                found.append(x)
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2774
        if len(found) > 1:
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
  2775
            ui.warn(_("Found multiple heads for %s\n") % branch)
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2776
            for x in found:
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  2777
                show_changeset(ui, repo, opts).show(changenode=x, brinfo=br)
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2778
            return 1
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2779
        if len(found) == 1:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2780
            node = found[0]
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
  2781
            ui.warn(_("Using head %s for branch %s\n") % (short(node), branch))
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2782
        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
  2783
            ui.warn(_("branch %s not found\n") % (branch))
898
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2784
            return 1
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2785
    else:
3616c0d7ab88 Add searching for named branches
mason@suse.com
parents: 896
diff changeset
  2786
        node = node and repo.lookup(node) or repo.changelog.tip()
1581
db10b7114de0 abort when merging two heads and repository has local changes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1571
diff changeset
  2787
    return repo.update(node, allow=merge, force=clean, forcemerge=force)
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
  2788
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
  2789
def verify(ui, repo):
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2790
    """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
  2791
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2792
    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
  2793
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2794
    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
  2795
    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
  2796
    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
  2797
    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
  2798
    """
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
  2799
    return repo.verify()
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
  2800
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2801
# Command options and aliases are listed here, alphabetically
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
  2802
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  2803
table = {
841
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2804
    "^add":
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2805
        (add,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2806
         [('I', 'include', [], _('include names matching the given patterns')),
2411
734df6333ca4 add: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2410
diff changeset
  2807
          ('X', 'exclude', [], _('exclude names matching the given patterns')),
2416
04736f38d74f make description of -n option better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2415
diff changeset
  2808
          ('n', 'dry-run', None, _('do not perform actions, just print output'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2809
         _('hg add [OPTION]... [FILE]...')),
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
  2810
    "debugaddremove|addremove":
841
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2811
        (addremove,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2812
         [('I', 'include', [], _('include names matching the given patterns')),
2412
e5cb39577b9f addremove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2411
diff changeset
  2813
          ('X', 'exclude', [], _('exclude names matching the given patterns')),
2416
04736f38d74f make description of -n option better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2415
diff changeset
  2814
          ('n', 'dry-run', None, _('do not perform actions, just print output'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2815
         _('hg addremove [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2816
    "^annotate":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2817
        (annotate,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2818
         [('r', 'rev', '', _('annotate the specified revision')),
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
          ('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
  2820
          ('u', 'user', None, _('list the author')),
1522
d07d729ce306 Added --date option to annotate.
lupus@debian.org
parents: 1519
diff changeset
  2821
          ('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
  2822
          ('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
  2823
          ('c', 'changeset', None, _('list the changeset')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2824
          ('I', 'include', [], _('include names matching the given patterns')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2825
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2826
         _('hg annotate [-r REV] [-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
  2827
    "archive":
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2828
        (archive,
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2829
         [('', '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
  2830
          ('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
  2831
          ('r', 'rev', '', _('revision to distribute')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2832
          ('t', 'type', '', _('type of distribution to create')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2833
          ('I', 'include', [], _('include names matching the given patterns')),
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2834
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  2835
         _('hg archive [OPTION]... DEST')),
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2836
    "backout":
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2837
        (backout,
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2838
         [('', 'merge', None,
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2839
           _('merge with old dirstate parent after backout')),
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2840
          ('m', 'message', '', _('use <text> as commit message')),
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2841
          ('l', 'logfile', '', _('read commit message from <file>')),
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2842
          ('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
  2843
          ('', 'parent', '', _('parent to choose when backing out merge')),
2158
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2844
          ('u', 'user', '', _('record user as committer')),
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2845
          ('I', 'include', [], _('include names matching the given patterns')),
ec96c4518236 add backout command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2153
diff changeset
  2846
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
2159
5c34b98ad6b1 Small cleanups to backout command:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2158
diff changeset
  2847
         _('hg backout [OPTION]... REV')),
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2848
    "bundle":
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  2849
        (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
  2850
         [('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
  2851
           _('run even when remote repository is unrelated'))],
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
  2852
         _('hg bundle FILE DEST')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2853
    "cat":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2854
        (cat,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2855
         [('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
  2856
          ('r', 'rev', '', _('print the given revision')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2857
          ('I', 'include', [], _('include names matching the given patterns')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2858
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
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
  2859
         _('hg cat [OPTION]... FILE...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2860
    "^clone":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2861
        (clone,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2862
         [('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
  2863
          ('r', 'rev', [],
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2864
           _('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
  2865
          ('', 'pull', None, _('use pull protocol to copy metadata')),
2613
479e26afa10f clone: do not make streaming default. add --stream option instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2601
diff changeset
  2866
          ('', 'stream', None, _('use streaming protocol (fast over LAN)')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2867
          ('e', 'ssh', '', _('specify ssh command to use')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2868
          ('', 'remotecmd', '',
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2869
           _('specify hg command to run on the remote side'))],
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
  2870
         _('hg clone [OPTION]... SOURCE [DEST]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2871
    "^commit|ci":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2872
        (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
  2873
         [('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
  2874
           _('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
  2875
          ('m', 'message', '', _('use <text> as commit message')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2876
          ('l', 'logfile', '', _('read the commit message from <file>')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2877
          ('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
  2878
          ('u', 'user', '', _('record user as commiter')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2879
          ('I', 'include', [], _('include names matching the given patterns')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2880
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
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
  2881
         _('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
  2882
    "copy|cp":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2883
        (copy,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2884
         [('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
  2885
          ('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
  2886
           _('forcibly copy over an existing managed file')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2887
          ('I', 'include', [], _('include names matching the given patterns')),
2413
c1ec81319870 copy: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2412
diff changeset
  2888
          ('X', 'exclude', [], _('exclude names matching the given patterns')),
2416
04736f38d74f make description of -n option better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2415
diff changeset
  2889
          ('n', 'dry-run', None, _('do not perform actions, just print output'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2890
         _('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
  2891
    "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
  2892
    "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
  2893
        (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
  2894
         [('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
  2895
         _('debugcomplete [-o] CMD')),
1755
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  2896
    "debugrebuildstate":
a8f7791e3680 add 'debugrebuildstate' to rebuild the dirstate from a given revision
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1754
diff changeset
  2897
        (debugrebuildstate,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2898
         [('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
  2899
         _('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
  2900
    "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')),
2410
1e80d47b8581 debugconfig: allow to print by section and exact item name
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2407
diff changeset
  2901
    "debugconfig": (debugconfig, [], _('debugconfig [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
  2902
    "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
  2903
    "debugstate": (debugstate, [], _('debugstate')),
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
  2904
    "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
  2905
    "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
  2906
    "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
  2907
    "debugrename": (debugrename, [], _('debugrename FILE [REV]')),
841
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2908
    "debugwalk":
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2909
        (debugwalk,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2910
         [('I', 'include', [], _('include names matching the given patterns')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2911
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
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
         _('debugwalk [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2913
    "^diff":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2914
        (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
  2915
         [('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
  2916
          ('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
  2917
          ('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
  2918
           _('show which function each change is in')),
9b92b71d5dd7 add -w and -p options to diff. this is for issue 126.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1720
diff changeset
  2919
          ('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
  2920
           _('ignore white space when comparing lines')),
2580
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2921
          ('b', 'ignore-space-change', None,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2922
           _('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
  2923
          ('B', 'ignore-blank-lines', None,
a20a1bb0c396 diff: add -b/-B options
Haakon Riiser <haakon.riiser@fys.uio.no>
parents: 2579
diff changeset
  2924
           _('ignore changes whose lines are all blank')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2925
          ('I', 'include', [], _('include names matching the given patterns')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2926
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
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
  2927
         _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2928
    "^export":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2929
        (export,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2930
         [('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
  2931
          ('a', 'text', None, _('treat all files as text')),
bcdc030c59f8 add a --switch-parent option to export against the other parent
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1570
diff changeset
  2932
          ('', 'switch-parent', None, _('diff against the second parent'))],
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
  2933
         _('hg export [-a] [-o OUTFILESPEC] REV...')),
2140
6447a32aefce Make the deprecated forget an alias of debugforget.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2135
diff changeset
  2934
    "debugforget|forget":
841
03cc2ba291d1 Realigned command table again.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 840
diff changeset
  2935
        (forget,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2936
         [('I', 'include', [], _('include names matching the given patterns')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2937
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2938
         _('hg forget [OPTION]... FILE...')),
1065
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  2939
    "grep":
6e94c0365d98 Cleanups to commands.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1062
diff changeset
  2940
        (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
  2941
         [('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
  2942
          ('', 'all', None, _('print all revisions that match')),
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
  2943
          ('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
  2944
          ('l', 'files-with-matches', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2945
           _('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
  2946
          ('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
  2947
          ('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
  2948
          ('u', 'user', None, _('print user who committed change')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2949
          ('I', 'include', [], _('include names matching the given patterns')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2950
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2951
         _('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
  2952
    "heads":
65763ff9fa53 Update online help of hg heads for new --branches option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 904
diff changeset
  2953
        (heads,
1763
fa34a74efc40 Make option --branch vs. --branches more consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1762
diff changeset
  2954
         [('b', 'branches', None, _('show branches')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  2955
          ('', '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
  2956
          ('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
  2957
          ('', 'template', '', _('display with template'))],
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
  2958
         _('hg heads [-b] [-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
  2959
    "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
  2960
    "identify|id": (identify, [], _('hg identify')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2961
    "import|patch":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2962
        (import_,
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2963
         [('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
  2964
           _('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
  2965
             'meaning as the corresponding patch option')),
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  2966
          ('m', 'message', '', _('use <text> as commit message')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  2967
          ('b', 'base', '', _('base path')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2968
          ('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
  2969
           _('skip check for outstanding uncommitted changes'))],
2458
9dd93deef3c9 change log message creation when using 'hg import'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2428
diff changeset
  2970
         _('hg import [-p NUM] [-b BASE] [-m MESSAGE] [-f] PATCH...')),
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  2971
    "incoming|in": (incoming,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  2972
         [('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
  2973
          ('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
  2974
           _('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
  2975
          ('', '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
  2976
          ('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
  2977
          ('', '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
  2978
          ('p', 'patch', None, _('show patch')),
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2979
          ('r', 'rev', [], _('a specific revision 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
  2980
          ('', 'template', '', _('display with template')),
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  2981
          ('e', 'ssh', '', _('specify ssh command to use')),
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  2982
          ('', 'remotecmd', '',
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  2983
           _('specify hg command to run on the remote side'))],
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  2984
         _('hg incoming [-p] [-n] [-M] [-r REV]...'
2544
0ab63318bc36 Added missing space in continued string.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2521
diff changeset
  2985
           ' [--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
  2986
    "^init":
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
  2987
        (init,
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
  2988
         [('e', 'ssh', '', _('specify ssh command to use')),
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
  2989
          ('', 'remotecmd', '',
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
  2990
           _('specify hg command to run on the remote side'))],
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
  2991
         _('hg init [-e FILE] [--remotecmd FILE] [DEST]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2992
    "locate":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  2993
        (locate,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2994
         [('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
  2995
          ('0', 'print0', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2996
           _('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
  2997
          ('f', 'fullpath', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  2998
           _('print complete paths from the filesystem root')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  2999
          ('I', 'include', [], _('include names matching the given patterns')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  3000
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
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
  3001
         _('hg locate [OPTION]... [PATTERN]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3002
    "^log|history":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3003
        (log,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3004
         [('b', 'branches', None, _('show branches')),
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
  3005
          ('k', 'keyword', [], _('search for a keyword')),
1756
f29857aaa053 add -l,--limit to log command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1747
diff changeset
  3006
          ('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
  3007
          ('r', 'rev', [], _('show the specified revision or range')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3008
          ('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
  3009
          ('', '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
  3010
          ('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
  3011
          ('p', 'patch', None, _('show patch')),
1920
b7cc0f323a4c merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1917 1894
diff changeset
  3012
          ('', 'template', '', _('display with template')),
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3013
          ('I', 'include', [], _('include names matching the given patterns')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3014
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3015
         _('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
  3016
    "manifest": (manifest, [], _('hg manifest [REV]')),
2019
ced2d3620f95 add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3017
    "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
  3018
        (merge,
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  3019
         [('b', 'branch', '', _('merge with head of a specific branch')),
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  3020
          ('f', 'force', None, _('force a merge with outstanding changes'))],
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  3021
         _('hg merge [-b TAG] [-f] [REV]')),
1253
a45e717c61a8 Add rename/mv command.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1250
diff changeset
  3022
    "outgoing|out": (outgoing,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3023
         [('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
  3024
          ('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
  3025
           _('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
  3026
          ('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
  3027
          ('', '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
  3028
          ('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
  3029
          ('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
  3030
          ('', 'template', '', _('display with template')),
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  3031
          ('e', 'ssh', '', _('specify ssh command to use')),
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  3032
          ('', 'remotecmd', '',
62aa1b90414f add remotecmd/ssh option support to incoming/outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1959
diff changeset
  3033
           _('specify hg command to run on the remote side'))],
2521
9cceb439048b add -r/--rev arguments to incoming and outgoing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2515
diff changeset
  3034
         _('hg outgoing [-M] [-p] [-n] [-r REV]... [DEST]')),
1724
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  3035
    "^parents":
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  3036
        (parents,
1907
7718885070b1 let commands that show changesets use templates.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1800
diff changeset
  3037
         [('b', 'branches', None, _('show branches')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  3038
          ('', '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
  3039
          ('', 'template', '', _('display with template'))],
1724
5a36609f73a7 add a -b/--branch option to 'hg parents'
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1720
diff changeset
  3040
         _('hg parents [-b] [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
  3041
    "paths": (paths, [], _('hg paths [NAME]')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3042
    "^pull":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3043
        (pull,
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3044
         [('u', 'update', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3045
           _('update the working directory to tip after pull')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3046
          ('e', 'ssh', '', _('specify ssh command to use')),
1959
d53a18f592be add -f/--force to pull, incoming, outgoing, to work on unrelated repo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1948
diff changeset
  3047
          ('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
  3048
           _('run even when remote repository is unrelated')),
1469
0847c45ffee6 Merge bundle -r work from Eric Hopper
Matt Mackall <mpm@selenic.com>
parents: 1456 1467
diff changeset
  3049
          ('r', 'rev', [], _('a specific revision you would like to pull')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3050
          ('', 'remotecmd', '',
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3051
           _('specify hg command to run on the remote side'))],
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
  3052
         _('hg pull [-u] [-r REV]... [-e FILE] [--remotecmd FILE] [SOURCE]')),
818
eef752151556 Actually implement the -f switch for push
mpm@selenic.com
parents: 815
diff changeset
  3053
    "^push":
eef752151556 Actually implement the -f switch for push
mpm@selenic.com
parents: 815
diff changeset
  3054
        (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
  3055
         [('f', 'force', None, _('force push')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3056
          ('e', 'ssh', '', _('specify ssh command to use')),
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
  3057
          ('r', 'rev', [], _('a specific revision you would like to push')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3058
          ('', 'remotecmd', '',
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3059
           _('specify hg command to run on the remote side'))],
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
  3060
         _('hg push [-f] [-r REV]... [-e FILE] [--remotecmd FILE] [DEST]')),
1818
9bbc7b304c34 Make the deprecated rawcommit an alias of debugrawcommit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1816
diff changeset
  3061
    "debugrawcommit|rawcommit":
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3062
        (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
  3063
         [('p', 'parent', [], _('parent')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3064
          ('d', 'date', '', _('date code')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3065
          ('u', 'user', '', _('user')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3066
          ('F', 'files', '', _('file list')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3067
          ('m', 'message', '', _('commit message')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3068
          ('l', 'logfile', '', _('commit message file'))],
1818
9bbc7b304c34 Make the deprecated rawcommit an alias of debugrawcommit.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1816
diff changeset
  3069
         _('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
  3070
    "recover": (recover, [], _('hg recover')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3071
    "^remove|rm":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3072
        (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
  3073
         [('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
  3074
          ('f', 'force', None, _('remove file even if modified')),
1869
42c76ec7a8d4 Reordered options for remove, fixed synopsis for rename.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1867
diff changeset
  3075
          ('I', 'include', [], _('include names matching the given patterns')),
42c76ec7a8d4 Reordered options for remove, fixed synopsis for rename.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1867
diff changeset
  3076
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3077
         _('hg remove [OPTION]... FILE...')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3078
    "rename|mv":
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3079
        (rename,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3080
         [('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
  3081
          ('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
  3082
           _('forcibly copy over an existing managed file')),
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3083
          ('I', 'include', [], _('include names matching the given patterns')),
2414
86e07466bcfc remove: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2413
diff changeset
  3084
          ('X', 'exclude', [], _('exclude names matching the given patterns')),
2416
04736f38d74f make description of -n option better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2415
diff changeset
  3085
          ('n', 'dry-run', None, _('do not perform actions, just print output'))],
1869
42c76ec7a8d4 Reordered options for remove, fixed synopsis for rename.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1867
diff changeset
  3086
         _('hg rename [OPTION]... SOURCE... DEST')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3087
    "^revert":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3088
        (revert,
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3089
         [('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
  3090
          ('', 'no-backup', None, _('do not save backup copies of files')),
d436b21b20dc rewrite revert command. fix issues 93, 123, 147.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2022
diff changeset
  3091
          ('I', 'include', [], _('include names matching given patterns')),
2415
dec79ed61ee1 revert: add -n/--dry-run option
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2414
diff changeset
  3092
          ('X', 'exclude', [], _('exclude names matching given patterns')),
2416
04736f38d74f make description of -n option better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2415
diff changeset
  3093
          ('n', 'dry-run', None, _('do not perform actions, just print output'))],
1816
08f4398bdb1a Updated help synopsises and reordered some options. Dropped [-n] from revert.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1812
diff changeset
  3094
         _('hg revert [-r REV] [NAME]...')),
2227
4f072bb06e89 deprecate undo command, replace with rollback command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2212
diff changeset
  3095
    "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
  3096
    "root": (root, [], _('hg root')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3097
    "^serve":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3098
        (serve,
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  3099
         [('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
  3100
          ('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
  3101
          ('', '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
  3102
          ('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
  3103
          ('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
  3104
          ('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
  3105
          ('n', 'name', '',
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3106
           _('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
  3107
          ('', '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
  3108
                                    ' (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
  3109
          ('', '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
  3110
          ('', '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
  3111
          ('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
  3112
          ('', '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
  3113
          ('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
  3114
         _('hg serve [OPTION]...')),
1507
cd8fadd8c689 Add explicit 'st' alias for status
Matt Mackall <mpm@selenic.com>
parents: 1506
diff changeset
  3115
    "^status|st":
840
141744605b51 hg status: added options to select files by status.
tksoh@users.sourceforge.net
parents: 839
diff changeset
  3116
        (status,
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
  3117
         [('m', 'modified', None, _('show only modified 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
  3118
          ('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
  3119
          ('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
  3120
          ('d', 'deleted', None, _('show only deleted (but tracked) 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
  3121
          ('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
  3122
          ('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
  3123
          ('n', 'no-status', None, _('hide status prefix')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3124
          ('0', 'print0', None,
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3125
           _('end filenames with NUL, for use with xargs')),
1437
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  3126
          ('I', 'include', [], _('include names matching the given patterns')),
ea51d296085f import docstring from doc/hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1436
diff changeset
  3127
          ('X', 'exclude', [], _('exclude names matching the given patterns'))],
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3128
         _('hg status [OPTION]... [FILE]...')),
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3129
    "tag":
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3130
        (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
  3131
         [('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
  3132
          ('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
  3133
          ('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
  3134
          ('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
  3135
          ('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
  3136
         _('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
  3137
    "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
  3138
    "tip":
8eaa8e06a364 Add option -b/--branch to hg tip (as done for hg parents).
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1761
diff changeset
  3139
        (tip,
1763
fa34a74efc40 Make option --branch vs. --branches more consistent.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1762
diff changeset
  3140
         [('b', 'branches', None, _('show branches')),
1913
74cf2b2f43d4 fix some things people wanted to be cleaner.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1910
diff changeset
  3141
          ('', '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
  3142
          ('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
  3143
          ('', 'template', '', _('display with template'))],
1811
6cb548cffdf5 resync commands.py docstrings with hg.1.txt
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1804
diff changeset
  3144
         _('hg tip [-b] [-p]')),
1218
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  3145
    "unbundle":
cde6818e082a Add preliminary support for the bundle and unbundle commands
mpm@selenic.com
parents: 1215
diff changeset
  3146
        (unbundle,
1601
a1b25fb2e764 Error handling for unbundle, fix option line wrapping
Matt Mackall <mpm@selenic.com>
parents: 1600
diff changeset
  3147
         [('u', 'update', None,
a1b25fb2e764 Error handling for unbundle, fix option line wrapping
Matt Mackall <mpm@selenic.com>
parents: 1600
diff changeset
  3148
           _('update the working directory to tip after unbundle'))],
1600
728fd9584993 add --update support to 'hg unbundle'
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1596
diff changeset
  3149
         _('hg unbundle [-u] FILE')),
2241
abd70a92e06f hide deprecated undo command by making it an alias for debugundo.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2238
diff changeset
  3150
    "debugundo|undo": (undo, [], _('hg undo')),
593
ca3c499e94c6 Shorten help
mpm@selenic.com
parents: 592
diff changeset
  3151
    "^update|up|checkout|co":
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3152
        (update,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3153
         [('b', 'branch', '', _('checkout the head of a specific branch')),
2283
e506c14382fd deprecate 'update -m'. use 'merge' instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2272
diff changeset
  3154
          ('m', 'merge', None, _('allow merging of branches (DEPRECATED)')),
1581
db10b7114de0 abort when merging two heads and repository has local changes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1571
diff changeset
  3155
          ('C', 'clean', None, _('overwrite locally modified files')),
2044
b343e7d454b4 Don't allow --style and --template for hg update and hg merge.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2043
diff changeset
  3156
          ('f', 'force', None, _('force a merge with outstanding changes'))],
1581
db10b7114de0 abort when merging two heads and repository has local changes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1571
diff changeset
  3157
         _('hg update [-b TAG] [-m] [-C] [-f] [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
  3158
    "verify": (verify, [], _('hg verify')),
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
  3159
    "version": (show_version, [], _('hg version')),
1046
772507daaa17 Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1044
diff changeset
  3160
}
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3161
1046
772507daaa17 Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1044
diff changeset
  3162
globalopts = [
1894
4c53aaf2d153 Allow symbolic path names in global -R/--repository parameter.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1893
diff changeset
  3163
    ('R', 'repository', '',
4c53aaf2d153 Allow symbolic path names in global -R/--repository parameter.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1893
diff changeset
  3164
     _('repository root directory or symbolic path name')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3165
    ('', 'cwd', '', _('change working directory')),
1602
fb4149eebdd4 strictly adher to 80 chars per line
Muli Ben-Yehuda <mulix@mulix.org>
parents: 1601
diff changeset
  3166
    ('y', 'noninteractive', None,
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3167
     _('do not prompt, assume \'yes\' for any required answers')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3168
    ('q', 'quiet', None, _('suppress output')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3169
    ('v', 'verbose', None, _('enable additional output')),
2293
3dc6f2501dbc add --config global option. allows to set hgrc option on command line.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2287
diff changeset
  3170
    ('', 'config', [], _('set/override config option')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3171
    ('', 'debug', None, _('enable debugging output')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3172
    ('', 'debugger', None, _('start debugger')),
2422
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3173
    ('', 'lsprof', None, _('print improved command execution profile')),
1615
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3174
    ('', 'traceback', None, _('print traceback on exception')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3175
    ('', 'time', None, _('time how long the command takes')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3176
    ('', 'profile', None, _('print command execution profile')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3177
    ('', 'version', None, _('output version information and exit')),
83238c1db6de Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1607
diff changeset
  3178
    ('h', 'help', None, _('display help and exit')),
1046
772507daaa17 Sort global options by topic: directories, ui, timing, other
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1044
diff changeset
  3179
]
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3180
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3181
norepo = ("clone init version help debugancestor debugcomplete debugdata"
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3182
          " debugindex debugindexdot")
2127
8a85dbbadddf Allow 'hg serve --webdir-conf foo' to be run outside a repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2125
diff changeset
  3183
optionalrepo = ("paths serve debugconfig")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3184
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3185
def findpossible(cmd):
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3186
    """
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3187
    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
  3188
    for each matching command.
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3189
    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
  3190
    """
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3191
    choice = {}
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3192
    debugchoice = {}
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3193
    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
  3194
        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
  3195
        found = None
1506
11c8b81f95fe if unambigious command name are passed, use them
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1505
diff changeset
  3196
        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
  3197
            found = cmd
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3198
        else:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3199
            for a in aliases:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3200
                if a.startswith(cmd):
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3201
                    found = a
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3202
                    break
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3203
        if found is not None:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3204
            if aliases[0].startswith("debug"):
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3205
                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
  3206
            else:
f70952384ae7 Make completion for debugindex<tab><tab> show debugindexdot, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2045
diff changeset
  3207
                choice[found] = (aliases, table[e])
1739
57de7e1a81d2 AmbiguousCommand is raised too soon.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1736
diff changeset
  3208
1850
05f6c0d1bad8 Hide debug commands in ambiguous command list, unless no normal command matches.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1849
diff changeset
  3209
    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
  3210
        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
  3211
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3212
    return choice
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3213
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3214
def findcmd(cmd):
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3215
    """Return (aliases, command table entry) for command string."""
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3216
    choice = findpossible(cmd)
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3217
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3218
    if choice.has_key(cmd):
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3219
        return choice[cmd]
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3220
1848
bb70ffebe77b show choices on ambiguous commands
TK Soh <teekaysoh@yahoo.com>
parents: 1840
diff changeset
  3221
    if len(choice) > 1:
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3222
        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
  3223
        clist.sort()
1848
bb70ffebe77b show choices on ambiguous commands
TK Soh <teekaysoh@yahoo.com>
parents: 1840
diff changeset
  3224
        raise AmbiguousCommand(cmd, clist)
1739
57de7e1a81d2 AmbiguousCommand is raised too soon.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 1736
diff changeset
  3225
1517
b582dbc16165 Canonicalize command when using aliases or prefix matching.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1507
diff changeset
  3226
    if choice:
1887
913397c27cd8 new command debugcomplete
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1875
diff changeset
  3227
        return choice.values()[0]
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3228
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3229
    raise UnknownCommand(cmd)
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3230
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
  3231
def catchterm(*args):
2153
635653cd73ab move SignalInterrupt class into util module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2140
diff changeset
  3232
    raise util.SignalInterrupt
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
  3233
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3234
def run():
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3235
    sys.exit(dispatch(sys.argv[1:]))
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
  3236
697
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3237
class ParseError(Exception):
cb1be2327220 Multiple cleanups of things detected by pylint.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 696
diff changeset
  3238
    """Exception raised on errors in parsing the command line."""
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3239
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3240
def parse(ui, args):
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3241
    options = {}
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3242
    cmdoptions = {}
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3243
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3244
    try:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3245
        args = fancyopts.fancyopts(args, globalopts, options)
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3246
    except fancyopts.getopt.GetoptError, inst:
618
4051b78c53c7 Handle unrecognised options correctly.
Bryan O'Sullivan <bos@serpentine.com>
parents: 617
diff changeset
  3247
        raise ParseError(None, inst)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3248
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
  3249
    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
  3250
        cmd, args = args[0], args[1:]
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3251
        aliases, i = findcmd(cmd)
1567
b4956bbbadc9 make command defaults works for aliases
TK Soh <teekaysoh@yahoo.com>
parents: 1565
diff changeset
  3252
        cmd = aliases[0]
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3253
        defaults = ui.config("defaults", cmd)
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3254
        if defaults:
1526
c230939283c3 fix a bug where command defaults suppress global options
TK Soh <teekaysoh@yahoo.com>
parents: 1525
diff changeset
  3255
            args = defaults.split() + 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
  3256
        c = list(i[1])
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3257
    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
  3258
        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
  3259
        c = []
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3260
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3261
    # combine global options into local
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3262
    for o in globalopts:
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3263
        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
  3264
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3265
    try:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3266
        args = fancyopts.fancyopts(args, c, cmdoptions)
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3267
    except fancyopts.getopt.GetoptError, inst:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3268
        raise ParseError(cmd, inst)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3269
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3270
    # separate global options back out
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3271
    for o in globalopts:
592
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3272
        n = o[1]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3273
        options[n] = cmdoptions[n]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3274
        del cmdoptions[n]
74175ce83378 Restructure option handling
mpm@selenic.com
parents: 591
diff changeset
  3275
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
  3276
    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
  3277
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3278
external = {}
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3279
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3280
def findext(name):
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3281
    '''return module with given extension name'''
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3282
    try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3283
        return sys.modules[external[name]]
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3284
    except KeyError:
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3285
        dotname = '.' + name
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3286
        for k, v in external.iteritems():
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3287
            if k.endswith('.' + name) or v == name:
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3288
                return sys.modules[v]
2553
5b426676f616 help: make "hg help EXTENSION" work
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2549
diff changeset
  3289
        raise KeyError(name)
2600
c4325f0a9b91 clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2598
diff changeset
  3290
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3291
def dispatch(args):
2112
2b03c6733efa add "archive" command, like "cvs export" only better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2092
diff changeset
  3292
    for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
2092
1d3c6e63d703 catch SIGBREAK on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2085
diff changeset
  3293
        num = getattr(signal, name, None)
1d3c6e63d703 catch SIGBREAK on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2085
diff changeset
  3294
        if num: signal.signal(num, catchterm)
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3295
1483
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1475
diff changeset
  3296
    try:
2166
d0c02b4dce9a do not check sys.argv from localrepo when running hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2160
diff changeset
  3297
        u = ui.ui(traceback='--traceback' in sys.argv[1:])
1483
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1475
diff changeset
  3298
    except util.Abort, inst:
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1475
diff changeset
  3299
        sys.stderr.write(_("abort: %s\n") % inst)
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3300
        return -1
1483
a4ba63e04134 Fix traceback on bad system hgrc files
Soh Tk-r28629 <tksoh@freescale.com>
parents: 1475
diff changeset
  3301
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3302
    for ext_name, load_from_name in u.extensions():
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3303
        try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3304
            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
  3305
                # 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
  3306
                # 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
  3307
                # 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
  3308
                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
  3309
                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
  3310
            else:
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3311
                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
  3312
                    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
  3313
                    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
  3314
                    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
  3315
                        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
  3316
                    return mod
1889
468730910353 Try to import extensions from the hgext module first.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1887
diff changeset
  3317
                try:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3318
                    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
  3319
                except ImportError:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3320
                    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
  3321
            external[ext_name] = mod.__name__
2428
42b8a1ff46cf honor signals during load of extensions.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2422
diff changeset
  3322
        except (util.SignalInterrupt, KeyboardInterrupt):
42b8a1ff46cf honor signals during load of extensions.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2422
diff changeset
  3323
            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
  3324
        except Exception, inst:
2617
0b4bff2b0ce3 fix bug introduced in b13a98bd078e
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2601
diff changeset
  3325
            u.warn(_("*** failed to import extension %s: %s\n") % (ext_name, inst))
2335
f0680b2d1d64 add ui.print_exc(), make all traceback printing central.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2331
diff changeset
  3326
            if u.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
  3327
                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
  3328
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3329
    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
  3330
        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
  3331
        uisetup = getattr(mod, 'uisetup', None)
2330
b30aa02c85e7 add 'uisetup' function to extension module protocol.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2309
diff changeset
  3332
        if uisetup:
b30aa02c85e7 add 'uisetup' function to extension module protocol.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2309
diff changeset
  3333
            uisetup(u)
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3334
        cmdtable = getattr(mod, 'cmdtable', {})
1295
abcdf14449ea Make contract with extensions optional.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1285
diff changeset
  3335
        for t in cmdtable:
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1068
diff changeset
  3336
            if t in table:
2573
b13a98bd078e fix problems with external module handling. found by benoit boissinot.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2571
diff changeset
  3337
                u.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
  3338
        table.update(cmdtable)
1071
8f0ac653f85e Add support for extension modules
mason@suse.com
parents: 1068
diff changeset
  3339
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3340
    try:
1453
6fbb13b7a59f get command defaults from hgrc
TK Soh <teekaysoh@yahoo.com>
parents: 1447
diff changeset
  3341
        cmd, func, args, options, cmdoptions = parse(u, args)
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3342
        if options["time"]:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3343
            def get_times():
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3344
                t = os.times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3345
                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
  3346
                    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
  3347
                return t
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3348
            s = get_times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3349
            def print_time():
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3350
                t = get_times()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3351
                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
  3352
                    (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
  3353
            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
  3354
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3355
        u.updateopts(options["verbose"], options["debug"], options["quiet"],
2293
3dc6f2501dbc add --config global option. allows to set hgrc option on command line.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2287
diff changeset
  3356
                     not options["noninteractive"], options["traceback"],
3dc6f2501dbc add --config global option. allows to set hgrc option on command line.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2287
diff changeset
  3357
                     options["config"])
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3358
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3359
        # 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
  3360
        if options['debugger']:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3361
            pdb.set_trace()
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3362
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3363
        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
  3364
            if options['cwd']:
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
  3365
                try:
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
  3366
                    os.chdir(options['cwd'])
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
  3367
                except OSError, inst:
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
  3368
                    raise util.Abort('%s: %s' %
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
  3369
                                     (options['cwd'], inst.strerror))
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
  3370
1894
4c53aaf2d153 Allow symbolic path names in global -R/--repository parameter.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1893
diff changeset
  3371
            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
  3372
            repo = path and hg.repository(u, path=path) or None
1857
848152a2e67f Always try to open the repository if -R/--repository is specified.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1851
diff changeset
  3373
1048
7fbb440b2e63 Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1047
diff changeset
  3374
            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
  3375
                return help_(u, cmd, options['version'])
1048
7fbb440b2e63 Added options -h/--help.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1047
diff changeset
  3376
            elif options['version']:
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3377
                return show_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
  3378
            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
  3379
                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
  3380
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3381
            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
  3382
                try:
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3383
                    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
  3384
                        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
  3385
                    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
  3386
                    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
  3387
                        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
  3388
                        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
  3389
                            mod.reposetup(u, repo)
1858
9fab6e903bae Make hg paths and hg debugconfig work with -R/--repository option.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1857
diff changeset
  3390
                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
  3391
                    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
  3392
                        raise
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3393
                d = lambda: func(u, repo, *args, **cmdoptions)
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3394
            else:
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 593
diff changeset
  3395
                d = lambda: func(u, *args, **cmdoptions)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3396
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
  3397
            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
  3398
                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
  3399
                    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
  3400
                    prof = hotshot.Profile("hg.prof")
1832
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3401
                    try:
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3402
                        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
  3403
                            return prof.runcall(d)
1832
7a58bf789965 generate profile even when exception raised.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1823
diff changeset
  3404
                        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
  3405
                            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
  3406
                                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
  3407
                                         '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
  3408
                            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
  3409
                                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
  3410
                            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
  3411
                    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
  3412
                        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
  3413
                        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
  3414
                        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
  3415
                        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
  3416
                        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
  3417
                elif options['lsprof']:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3418
                    try:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3419
                        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
  3420
                    except ImportError:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3421
                        raise util.Abort(_(
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3422
                            '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
  3423
                            '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
  3424
                    p = lsprof.Profiler()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3425
                    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
  3426
                    try:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3427
                        return d()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3428
                    finally:
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3429
                        p.disable()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3430
                        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
  3431
                        stats.sort()
6aa75e77cafe add --lsprof option. 3x faster than --profile, more useful output.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2417
diff changeset
  3432
                        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
  3433
                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
  3434
                    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
  3435
            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
  3436
                u.flush()
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3437
        except:
1225
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3438
            # enter the debugger when we hit an exception
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3439
            if options['debugger']:
ea90162e210c Add --debugger global option
mpm@selenic.com
parents: 1222
diff changeset
  3440
                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
  3441
            u.print_exc()
527
58790c83ce52 [PATCH] Add --traceback option
mpm@selenic.com
parents: 526
diff changeset
  3442
            raise
1875
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3443
    except ParseError, inst:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3444
        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
  3445
            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
  3446
            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
  3447
        else:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3448
            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
  3449
            help_(u, 'shortlist')
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3450
    except AmbiguousCommand, inst:
1920
b7cc0f323a4c merge with crew.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1917 1894
diff changeset
  3451
        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
  3452
                (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
  3453
    except UnknownCommand, inst:
2f4a0734c100 Catch other exceptions (e.g. util.Abort) in parse(), too.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1869
diff changeset
  3454
        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
  3455
        help_(u, 'shortlist')
499
81c563a254be Add exception class for repository errors
mpm@selenic.com
parents: 496
diff changeset
  3456
    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
  3457
        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
  3458
    except lock.LockHeld, inst:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3459
        if inst.errno == errno.ETIMEDOUT:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3460
            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
  3461
        else:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3462
            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
  3463
        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
  3464
    except lock.LockUnavailable, inst:
ff5c9a92f556 fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1996
diff changeset
  3465
        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
  3466
               (inst.desc or inst.filename, inst.strerror))
1214
34706a835d4a Smarter handling of revlog key errors
mpm@selenic.com
parents: 1212
diff changeset
  3467
    except revlog.RevlogError, inst:
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
  3468
        u.warn(_("abort: "), inst, "!\n")
2153
635653cd73ab move SignalInterrupt class into util module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2140
diff changeset
  3469
    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
  3470
        u.warn(_("killed!\n"))
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
  3471
    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
  3472
        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
  3473
            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
  3474
        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
  3475
            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
  3476
                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
  3477
                    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
  3478
            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
  3479
                raise
250
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3480
    except IOError, inst:
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3481
        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
  3482
            u.warn(_("abort: %s\n") % inst)
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3483
        elif hasattr(inst, "reason"):
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
  3484
            u.warn(_("abort: error: %s\n") % inst.reason[1])
395
fbe8834923c5 commands: report http exceptions nicely
mpm@selenic.com
parents: 393
diff changeset
  3485
        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
  3486
            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
  3487
                u.warn(_("broken pipe\n"))
1350
3729e2773cca Fix pipe error regression
Matt Mackall <mpm@selenic.com>
parents: 1342
diff changeset
  3488
        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
  3489
            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
  3490
                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
  3491
            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
  3492
                u.warn(_("abort: %s\n") % inst.strerror)
250
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3493
        else:
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
  3494
            raise
549
92b60cabf808 [PATCH] Catch OSError usefully
mpm@selenic.com
parents: 547
diff changeset
  3495
    except OSError, inst:
92b60cabf808 [PATCH] Catch OSError usefully
mpm@selenic.com
parents: 547
diff changeset
  3496
        if hasattr(inst, "filename"):
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
  3497
            u.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
549
92b60cabf808 [PATCH] Catch OSError usefully
mpm@selenic.com
parents: 547
diff changeset
  3498
        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
  3499
            u.warn(_("abort: %s\n") % inst.strerror)
870
a82eae840447 Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents: 868
diff changeset
  3500
    except util.Abort, inst:
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
  3501
        u.warn(_('abort: '), inst.args[0] % inst.args[1:], '\n')
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3502
    except TypeError, inst:
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3503
        # was this an argument error?
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3504
        tb = traceback.extract_tb(sys.exc_info()[2])
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3505
        if len(tb) > 2: # no
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
  3506
            raise
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3507
        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
  3508
        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
  3509
        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
  3510
    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
  3511
        # 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
  3512
        # 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
  3513
        return inst.code
1215
8b4435aae40a Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents: 1214
diff changeset
  3514
    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
  3515
        u.warn(_("** unknown exception encountered, details follow\n"))
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
  3516
        u.warn(_("** report bug details to 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
  3517
        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
  3518
               % version.get_version())
1215
8b4435aae40a Add reporting instructions to unknown exception backtraces
mpm@selenic.com
parents: 1214
diff changeset
  3519
        raise
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
  3520
2057
fef2d653beaf Never exit directly from commands.dispatch(), but pass return code to caller.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2056
diff changeset
  3521
    return -1