hg
author mpm@selenic.com
Wed, 01 Jun 2005 00:25:42 -0800
changeset 209 63af1db35611
parent 207 ec327cf0d3a9
child 210 d2badbd7d1ad
permissions -rw-r--r--
Beginning of new command parsing interface -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Beginning of new command parsing interface This adds commands.py, with a primary interface dispatch(args) Dispatch searches a table of known commands, handles switches, sets up a repo object if appropriate, and dispatches the command. It also handles KeyboardInterrupt and can handle similar exceptions in the future. If the command is unknown, it falls through to the current command handler. Commands currently handled by the new scheme: help, init, and annotate manifest hash: 134cd032c880985e3f92f82efb8b629dd862ba4c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCnXEGywK+sNU5EO8RAuDAAJ9q7K4w7qGVWv1NWjCPFGO/UJc6VQCdEhMQ sBBlSRzah9QPy8K94catZyg= =wuRf -----END PGP SIGNATURE-----
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     1
#!/usr/bin/env python
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     2
#
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     3
# mercurial - a minimal scalable distributed SCM
193
0a28dfe59f8f Bump the version number to 0.5b for the protocol change
mpm@selenic.com
parents: 192
diff changeset
     4
# v0.5b "katje"
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     5
#
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     6
# Copyright 2005 Matt Mackall <mpm@selenic.com>
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     7
#
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     8
# This software may be used and distributed according to the terms
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     9
# of the GNU General Public License, incorporated herein by reference.
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    10
46
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    11
# the psyco compiler makes commits a bit faster
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    12
# and makes changegroup merge about 20 times slower!
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    13
# try:
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    14
#    import psyco
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    15
#    psyco.full()
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    16
# except:
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
    17
#    pass
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    18
23
018fb8d9ea8d Import time for hg history command
mpm@selenic.com
parents: 22
diff changeset
    19
import sys, os, time
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
    20
from mercurial import hg, mdiff, fancyopts, ui, commands
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    21
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    22
def help():
175
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
    23
    ui.status("""\
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    24
 commands:
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    25
150
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    26
 add [files...]        add the given files in the next commit
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    27
 addremove             add all new files, delete all missing files
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    28
 annotate [files...]   show changeset number per file line
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    29
 branch <path>         create a branch of <path> in this directory
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    30
 checkout [changeset]  checkout the latest or given changeset
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    31
 commit                commit all changes to the repository
150
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    32
 diff [files...]       diff working directory (or selected files)
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    33
 dump <file> [rev]     dump the latest or given revision of a file
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    34
 dumpmanifest [rev]    dump the latest or given revision of the manifest
196
48827121af7e add export, recover, and undo to the man page
jake@edge2.net
parents: 193
diff changeset
    35
 export <rev>          dump the changeset header and diffs for a revision
150
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    36
 history               show changeset history
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    37
 init                  create a new repository in this directory
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    38
 log <file>            show revision history of a single file
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    39
 merge <path>          merge changes from <path> into local repository
163
f38c90953c2c Make undo and recover friendlier
mpm@selenic.com
parents: 162
diff changeset
    40
 recover               rollback an interrupted transaction
150
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    41
 remove [files...]     remove the given files in the next commit
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
    42
 serve                 export the repository via HTTP
150
8029ee2949b8 Add options to annotate for user/rev/changeset
mpm@selenic.com
parents: 145
diff changeset
    43
 status                show new, missing, and changed files in working dir
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
    44
 tags                  show current changeset tags
163
f38c90953c2c Make undo and recover friendlier
mpm@selenic.com
parents: 162
diff changeset
    45
 undo                  undo the last transaction
175
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
    46
""")
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    47
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    48
def filterfiles(list, files):
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    49
    l = [ x for x in list if x in files ]
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
    50
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    51
    for f in files:
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    52
        if f[-1] != os.sep: f += os.sep
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    53
        l += [ x for x in list if x.startswith(f) ]
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    54
    return l
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
    55
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    56
def diff(files = None, node1 = None, node2 = None):
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    57
    def date(c):
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    58
        return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    59
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    60
    if node2:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    61
        change = repo.changelog.read(node2)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    62
        mmap2 = repo.manifest.read(change[0])
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    63
        (c, a, d) = repo.diffrevs(node1, node2)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    64
        def read(f): return repo.file(f).read(mmap2[f])
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    65
        date2 = date(change)
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    66
    else:
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    67
        date2 = time.asctime()
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    68
        if not node1:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    69
            node1 = repo.current
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    70
        (c, a, d) = repo.diffdir(repo.root, node1)
129
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    71
        a = [] # ignore unknown files in repo, by popular request
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    72
        def read(f): return file(os.path.join(repo.root, f)).read()
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    73
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    74
    change = repo.changelog.read(node1)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    75
    mmap = repo.manifest.read(change[0])
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    76
    date1 = date(change)
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    77
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    78
    if files:
129
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    79
        c, a, d = map(lambda x: filterfiles(x, files), (c, a, d))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    80
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    81
    for f in c:
130
e6678a1beb6a Make hg diff handle files that have been added but not yet committed.
mpm@selenic.com
parents: 129
diff changeset
    82
        to = ""
e6678a1beb6a Make hg diff handle files that have been added but not yet committed.
mpm@selenic.com
parents: 129
diff changeset
    83
        if mmap.has_key(f):
e6678a1beb6a Make hg diff handle files that have been added but not yet committed.
mpm@selenic.com
parents: 129
diff changeset
    84
            to = repo.file(f).read(mmap[f])
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    85
        tn = read(f)
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    86
        sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
129
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    87
    for f in a:
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    88
        to = ""
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    89
        tn = read(f)
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    90
        sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    91
    for f in d:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    92
        to = repo.file(f).read(mmap[f])
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    93
        tn = ""
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    94
        sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    95
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
    96
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
    97
try:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
    98
    sys.exit(commands.dispatch(sys.argv[1:]))
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
    99
except commands.UnknownCommand:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
   100
    # fall through
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
   101
    pass
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 207
diff changeset
   102
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   103
options = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   104
opts = [('v', 'verbose', None, 'verbose'),
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
   105
        ('d', 'debug', None, 'debug'),
107
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   106
        ('q', 'quiet', None, 'quiet'),
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   107
        ('y', 'noninteractive', None, 'run non-interactively'),
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   108
        ]
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   109
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   110
args = fancyopts.fancyopts(sys.argv[1:], opts, options,
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   111
                           'hg [options] <command> [command options] [files]')
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   112
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   113
try:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   114
    cmd = args[0]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   115
    args = args[1:]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   116
except:
206
3295b6b508de hg: don't complain about missing repo with no args
mpm@selenic.com
parents: 203
diff changeset
   117
    cmd = "help"
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   118
207
ec327cf0d3a9 Move ui class to its own module
mpm@selenic.com
parents: 206
diff changeset
   119
ui = ui.ui(options["verbose"], options["debug"], options["quiet"],
107
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   120
           not options["noninteractive"])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   121
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   122
if cmd == "init":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   123
    repo = hg.repository(ui, ".", create=1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   124
    sys.exit(0)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   125
elif cmd == "branch" or cmd == "clone":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   126
    os.system("cp -al %s/.hg .hg" % args[0])
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   127
    sys.exit(0)
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   128
elif cmd == "help":
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   129
    help()
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   130
    sys.exit(0)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   131
else:
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   132
    try:
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   133
        repo = hg.repository(ui=ui)
74
mpm@selenic.com
parents: 70
diff changeset
   134
    except IOError:
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
   135
        ui.warn("Unable to open repository\n")
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   136
        sys.exit(0)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   137
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   138
relpath = None
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   139
if os.getcwd() != repo.root:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   140
    relpath = os.getcwd()[len(repo.root) + 1: ]
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   141
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   142
if cmd == "checkout" or cmd == "co":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   143
    node = repo.changelog.tip()
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   144
    if args:
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   145
        node = repo.lookup(args[0])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   146
    repo.checkout(node)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   147
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   148
elif cmd == "add":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   149
    repo.add(args)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   150
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   151
elif cmd == "remove" or cmd == "rm" or cmd == "del" or cmd == "delete":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   152
    repo.remove(args)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   153
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   154
elif cmd == "commit" or cmd == "checkin" or cmd == "ci":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   155
    if 1:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   156
        if len(args) > 0:
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   157
            repo.commit(repo.current, args)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   158
        else:
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   159
            repo.commit(repo.current)
203
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   160
elif cmd == "rawcommit":
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   161
    "raw commit interface"
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   162
    rc = {}
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   163
    opts = [('p', 'parent', [], 'parent'),
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   164
            ('d', 'date', "", 'data'),
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   165
            ('u', 'user', "", 'user'),
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   166
            ('F', 'files', "", 'file list'),
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   167
            ('t', 'text', "", 'commit text'),
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   168
            ('l', 'logfile', "", 'commit text file')
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   169
            ]
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   170
    args = fancyopts.fancyopts(args, opts, rc,
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   171
                               "hg rawcommit [options] files")
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   172
    text = rc['text']
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   173
    if not text and rc['logfile']:
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   174
        try: text = open(rc['logfile']).read()
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   175
        except IOError: pass
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   176
    if not text and not rc['logfile']:
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   177
        print "missing commit text"
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   178
        sys.exit(0)
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   179
    if rc['files']:
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   180
        files = open(rc['files']).read().splitlines()
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   181
    else:
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   182
        files = args
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   183
        
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   184
    repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent'])
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   185
    
0b486b5e0796 hg rawcommit command
mpm@selenic.com
parents: 198
diff changeset
   186
 
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   187
elif cmd == "import" or cmd == "patch":
69
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   188
    try:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   189
        import psyco
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   190
        psyco.full()
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   191
    except:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   192
        pass
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   193
    
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   194
    ioptions = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   195
    opts = [('p', 'strip', 1, 'path strip'),
50
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   196
            ('b', 'base', "", 'base path'),
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   197
            ('q', 'quiet', "", 'silence diff')
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   198
            ]
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   199
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   200
    args = fancyopts.fancyopts(args, opts, ioptions,
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   201
                              'hg import [options] <patch names>')
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   202
    d = ioptions["base"]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   203
    strip = ioptions["strip"]
50
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   204
    quiet = ioptions["quiet"] and "> /dev/null" or ""
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   205
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   206
    for patch in args:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   207
        ui.status("applying %s\n" % patch)
49
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   208
        pf = os.path.join(d, patch)
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   209
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   210
        text = ""
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   211
        for l in file(pf):
69
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   212
            if l[:4] == "--- ": break
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   213
            text += l
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   214
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   215
        f = os.popen("lsdiff --strip %d %s" % (strip, pf))
54
b24731008221 Fix lsdiff filtering
mpm@selenic.com
parents: 53
diff changeset
   216
        files = filter(None, map(lambda x: x.rstrip(), f.read().splitlines()))
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   217
        f.close()
69
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   218
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   219
        if files:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   220
            if os.system("patch -p%d < %s %s" % (strip, pf, quiet)):
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   221
                raise "patch failed!"
49
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   222
        repo.commit(repo.current, files, text)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   223
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   224
elif cmd == "status":
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   225
    (c, a, d) = repo.diffdir(repo.root, repo.current)
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   226
    if relpath:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   227
        (c, a, d) = map(lambda x: filterfiles(x, [ relpath ]), (c, a, d))
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   228
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   229
    for f in c: print "C", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   230
    for f in a: print "?", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   231
    for f in d: print "R", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   232
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   233
elif cmd == "diff":
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   234
    revs = []
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   235
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   236
    if args:
38
ed1d3e3ca8e0 Add improved rev lookup to diff and export
mpm@selenic.com
parents: 34
diff changeset
   237
        doptions = {}
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   238
        opts = [('r', 'revision', [], 'revision')]
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   239
        args = fancyopts.fancyopts(args, opts, doptions,
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   240
                                   'hg diff [options] [files]')
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   241
        revs = map(lambda x: repo.lookup(x), doptions['revision'])
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   242
    
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   243
    if len(revs) > 2:
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
   244
        self.ui.warn("too many revisions to diff\n")
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   245
        sys.exit(1)
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   246
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   247
    if relpath:
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   248
        if not args: args = [ relpath ]
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   249
        else: args = [ os.path.join(relpath, x) for x in args ]
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   250
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   251
    diff(args, *revs)
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   252
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   253
elif cmd == "export":
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   254
    node = repo.lookup(args[0])
68
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   255
    prev, other = repo.changelog.parents(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   256
    change = repo.changelog.read(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   257
    print "# HG changeset patch"
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   258
    print "# User %s" % change[1]
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   259
    print "# Node ID %s" % hg.hex(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   260
    print "# Parent  %s" % hg.hex(prev)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   261
    print
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   262
    if other != hg.nullid:
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   263
        print "# Parent  %s" % hg.hex(other)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   264
    print change[4]
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   265
    
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   266
    diff(None, prev, node)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   267
46
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   268
elif cmd == "debugchangegroup":
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   269
    newer = repo.newer(map(repo.lookup, args))
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   270
    for chunk in repo.changegroup(newer):
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   271
        sys.stdout.write(chunk)
46
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   272
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   273
elif cmd == "debugaddchangegroup":
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   274
    data = sys.stdin.read()
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   275
    repo.addchangegroup(data)
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   276
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   277
elif cmd == "addremove":
29
4d3a5dcb6972 Make diffdir take a revision argument
mpm@selenic.com
parents: 24
diff changeset
   278
    (c, a, d) = repo.diffdir(repo.root, repo.current)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   279
    repo.add(a)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   280
    repo.remove(d)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   281
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   282
elif cmd == "history":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   283
    for i in range(repo.changelog.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   284
        n = repo.changelog.node(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   285
        changes = repo.changelog.read(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   286
        (p1, p2) = repo.changelog.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   287
        (h, h1, h2) = map(hg.hex, (n, p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   288
        (i1, i2) = map(repo.changelog.rev, (p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   289
        print "rev:      %4d:%s" % (i, h)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   290
        print "parents:  %4d:%s" % (i1, h1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   291
        if i2: print "          %4d:%s" % (i2, h2)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   292
        print "manifest: %4d:%s" % (repo.manifest.rev(changes[0]),
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   293
                                    hg.hex(changes[0]))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   294
        print "user:", changes[1]
21
54a57a5ebcb1 Show date in history
mpm@selenic.com
parents: 18
diff changeset
   295
        print "date:", time.asctime(
54a57a5ebcb1 Show date in history
mpm@selenic.com
parents: 18
diff changeset
   296
            time.localtime(float(changes[2].split(' ')[0])))
123
b93cc016eec9 hg history: don't print file list without -v switch
mpm@selenic.com
parents: 122
diff changeset
   297
        if ui.verbose: print "files:", " ".join(changes[3])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   298
        print "description:"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   299
        print changes[4]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   300
89
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   301
elif cmd == "tip":
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   302
    n = repo.changelog.tip()
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   303
    t = repo.changelog.rev(n)
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   304
    ui.status("%d:%s\n" % (t, hg.hex(n)))
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   305
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   306
elif cmd == "log":
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   307
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   308
    if len(args) == 1:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   309
        if relpath:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   310
            args[0] = os.path.join(relpath, args[0])
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   311
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   312
        r = repo.file(args[0])
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   313
        for i in range(r.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   314
            n = r.node(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   315
            (p1, p2) = r.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   316
            (h, h1, h2) = map(hg.hex, (n, p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   317
            (i1, i2) = map(r.rev, (p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   318
            cr = r.linkrev(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   319
            cn = hg.hex(repo.changelog.node(cr))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   320
            print "rev:       %4d:%s" % (i, h)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   321
            print "changeset: %4d:%s" % (cr, cn)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   322
            print "parents:   %4d:%s" % (i1, h1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   323
            if i2: print "           %4d:%s" % (i2, h2)
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   324
            changes = repo.changelog.read(repo.changelog.node(cr))
105
6eeb50050486 Date on its own line in file log
mpm@selenic.com
parents: 104
diff changeset
   325
            print "user: %s" % changes[1]
6eeb50050486 Date on its own line in file log
mpm@selenic.com
parents: 104
diff changeset
   326
            print "date: %s" % time.asctime(
106
e8d4bbf4c9e2 Don't diff unknown files
mpm@selenic.com
parents: 105
diff changeset
   327
                time.localtime(float(changes[2].split(' ')[0])))
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   328
            print "description:"
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   329
            print changes[4]
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   330
            print
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   331
    elif len(args) > 1:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   332
        print "too many args"
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   333
    else:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   334
        print "missing filename"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   335
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   336
elif cmd == "dump":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   337
    if args:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   338
        r = repo.file(args[0])
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   339
        n = r.tip()
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   340
        if len(args) > 1: n = r.lookup(args[1])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   341
        sys.stdout.write(r.read(n))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   342
    else:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   343
        print "missing filename"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   344
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   345
elif cmd == "dumpmanifest":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   346
    n = repo.manifest.tip()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   347
    if len(args) > 0:
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   348
        n = repo.manifest.lookup(args[0])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   349
    m = repo.manifest.read(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   350
    files = m.keys()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   351
    files.sort()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   352
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   353
    for f in files:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   354
        print hg.hex(m[f]), f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   355
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   356
elif cmd == "debugindex":
91
1c212bbb38d5 hack so that debugindex takes filenames
mpm@selenic.com
parents: 89
diff changeset
   357
    if ".hg" not in args[0]:
1c212bbb38d5 hack so that debugindex takes filenames
mpm@selenic.com
parents: 89
diff changeset
   358
        args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
1c212bbb38d5 hack so that debugindex takes filenames
mpm@selenic.com
parents: 89
diff changeset
   359
    
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   360
    r = hg.revlog(open, args[0], "")
70
ce080e8eccd7 Fix debugindex formatting for large repos
mpm@selenic.com
parents: 69
diff changeset
   361
    print "   rev    offset  length   base linkrev"+\
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   362
          " p1           p2           nodeid"
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   363
    for i in range(r.count()):
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   364
        e = r.index[i]
70
ce080e8eccd7 Fix debugindex formatting for large repos
mpm@selenic.com
parents: 69
diff changeset
   365
        print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % (
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   366
            i, e[0], e[1], e[2], e[3],
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   367
            hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5]))
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   368
92
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   369
elif cmd == "debugindexdot":
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   370
    if ".hg" not in args[0]:
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   371
        args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   372
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   373
    r = hg.revlog(open, args[0], "")
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   374
    print "digraph G {"
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   375
    for i in range(r.count()):
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   376
        e = r.index[i]
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   377
        print "\t%d -> %d" % (r.rev(e[4]), i)
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   378
        if e[5] != hg.nullid:
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   379
            print "\t%d -> %d" % (r.rev(e[5]), i)
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   380
    print "}"
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   381
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   382
elif cmd == "merge":
174
23057dc57d1b hg merge: abort if there are outstanding changes in the working directory
mpm@selenic.com
parents: 163
diff changeset
   383
    (c, a, d) = repo.diffdir(repo.root, repo.current)
23057dc57d1b hg merge: abort if there are outstanding changes in the working directory
mpm@selenic.com
parents: 163
diff changeset
   384
    if c:
23057dc57d1b hg merge: abort if there are outstanding changes in the working directory
mpm@selenic.com
parents: 163
diff changeset
   385
        ui.warn("aborting (outstanding changes in working directory)\n")
23057dc57d1b hg merge: abort if there are outstanding changes in the working directory
mpm@selenic.com
parents: 163
diff changeset
   386
        sys.exit(1)
23057dc57d1b hg merge: abort if there are outstanding changes in the working directory
mpm@selenic.com
parents: 163
diff changeset
   387
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   388
    if args:
175
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   389
        paths = {}
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   390
        try:
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   391
            pf = os.path.join(os.environ["HOME"], ".hgpaths")
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   392
            for l in file(pf):
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   393
                name, path = l.split()
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   394
                paths[name] = path
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   395
        except:
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   396
            pass
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   397
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   398
        if args[0] in paths: args[0] = paths[args[0]]
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   399
        
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   400
        other = hg.repository(ui, args[0])
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   401
        cg = repo.getchangegroup(other)
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   402
        repo.addchangegroup(cg)
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   403
    else:
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   404
        print "missing source repository"
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   405
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   406
elif cmd == "tags":
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   407
    repo.lookup(0) # prime the cache
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   408
    i = repo.tags.items()
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   409
    i.sort()
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   410
    for k, n in i:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   411
        try:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   412
            r = repo.changelog.rev(n)
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   413
        except KeyError:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   414
            r = "?"
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   415
        print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n))
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   416
162
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   417
elif cmd == "recover":
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   418
    repo.recover()
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   419
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   420
elif cmd == "undo":
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   421
    repo.recover("undo")
5dcbe4d9a30c Implement recover and undo commands
mpm@selenic.com
parents: 158
diff changeset
   422
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   423
elif cmd == "verify":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   424
    filelinkrevs = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   425
    filenodes = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   426
    manifestchangeset = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   427
    changesets = revisions = files = 0
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   428
    errors = 0
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   429
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   430
    ui.status("checking changesets\n")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   431
    for i in range(repo.changelog.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   432
        changesets += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   433
        n = repo.changelog.node(i)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   434
        for p in repo.changelog.parents(n):
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   435
            if p not in repo.changelog.nodemap:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   436
                ui.warn("changeset %s has unknown parent %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   437
                        (hg.short(n), hg.short(p)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   438
                errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   439
        try:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   440
            changes = repo.changelog.read(n)
145
fbce9fc531d2 Minor fixes to verify
mpm@selenic.com
parents: 142
diff changeset
   441
        except Exception, inst:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   442
            ui.warn("unpacking changeset %s: %s\n" % (short(n), inst))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   443
            errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   444
            
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   445
        manifestchangeset[changes[0]] = n
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   446
        for f in changes[3]:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   447
            revisions += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   448
            filelinkrevs.setdefault(f, []).append(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   449
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   450
    ui.status("checking manifests\n")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   451
    for i in range(repo.manifest.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   452
        n = repo.manifest.node(i)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   453
        for p in repo.manifest.parents(n):
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   454
            if p not in repo.manifest.nodemap:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   455
                ui.warn("manifest %s has unknown parent %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   456
                        (hg.short(n), hg.short(p)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   457
                errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   458
        ca = repo.changelog.node(repo.manifest.linkrev(n))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   459
        cc = manifestchangeset[n]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   460
        if ca != cc:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   461
            ui.warn("manifest %s points to %s, not %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   462
                    (hg.hex(n), hg.hex(ca), hg.hex(cc)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   463
            errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   464
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   465
        try:
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   466
            delta = mdiff.patchtext(repo.manifest.delta(n))
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   467
        except KeyboardInterrupt:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   468
            print "aborted"
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   469
            sys.exit(0)
93
0b0efe409d79 Fix two bugs in verify
mpm@selenic.com
parents: 92
diff changeset
   470
        except Exception, inst:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   471
            ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   472
            errors += 1
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 130
diff changeset
   473
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   474
        ff = [ l.split('\0') for l in delta.splitlines() ]
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   475
        for f, fn in ff:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   476
            filenodes.setdefault(f, {})[hg.bin(fn)] = 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   477
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   478
    ui.status("crosschecking files in changesets and manifests\n")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   479
    for f in filenodes:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   480
        if f not in filelinkrevs:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   481
            ui.warn("file %s in manifest but not in changesets\n" % f)
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   482
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   483
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   484
    for f in filelinkrevs:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   485
        if f not in filenodes:
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   486
            ui.warn("file %s in changeset but not in manifest\n" % f)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   487
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   488
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   489
    ui.status("checking files\n")
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   490
    ff = filenodes.keys()
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   491
    ff.sort()
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   492
    for f in ff:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   493
        if f == "/dev/null": continue
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   494
        files += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   495
        fl = repo.file(f)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   496
        nodes = { hg.nullid: 1 }
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   497
        for i in range(fl.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   498
            n = fl.node(i)
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   499
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   500
            if n not in filenodes[f]:
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   501
                ui.warn("%s: %d:%s not in manifests\n" % (f, i, hg.short(n)))
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   502
                print len(filenodes[f].keys()), fl.count(), f
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   503
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   504
            else:
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   505
                del filenodes[f][n]
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   506
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   507
            flr = fl.linkrev(n)
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   508
            if flr not in filelinkrevs[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   509
                ui.warn("%s:%s points to unexpected changeset rev %d\n"
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   510
                        % (f, hg.short(n), fl.linkrev(n)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   511
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   512
            else:
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   513
                filelinkrevs[f].remove(flr)
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   514
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   515
            # verify contents
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   516
            try:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   517
                t = fl.read(n)
145
fbce9fc531d2 Minor fixes to verify
mpm@selenic.com
parents: 142
diff changeset
   518
            except Exception, inst:
fbce9fc531d2 Minor fixes to verify
mpm@selenic.com
parents: 142
diff changeset
   519
                ui.warn("unpacking file %s %s: %s\n" % (f, hg.short(n), inst))
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   520
                errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   521
            
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   522
            # verify parents
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   523
            (p1, p2) = fl.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   524
            if p1 not in nodes:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   525
                ui.warn("file %s:%s unknown parent 1 %s" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   526
                        (f, hg.short(n), hg.short(p1)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   527
                errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   528
            if p2 not in nodes:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   529
                ui.warn("file %s:%s unknown parent 2 %s" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   530
                        (f, hg.short(n), hg.short(p1)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   531
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   532
            nodes[n] = 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   533
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   534
        # cross-check
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   535
        for flr in filelinkrevs[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   536
            ui.warn("changeset rev %d not in %s\n" % (flr, f))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   537
            errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   538
            
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   539
        for node in filenodes[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   540
            ui.warn("node %s in manifests not in %s\n" % (hg.hex(n), f))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   541
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   542
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   543
    ui.status("%d files, %d changesets, %d total revisions\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   544
              (files, changesets, revisions))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   545
    
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   546
    if errors:
93
0b0efe409d79 Fix two bugs in verify
mpm@selenic.com
parents: 92
diff changeset
   547
        ui.warn("%d integrity errors encountered!\n" % errors)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   548
        sys.exit(1)
158
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   549
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   550
elif cmd == "serve":
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   551
    from mercurial import hgweb
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   552
    
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   553
    soptions = {}
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   554
    opts = [('p', 'port', 8000, 'listen port'),
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   555
            ('a', 'address', '', 'interface address'),
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   556
            ('n', 'name', os.getcwd(), 'repository name'),
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   557
            ('t', 'templates', "", 'template map')
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   558
            ]
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   559
    
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   560
    args = fancyopts.fancyopts(args, opts, soptions,
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   561
                              'hg serve [options]')
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   562
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   563
    hgweb.server(repo.root, soptions["name"], soptions["templates"],
be7103467d2e Add 'hg serve' command for stand-alone server
mpm@selenic.com
parents: 155
diff changeset
   564
                 soptions["address"], soptions["port"])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   565
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   566
else:
175
0eb6e2c9800d hg: remove some debug commands, improve help messages, add .hgpaths file
mpm@selenic.com
parents: 174
diff changeset
   567
    if cmd: ui.warn("unknown command\n\n")
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   568
    help()
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   569
    sys.exit(1)