Mercurial > hg > pyhgsh
annotate hg @ 209:63af1db35611
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-----
author | mpm@selenic.com |
---|---|
date | Wed, 01 Jun 2005 00:25:42 -0800 |
parents | ec327cf0d3a9 |
children | d2badbd7d1ad |
rev | line source |
---|---|
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 | 11 # the psyco compiler makes commits a bit faster |
12 # and makes changegroup merge about 20 times slower! | |
13 # try: | |
14 # import psyco | |
15 # psyco.full() | |
16 # except: | |
17 # pass | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
18 |
23 | 19 import sys, os, time |
209 | 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 | 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 | 44 tags show current changeset tags |
163 | 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 | 48 def filterfiles(list, files): |
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 | 51 for f in files: |
52 if f[-1] != os.sep: f += os.sep | |
53 l += [ x for x in list if x.startswith(f) ] | |
54 return l | |
31
642058291e74
diffdir tidy in preparation for arg handling
mpm@selenic.com
parents:
29
diff
changeset
|
55 |
34 | 56 def diff(files = None, node1 = None, node2 = None): |
64 | 57 def date(c): |
58 return time.asctime(time.gmtime(float(c[2].split(' ')[0]))) | |
34 | 59 |
60 if node2: | |
61 change = repo.changelog.read(node2) | |
62 mmap2 = repo.manifest.read(change[0]) | |
63 (c, a, d) = repo.diffrevs(node1, node2) | |
64 def read(f): return repo.file(f).read(mmap2[f]) | |
64 | 65 date2 = date(change) |
34 | 66 else: |
64 | 67 date2 = time.asctime() |
34 | 68 if not node1: |
69 node1 = repo.current | |
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 | 72 def read(f): return file(os.path.join(repo.root, f)).read() |
34 | 73 |
74 change = repo.changelog.read(node1) | |
75 mmap = repo.manifest.read(change[0]) | |
64 | 76 date1 = date(change) |
34 | 77 |
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 | 80 |
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 | 85 tn = read(f) |
64 | 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 | 91 for f in d: |
92 to = repo.file(f).read(mmap[f]) | |
93 tn = "" | |
64 | 94 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f)) |
34 | 95 |
209 | 96 |
97 try: | |
98 sys.exit(commands.dispatch(sys.argv[1:])) | |
99 except commands.UnknownCommand: | |
100 # fall through | |
101 pass | |
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 | 105 ('d', 'debug', None, 'debug'), |
107 | 106 ('q', 'quiet', None, 'quiet'), |
107 ('y', 'noninteractive', None, 'run non-interactively'), | |
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 | 119 ui = ui.ui(options["verbose"], options["debug"], options["quiet"], |
107 | 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 | 134 except IOError: |
83 | 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 | 144 if args: |
67 | 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 | 160 elif cmd == "rawcommit": |
161 "raw commit interface" | |
162 rc = {} | |
163 opts = [('p', 'parent', [], 'parent'), | |
164 ('d', 'date', "", 'data'), | |
165 ('u', 'user', "", 'user'), | |
166 ('F', 'files', "", 'file list'), | |
167 ('t', 'text', "", 'commit text'), | |
168 ('l', 'logfile', "", 'commit text file') | |
169 ] | |
170 args = fancyopts.fancyopts(args, opts, rc, | |
171 "hg rawcommit [options] files") | |
172 text = rc['text'] | |
173 if not text and rc['logfile']: | |
174 try: text = open(rc['logfile']).read() | |
175 except IOError: pass | |
176 if not text and not rc['logfile']: | |
177 print "missing commit text" | |
178 sys.exit(0) | |
179 if rc['files']: | |
180 files = open(rc['files']).read().splitlines() | |
181 else: | |
182 files = args | |
183 | |
184 repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent']) | |
185 | |
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 | 196 ('b', 'base', "", 'base path'), |
197 ('q', 'quiet', "", 'silence diff') | |
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 | 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 | 208 pf = os.path.join(d, patch) |
209 | |
62 | 210 text = "" |
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 | 213 text += l |
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 | 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 | 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 | 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 | 234 revs = [] |
31
642058291e74
diffdir tidy in preparation for arg handling
mpm@selenic.com
parents:
29
diff
changeset
|
235 |
33 | 236 if args: |
38 | 237 doptions = {} |
33 | 238 opts = [('r', 'revision', [], 'revision')] |
239 args = fancyopts.fancyopts(args, opts, doptions, | |
240 'hg diff [options] [files]') | |
67 | 241 revs = map(lambda x: repo.lookup(x), doptions['revision']) |
33 | 242 |
243 if len(revs) > 2: | |
83 | 244 self.ui.warn("too many revisions to diff\n") |
33 | 245 sys.exit(1) |
64 | 246 |
103
33500fe7d56c
adding subdir support for log and status commands
jake@edge2.net
parents:
70
diff
changeset
|
247 if relpath: |
64 | 248 if not args: args = [ relpath ] |
249 else: args = [ os.path.join(relpath, x) for x in args ] | |
250 | |
251 diff(args, *revs) | |
33 | 252 |
34 | 253 elif cmd == "export": |
67 | 254 node = repo.lookup(args[0]) |
68 | 255 prev, other = repo.changelog.parents(node) |
256 change = repo.changelog.read(node) | |
257 print "# HG changeset patch" | |
258 print "# User %s" % change[1] | |
259 print "# Node ID %s" % hg.hex(node) | |
260 print "# Parent %s" % hg.hex(prev) | |
261 print | |
262 if other != hg.nullid: | |
263 print "# Parent %s" % hg.hex(other) | |
264 print change[4] | |
265 | |
34 | 266 diff(None, prev, node) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
267 |
46 | 268 elif cmd == "debugchangegroup": |
67 | 269 newer = repo.newer(map(repo.lookup, args)) |
62 | 270 for chunk in repo.changegroup(newer): |
271 sys.stdout.write(chunk) | |
46 | 272 |
273 elif cmd == "debugaddchangegroup": | |
274 data = sys.stdin.read() | |
275 repo.addchangegroup(data) | |
276 | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
277 elif cmd == "addremove": |
29 | 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 | 295 print "date:", time.asctime( |
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 | 301 elif cmd == "tip": |
302 n = repo.changelog.tip() | |
303 t = repo.changelog.rev(n) | |
304 ui.status("%d:%s\n" % (t, hg.hex(n))) | |
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 | 325 print "user: %s" % changes[1] |
326 print "date: %s" % time.asctime( | |
106 | 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 | 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 | 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 | 356 elif cmd == "debugindex": |
91 | 357 if ".hg" not in args[0]: |
358 args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i" | |
359 | |
24 | 360 r = hg.revlog(open, args[0], "") |
70 | 361 print " rev offset length base linkrev"+\ |
24 | 362 " p1 p2 nodeid" |
363 for i in range(r.count()): | |
364 e = r.index[i] | |
70 | 365 print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % ( |
24 | 366 i, e[0], e[1], e[2], e[3], |
367 hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5])) | |
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 | 401 cg = repo.getchangegroup(other) |
402 repo.addchangegroup(cg) | |
403 else: | |
404 print "missing source repository" | |
405 | |
67 | 406 elif cmd == "tags": |
407 repo.lookup(0) # prime the cache | |
408 i = repo.tags.items() | |
409 i.sort() | |
410 for k, n in i: | |
411 try: | |
412 r = repo.changelog.rev(n) | |
413 except KeyError: | |
414 r = "?" | |
415 print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n)) | |
416 | |
162 | 417 elif cmd == "recover": |
418 repo.recover() | |
419 | |
420 elif cmd == "undo": | |
421 repo.recover("undo") | |
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 | 428 errors = 0 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
429 |
87 | 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 | 434 for p in repo.changelog.parents(n): |
435 if p not in repo.changelog.nodemap: | |
436 ui.warn("changeset %s has unknown parent %s\n" % | |
437 (hg.short(n), hg.short(p))) | |
438 errors += 1 | |
439 try: | |
440 changes = repo.changelog.read(n) | |
145 | 441 except Exception, inst: |
87 | 442 ui.warn("unpacking changeset %s: %s\n" % (short(n), inst)) |
443 errors += 1 | |
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 | 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 | 453 for p in repo.manifest.parents(n): |
454 if p not in repo.manifest.nodemap: | |
455 ui.warn("manifest %s has unknown parent %s\n" % | |
456 (hg.short(n), hg.short(p))) | |
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 | 461 ui.warn("manifest %s points to %s, not %s\n" % |
462 (hg.hex(n), hg.hex(ca), hg.hex(cc))) | |
463 errors += 1 | |
464 | |
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 | 470 except Exception, inst: |
87 | 471 ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst)) |
472 errors += 1 | |
142 | 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 | 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 | 481 ui.warn("file %s in manifest but not in changesets\n" % f) |
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 | 487 errors += 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
488 |
87 | 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 | 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 | 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 | 509 ui.warn("%s:%s points to unexpected changeset rev %d\n" |
510 % (f, hg.short(n), fl.linkrev(n))) | |
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 | 516 try: |
517 t = fl.read(n) | |
145 | 518 except Exception, inst: |
519 ui.warn("unpacking file %s %s: %s\n" % (f, hg.short(n), inst)) | |
87 | 520 errors += 1 |
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 | 525 ui.warn("file %s:%s unknown parent 1 %s" % |
526 (f, hg.short(n), hg.short(p1))) | |
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 | 529 ui.warn("file %s:%s unknown parent 2 %s" % |
530 (f, hg.short(n), hg.short(p1))) | |
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 | 536 ui.warn("changeset rev %d not in %s\n" % (flr, f)) |
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 | 540 ui.warn("node %s in manifests not in %s\n" % (hg.hex(n), f)) |
541 errors += 1 | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
542 |
87 | 543 ui.status("%d files, %d changesets, %d total revisions\n" % |
544 (files, changesets, revisions)) | |
545 | |
546 if errors: | |
93 | 547 ui.warn("%d integrity errors encountered!\n" % errors) |
87 | 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) |