hg
author mpm@selenic.com
Mon, 23 May 2005 20:57:48 -0800
changeset 142 529bf610092e
parent 130 e6678a1beb6a
child 145 fbce9fc531d2
permissions -rw-r--r--
Prettify the web interface Add header, footer templates Add null parent handling Combine files and directories Add parity flag for alternating line colors Add line numbers to filerevision
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
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
     4
# v0.4f "jane dark"
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
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    20
from mercurial import hg, mdiff, fancyopts
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():
49
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
    23
    print """\
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
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    26
 init                  create a new repository in this directory
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    27
 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
    28
 merge <path>          merge changes from <path> into local repository
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    29
 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
    30
 status                show new, missing, and changed files in working dir
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    31
 add [files...]        add the given files in the next commit
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    32
 remove [files...]     remove the given files in the next commit
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    33
 addremove             add all new files, delete all missing files
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    34
 commit                commit all changes to the repository
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    35
 history               show changeset history
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    36
 log <file>            show revision history of a single file
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    37
 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
    38
 dumpmanifest [rev]    dump the latest or given revision of the manifest
22
40b8c158c540 Document diff in help
mpm@selenic.com
parents: 21
diff changeset
    39
 diff [files...]       diff working directory (or selected files)
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
    40
 tags                  show current changeset tags
81
17884f79d59d Add annotate and blame to the command list and README
mpm@selenic.com
parents: 80
diff changeset
    41
 annotate [files...]   show changeset number per file line
17884f79d59d Add annotate and blame to the command list and README
mpm@selenic.com
parents: 80
diff changeset
    42
 blame [files...]      show commit user per file line
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    43
"""
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
    44
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    45
def filterfiles(list, files):
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    46
    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
    47
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    48
    for f in files:
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    49
        if f[-1] != os.sep: f += os.sep
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
    50
        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
    51
    return l
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
    52
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    53
def diff(files = None, node1 = None, node2 = None):
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    54
    def date(c):
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    55
        return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    56
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    57
    if node2:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    58
        change = repo.changelog.read(node2)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    59
        mmap2 = repo.manifest.read(change[0])
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    60
        (c, a, d) = repo.diffrevs(node1, node2)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    61
        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
    62
        date2 = date(change)
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    63
    else:
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    64
        date2 = time.asctime()
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    65
        if not node1:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    66
            node1 = repo.current
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    67
        (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
    68
        a = [] # ignore unknown files in repo, by popular request
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    69
        def read(f): return file(os.path.join(repo.root, f)).read()
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    70
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    71
    change = repo.changelog.read(node1)
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    72
    mmap = repo.manifest.read(change[0])
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    73
    date1 = date(change)
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    74
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    75
    if files:
129
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    76
        c, a, d = map(lambda x: filterfiles(x, files), (c, a, d))
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
    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
    79
        to = ""
e6678a1beb6a Make hg diff handle files that have been added but not yet committed.
mpm@selenic.com
parents: 129
diff changeset
    80
        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
    81
            to = repo.file(f).read(mmap[f])
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    82
        tn = read(f)
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    83
        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
    84
    for f in a:
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    85
        to = ""
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    86
        tn = read(f)
1db9207def07 Fix diff and export not showing added files
mpm@selenic.com
parents: 124
diff changeset
    87
        sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    88
    for f in d:
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    89
        to = repo.file(f).read(mmap[f])
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    90
        tn = ""
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
    91
        sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
    92
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    93
options = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    94
opts = [('v', 'verbose', None, 'verbose'),
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
    95
        ('d', 'debug', None, 'debug'),
107
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
    96
        ('q', 'quiet', None, 'quiet'),
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
    97
        ('y', 'noninteractive', None, 'run non-interactively'),
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
    98
        ]
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    99
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   100
args = fancyopts.fancyopts(sys.argv[1:], opts, options,
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   101
                           'hg [options] <command> [command options] [files]')
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   102
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   103
try:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   104
    cmd = args[0]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   105
    args = args[1:]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   106
except:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   107
    cmd = ""
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   108
107
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   109
ui = hg.ui(options["verbose"], options["debug"], options["quiet"],
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   110
           not options["noninteractive"])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   111
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   112
if cmd == "init":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   113
    repo = hg.repository(ui, ".", create=1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   114
    sys.exit(0)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   115
elif cmd == "branch" or cmd == "clone":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   116
    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
   117
    sys.exit(0)
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   118
elif cmd == "help":
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   119
    help()
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   120
    sys.exit(0)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   121
else:
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   122
    try:
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   123
        repo = hg.repository(ui=ui)
74
mpm@selenic.com
parents: 70
diff changeset
   124
    except IOError:
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
   125
        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
   126
        sys.exit(0)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   127
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   128
relpath = None
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   129
if os.getcwd() != repo.root:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   130
    relpath = os.getcwd()[len(repo.root) + 1: ]
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   131
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   132
if cmd == "checkout" or cmd == "co":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   133
    node = repo.changelog.tip()
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   134
    if args:
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   135
        node = repo.lookup(args[0])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   136
    repo.checkout(node)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   137
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   138
elif cmd == "add":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   139
    repo.add(args)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   140
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   141
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
   142
    repo.remove(args)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   143
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   144
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
   145
    if 1:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   146
        if len(args) > 0:
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   147
            repo.commit(repo.current, args)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   148
        else:
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   149
            repo.commit(repo.current)
0
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 == "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
   152
    try:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   153
        import psyco
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   154
        psyco.full()
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   155
    except:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   156
        pass
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   157
    
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   158
    ioptions = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   159
    opts = [('p', 'strip', 1, 'path strip'),
50
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   160
            ('b', 'base', "", 'base path'),
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   161
            ('q', 'quiet', "", 'silence diff')
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   162
            ]
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   163
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   164
    args = fancyopts.fancyopts(args, opts, ioptions,
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   165
                              'hg import [options] <patch names>')
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   166
    d = ioptions["base"]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   167
    strip = ioptions["strip"]
50
0263ce8be574 Add -q option to import
mpm@selenic.com
parents: 49
diff changeset
   168
    quiet = ioptions["quiet"] and "> /dev/null" or ""
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   169
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   170
    for patch in args:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   171
        ui.status("applying %s\n" % patch)
49
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   172
        pf = os.path.join(d, patch)
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   173
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   174
        text = ""
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   175
        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
   176
            if l[:4] == "--- ": break
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   177
            text += l
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   178
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   179
        f = os.popen("lsdiff --strip %d %s" % (strip, pf))
54
b24731008221 Fix lsdiff filtering
mpm@selenic.com
parents: 53
diff changeset
   180
        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
   181
        f.close()
69
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   182
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   183
        if files:
ab03c7a52cf2 Minor changes to import so that we can successfully import Ingo's
mpm@selenic.com
parents: 68
diff changeset
   184
            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
   185
                raise "patch failed!"
49
14bff5d8e526 Import comments from patches
mpm@selenic.com
parents: 46
diff changeset
   186
        repo.commit(repo.current, files, text)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   187
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   188
elif cmd == "status":
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   189
    (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
   190
    if relpath:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   191
        (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
   192
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   193
    for f in c: print "C", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   194
    for f in a: print "?", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   195
    for f in d: print "R", f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   196
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   197
elif cmd == "diff":
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   198
    revs = []
31
642058291e74 diffdir tidy in preparation for arg handling
mpm@selenic.com
parents: 29
diff changeset
   199
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   200
    if args:
38
ed1d3e3ca8e0 Add improved rev lookup to diff and export
mpm@selenic.com
parents: 34
diff changeset
   201
        doptions = {}
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   202
        opts = [('r', 'revision', [], 'revision')]
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   203
        args = fancyopts.fancyopts(args, opts, doptions,
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   204
                                   'hg diff [options] [files]')
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   205
        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
   206
    
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   207
    if len(revs) > 2:
83
9fd5b35cfc45 Add -q quiet option
mpm@selenic.com
parents: 81
diff changeset
   208
        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
   209
        sys.exit(1)
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   210
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   211
    if relpath:
64
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   212
        if not args: args = [ relpath ]
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   213
        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
   214
b3e2ddff0159 Diff in subdirectories from Jake Edge
mpm@selenic.com
parents: 62
diff changeset
   215
    diff(args, *revs)
33
98633e60067c Support for 0, 1, or 2 diff revs
mpm@selenic.com
parents: 31
diff changeset
   216
79
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   217
elif cmd == "annotate":
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   218
    aoptions = {}
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   219
    opts = [('r', 'revision', '', 'revision')]
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   220
    args = fancyopts.fancyopts(args, opts, aoptions,
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   221
                               'hg annotate [-r id] [files]')
122
82fd709deb8e Subdir support for annotate
mpm@selenic.com
parents: 121
diff changeset
   222
79
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   223
    if args:
122
82fd709deb8e Subdir support for annotate
mpm@selenic.com
parents: 121
diff changeset
   224
        if relpath: args = [ os.path.join(relpath, x) for x in args ]
82fd709deb8e Subdir support for annotate
mpm@selenic.com
parents: 121
diff changeset
   225
79
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   226
        node = repo.current
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   227
        if aoptions['revision']:
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   228
            node = repo.changelog.lookup(aoptions['revision'])
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   229
        change = repo.changelog.read(node)
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   230
        mmap = repo.manifest.read(change[0])
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   231
        for f in args:
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   232
            for n, l in repo.file(f).annotate(mmap[f]):
80
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   233
                sys.stdout.write("% 6s:%s"%(n, l))
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   234
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   235
elif cmd == "blame":
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   236
    aoptions = {}
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   237
    opts = [('r', 'revision', '', 'revision')]
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   238
    args = fancyopts.fancyopts(args, opts, aoptions,
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   239
                               'hg blame [-r id] [files]')
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   240
    if args:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   241
        bcache = {}
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   242
        node = repo.current
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   243
        if aoptions['revision']:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   244
            node = repo.changelog.lookup(aoptions['revision'])
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   245
        change = repo.changelog.read(node)
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   246
        mmap = repo.manifest.read(change[0])
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   247
        for f in args:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   248
            for n, l in repo.file(f).annotate(mmap[f]):
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   249
                try:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   250
                    name = bcache[n]
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   251
                except KeyError:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   252
                    cl = repo.changelog.read(repo.changelog.node(n))
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   253
                    name = cl[1]
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   254
                    f = name.find('@')
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   255
                    if f >= 0:
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   256
                        name = name[:f]
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   257
                    bcache[n] = name
5b7a444c794a Fix field width for annotate
mpm@selenic.com
parents: 79
diff changeset
   258
                sys.stdout.write("% 10s:%s"%(name, l))
79
837d473d54d5 Add basic annotation support
mpm@selenic.com
parents: 74
diff changeset
   259
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   260
elif cmd == "export":
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   261
    node = repo.lookup(args[0])
68
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   262
    prev, other = repo.changelog.parents(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   263
    change = repo.changelog.read(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   264
    print "# HG changeset patch"
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   265
    print "# User %s" % change[1]
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   266
    print "# Node ID %s" % hg.hex(node)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   267
    print "# Parent  %s" % hg.hex(prev)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   268
    print
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   269
    if other != hg.nullid:
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   270
        print "# Parent  %s" % hg.hex(other)
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   271
    print change[4]
6fa994fe90fc Print changeset metadata for export
mpm@selenic.com
parents: 67
diff changeset
   272
    
34
8708c75da2ac Add export command
mpm@selenic.com
parents: 33
diff changeset
   273
    diff(None, prev, node)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   274
46
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   275
elif cmd == "debugchangegroup":
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   276
    newer = repo.newer(map(repo.lookup, args))
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   277
    for chunk in repo.changegroup(newer):
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   278
        sys.stdout.write(chunk)
46
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   279
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   280
elif cmd == "debugaddchangegroup":
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   281
    data = sys.stdin.read()
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   282
    repo.addchangegroup(data)
93e868fa0db8 Add changegroup support
mpm@selenic.com
parents: 39
diff changeset
   283
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   284
elif cmd == "addremove":
29
4d3a5dcb6972 Make diffdir take a revision argument
mpm@selenic.com
parents: 24
diff changeset
   285
    (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
   286
    repo.add(a)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   287
    repo.remove(d)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   288
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   289
elif cmd == "history":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   290
    for i in range(repo.changelog.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   291
        n = repo.changelog.node(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   292
        changes = repo.changelog.read(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   293
        (p1, p2) = repo.changelog.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   294
        (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
   295
        (i1, i2) = map(repo.changelog.rev, (p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   296
        print "rev:      %4d:%s" % (i, h)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   297
        print "parents:  %4d:%s" % (i1, h1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   298
        if i2: print "          %4d:%s" % (i2, h2)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   299
        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
   300
                                    hg.hex(changes[0]))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   301
        print "user:", changes[1]
21
54a57a5ebcb1 Show date in history
mpm@selenic.com
parents: 18
diff changeset
   302
        print "date:", time.asctime(
54a57a5ebcb1 Show date in history
mpm@selenic.com
parents: 18
diff changeset
   303
            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
   304
        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
   305
        print "description:"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   306
        print changes[4]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   307
89
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   308
elif cmd == "tip":
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   309
    n = repo.changelog.tip()
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   310
    t = repo.changelog.rev(n)
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   311
    ui.status("%d:%s\n" % (t, hg.hex(n)))
4cd9145d5b53 Add tip command
mpm@selenic.com
parents: 88
diff changeset
   312
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   313
elif cmd == "log":
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   314
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   315
    if len(args) == 1:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   316
        if relpath:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   317
            args[0] = os.path.join(relpath, args[0])
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   318
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   319
        r = repo.file(args[0])
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   320
        for i in range(r.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   321
            n = r.node(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   322
            (p1, p2) = r.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   323
            (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
   324
            (i1, i2) = map(r.rev, (p1, p2))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   325
            cr = r.linkrev(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   326
            cn = hg.hex(repo.changelog.node(cr))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   327
            print "rev:       %4d:%s" % (i, h)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   328
            print "changeset: %4d:%s" % (cr, cn)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   329
            print "parents:   %4d:%s" % (i1, h1)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   330
            if i2: print "           %4d:%s" % (i2, h2)
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   331
            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
   332
            print "user: %s" % changes[1]
6eeb50050486 Date on its own line in file log
mpm@selenic.com
parents: 104
diff changeset
   333
            print "date: %s" % time.asctime(
106
e8d4bbf4c9e2 Don't diff unknown files
mpm@selenic.com
parents: 105
diff changeset
   334
                time.localtime(float(changes[2].split(' ')[0])))
103
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   335
            print "description:"
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   336
            print changes[4]
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   337
            print
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   338
    elif len(args) > 1:
33500fe7d56c adding subdir support for log and status commands
jake@edge2.net
parents: 70
diff changeset
   339
        print "too many args"
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   340
    else:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   341
        print "missing filename"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   342
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   343
elif cmd == "dump":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   344
    if args:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   345
        r = repo.file(args[0])
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   346
        n = r.tip()
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   347
        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
   348
        sys.stdout.write(r.read(n))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   349
    else:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   350
        print "missing filename"
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   351
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   352
elif cmd == "dumpmanifest":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   353
    n = repo.manifest.tip()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   354
    if len(args) > 0:
39
adf70fffca9f Add lookup smarts everywhere
mpm@selenic.com
parents: 38
diff changeset
   355
        n = repo.manifest.lookup(args[0])
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   356
    m = repo.manifest.read(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   357
    files = m.keys()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   358
    files.sort()
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   359
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   360
    for f in files:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   361
        print hg.hex(m[f]), f
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   362
107
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   363
elif cmd == "debugprompt":
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   364
    print ui.prompt(args[0], args[1], args[2])
707a7481a861 Make prompting go
mpm@selenic.com
parents: 106
diff changeset
   365
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   366
elif cmd == "debughash":
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   367
    f = repo.file(args[0])
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   368
    print f.encodepath(args[0])
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   369
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   370
elif cmd == "debugindex":
91
1c212bbb38d5 hack so that debugindex takes filenames
mpm@selenic.com
parents: 89
diff changeset
   371
    if ".hg" not in args[0]:
1c212bbb38d5 hack so that debugindex takes filenames
mpm@selenic.com
parents: 89
diff changeset
   372
        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
   373
    
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   374
    r = hg.revlog(open, args[0], "")
70
ce080e8eccd7 Fix debugindex formatting for large repos
mpm@selenic.com
parents: 69
diff changeset
   375
    print "   rev    offset  length   base linkrev"+\
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   376
          " p1           p2           nodeid"
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   377
    for i in range(r.count()):
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   378
        e = r.index[i]
70
ce080e8eccd7 Fix debugindex formatting for large repos
mpm@selenic.com
parents: 69
diff changeset
   379
        print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % (
24
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   380
            i, e[0], e[1], e[2], e[3],
57a1eef79415 Add debughash and debugindex commands
mpm@selenic.com
parents: 23
diff changeset
   381
            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
   382
92
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   383
elif cmd == "debugindexdot":
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   384
    if ".hg" not in args[0]:
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   385
        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
   386
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   387
    r = hg.revlog(open, args[0], "")
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   388
    print "digraph G {"
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   389
    for i in range(r.count()):
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   390
        e = r.index[i]
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   391
        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
   392
        if e[5] != hg.nullid:
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   393
            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
   394
    print "}"
e6fc7ff52246 Add debugindexdot to generate graphviz dot files from indexes
mpm@selenic.com
parents: 91
diff changeset
   395
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   396
elif cmd == "merge":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   397
    if args:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   398
        other = hg.repository(ui, args[0])
88
d9913355961d Missing newline in "requesting changegroup"
mpm@selenic.com
parents: 87
diff changeset
   399
        ui.status("requesting changegroup\n")
62
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   400
        cg = repo.getchangegroup(other)
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   401
        repo.addchangegroup(cg)
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   402
    else:
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   403
        print "missing source repository"
022d98aa0a2a Fix tabs
mpm@selenic.com
parents: 56
diff changeset
   404
67
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   405
elif cmd == "tags":
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   406
    repo.lookup(0) # prime the cache
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   407
    i = repo.tags.items()
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   408
    i.sort()
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   409
    for k, n in i:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   410
        try:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   411
            r = repo.changelog.rev(n)
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   412
        except KeyError:
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   413
            r = "?"
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   414
        print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n))
a182f2561c8e Add tag support
mpm@selenic.com
parents: 65
diff changeset
   415
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   416
elif cmd == "verify":
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   417
    filelinkrevs = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   418
    filenodes = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   419
    manifestchangeset = {}
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   420
    changesets = revisions = files = 0
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   421
    errors = 0
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   422
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   423
    ui.status("checking changesets\n")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   424
    for i in range(repo.changelog.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   425
        changesets += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   426
        n = repo.changelog.node(i)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   427
        for p in repo.changelog.parents(n):
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   428
            if p not in repo.changelog.nodemap:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   429
                ui.warn("changeset %s has unknown parent %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   430
                        (hg.short(n), hg.short(p)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   431
                errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   432
        try:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   433
            changes = repo.changelog.read(n)
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   434
        except Error, inst:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   435
            ui.warn("unpacking changeset %s: %s\n" % (short(n), inst))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   436
            errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   437
            
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   438
        manifestchangeset[changes[0]] = n
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   439
        for f in changes[3]:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   440
            revisions += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   441
            filelinkrevs.setdefault(f, []).append(i)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   442
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   443
    ui.status("checking manifests\n")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   444
    for i in range(repo.manifest.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   445
        n = repo.manifest.node(i)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   446
        for p in repo.manifest.parents(n):
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   447
            if p not in repo.manifest.nodemap:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   448
                ui.warn("manifest %s has unknown parent %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   449
                        (hg.short(n), hg.short(p)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   450
                errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   451
        ca = repo.changelog.node(repo.manifest.linkrev(n))
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   452
        cc = manifestchangeset[n]
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   453
        if ca != cc:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   454
            ui.warn("manifest %s points to %s, not %s\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   455
                    (hg.hex(n), hg.hex(ca), hg.hex(cc)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   456
            errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   457
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   458
        try:
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   459
            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
   460
        except KeyboardInterrupt:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   461
            print "aborted"
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   462
            sys.exit(0)
93
0b0efe409d79 Fix two bugs in verify
mpm@selenic.com
parents: 92
diff changeset
   463
        except Exception, inst:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   464
            ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   465
            errors += 1
142
529bf610092e Prettify the web interface
mpm@selenic.com
parents: 130
diff changeset
   466
121
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   467
        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
   468
        for f, fn in ff:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   469
            filenodes.setdefault(f, {})[hg.bin(fn)] = 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   470
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   471
    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
   472
    for f in filenodes:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   473
        if f not in filelinkrevs:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   474
            ui.warn("file %s in manifest but not in changesets\n" % f)
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   475
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   476
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   477
    for f in filelinkrevs:
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   478
        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
   479
            ui.warn("file %s in changeset but not in manifest\n" % f)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   480
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   481
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   482
    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
   483
    ff = filenodes.keys()
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   484
    ff.sort()
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   485
    for f in ff:
66fb61d9d97d Use revlog.delta and mdiff.patchtext to massively speed up processing
mpm@selenic.com
parents: 107
diff changeset
   486
        if f == "/dev/null": continue
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   487
        files += 1
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   488
        fl = repo.file(f)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   489
        nodes = { hg.nullid: 1 }
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   490
        for i in range(fl.count()):
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   491
            n = fl.node(i)
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   492
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   493
            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
   494
                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
   495
                print len(filenodes[f].keys()), fl.count(), f
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   496
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   497
            else:
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   498
                del filenodes[f][n]
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   499
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   500
            flr = fl.linkrev(n)
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   501
            if flr not in filelinkrevs[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   502
                ui.warn("%s:%s points to unexpected changeset rev %d\n"
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   503
                        % (f, hg.short(n), fl.linkrev(n)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   504
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   505
            else:
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   506
                filelinkrevs[f].remove(flr)
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   507
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   508
            # verify contents
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   509
            try:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   510
                t = fl.read(n)
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   511
            except Error, inst:
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   512
                ui.warn("unpacking file %s %s: %s\n" % (f, short(n), inst))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   513
                errors += 1
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   514
            
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   515
            # verify parents
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   516
            (p1, p2) = fl.parents(n)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   517
            if p1 not in nodes:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   518
                ui.warn("file %s:%s unknown parent 1 %s" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   519
                        (f, hg.short(n), hg.short(p1)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   520
                errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   521
            if p2 not in nodes:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   522
                ui.warn("file %s:%s unknown parent 2 %s" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   523
                        (f, hg.short(n), hg.short(p1)))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   524
                errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   525
            nodes[n] = 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   526
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   527
        # cross-check
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   528
        for flr in filelinkrevs[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   529
            ui.warn("changeset rev %d not in %s\n" % (flr, f))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   530
            errors += 1
17
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   531
            
ffe6a5ca1a89 Make hg verify do more thorough cross-checking.
mpm@selenic.com
parents: 16
diff changeset
   532
        for node in filenodes[f]:
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   533
            ui.warn("node %s in manifests not in %s\n" % (hg.hex(n), f))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   534
            errors += 1
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   535
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   536
    ui.status("%d files, %d changesets, %d total revisions\n" %
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   537
              (files, changesets, revisions))
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   538
    
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   539
    if errors:
93
0b0efe409d79 Fix two bugs in verify
mpm@selenic.com
parents: 92
diff changeset
   540
        ui.warn("%d integrity errors encountered!\n" % errors)
87
b2b3fdbd79f4 Verify improvements:
mpm@selenic.com
parents: 83
diff changeset
   541
        sys.exit(1)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   542
    
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   543
else:
18
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   544
    print "unknown command\n"
2fd3e1e3783f Give a friendlier message when repo isn't found
mpm@selenic.com
parents: 17
diff changeset
   545
    help()
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
   546
    sys.exit(1)