annotate mercurial/commands.py @ 333:d60a3060f9e2

hg rawcommit: fix files arg conflict -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 hg rawcommit: fix files arg conflict I try to sync with tip again. I found out the raw commit is broken for me because the keyword "files" is list as named argument as well so it will not show up in the rc dictionary. Here is my quick fix to make it work with my script again. Chris manifest hash: 10f85636e02cb4b19b319b7ebbfd2ec5096c3a6d -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCr1HSywK+sNU5EO8RArWMAJoD67SPN4QJcVaHBVh9FiNXWy80FQCePpA/ BZ63h+bqXESeMMLb7Kh5ytA= =69X0 -----END PGP SIGNATURE-----
author mpm@selenic.com
date Tue, 14 Jun 2005 13:53:22 -0800
parents 27d08c0c2a7e
children 74b9332faece
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
1 # commands.py - command processing for mercurial
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
2 #
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
4 #
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
5 # This software may be used and distributed according to the terms
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
6 # of the GNU General Public License, incorporated herein by reference.
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
7
262
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 259
diff changeset
8 import os, re, sys, signal
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 259
diff changeset
9 import fancyopts, ui, hg
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 259
diff changeset
10 from demandload import *
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
11 demandload(globals(), "mdiff time hgweb traceback random signal")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
12
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
13 class UnknownCommand(Exception): pass
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
14
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
15 def filterfiles(filters, files):
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
16 l = [ x for x in files if x in filters ]
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
17
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
18 for t in filters:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
19 if t and t[-1] != os.sep: t += os.sep
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
20 l += [ x for x in files if x.startswith(t) ]
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
21 return l
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
22
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
23 def relfilter(repo, files):
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
24 if os.getcwd() != repo.root:
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
25 p = os.getcwd()[len(repo.root) + 1: ]
281
574420507d8c hg cat: relative file support
mpm@selenic.com
parents: 276
diff changeset
26 return filterfiles([p], files)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
27 return files
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
28
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
29 def relpath(repo, args):
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
30 if os.getcwd() != repo.root:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
31 p = os.getcwd()[len(repo.root) + 1: ]
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
32 return [ os.path.normpath(os.path.join(p, x)) for x in args ]
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
33 return args
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
34
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
35 def dodiff(repo, path, files = None, node1 = None, node2 = None):
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
36 def date(c):
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
37 return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
38
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
39 if node2:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
40 change = repo.changelog.read(node2)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
41 mmap2 = repo.manifest.read(change[0])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
42 (c, a, d) = repo.diffrevs(node1, node2)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
43 def read(f): return repo.file(f).read(mmap2[f])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
44 date2 = date(change)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
45 else:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
46 date2 = time.asctime()
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
47 (c, a, d, u) = repo.diffdir(path, node1)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
48 if not node1:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
49 node1 = repo.dirstate.parents()[0]
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
50 def read(f): return file(os.path.join(repo.root, f)).read()
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
51
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
52 change = repo.changelog.read(node1)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
53 mmap = repo.manifest.read(change[0])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
54 date1 = date(change)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
55
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
56 if files:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
57 c, a, d = map(lambda x: filterfiles(files, x), (c, a, d))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
58
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
59 for f in c:
275
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
60 to = None
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
61 if f in mmap:
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
62 to = repo.file(f).read(mmap[f])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
63 tn = read(f)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
64 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
65 for f in a:
264
4c1d7072d5cd Attempt to make diff deal with null sources properly
mpm@selenic.com
parents: 262
diff changeset
66 to = None
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
67 tn = read(f)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
68 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
69 for f in d:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
70 to = repo.file(f).read(mmap[f])
264
4c1d7072d5cd Attempt to make diff deal with null sources properly
mpm@selenic.com
parents: 262
diff changeset
71 tn = None
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
72 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
73
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
74 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None):
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
75 """show a single changeset or file revision"""
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
76 changelog = repo.changelog
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
77 if filelog:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
78 log = filelog
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
79 filerev = rev
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
80 node = filenode = filelog.node(filerev)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
81 changerev = filelog.linkrev(filenode)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
82 changenode = changenode or changelog.node(changerev)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
83 else:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
84 changerev = rev
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
85 log = changelog
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
86 if changenode is None:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
87 changenode = changelog.node(changerev)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
88 elif not changerev:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
89 rev = changerev = changelog.rev(changenode)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
90 node = changenode
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
91
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
92 if ui.quiet:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
93 ui.write("%d:%s\n" % (rev, hg.hex(node)))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
94 return
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
95
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
96 changes = changelog.read(changenode)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
97 description = changes[4].strip().splitlines()
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
98
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
99 parents = [(log.rev(parent), hg.hex(parent))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
100 for parent in log.parents(node)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
101 if ui.debugflag or parent != hg.nullid]
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
102 if not ui.debugflag and len(parents) == 1 and parents[0][0] == rev-1:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
103 parents = []
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
104
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
105 if filelog:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
106 ui.write("revision: %d:%s\n" % (filerev, hg.hex(filenode)))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
107 for parent in parents:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
108 ui.write("parent: %d:%s\n" % parent)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
109 ui.status("changeset: %d:%s\n" % (changerev, hg.hex(changenode)))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
110 else:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
111 ui.write("changeset: %d:%s\n" % (changerev, hg.hex(changenode)))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
112 for parent in parents:
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
113 ui.write("parent: %d:%s\n" % parent)
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
114 ui.note("manifest: %d:%s\n" % (repo.manifest.rev(changes[0]),
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
115 hg.hex(changes[0])))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
116 ui.status("user: %s\n" % changes[1])
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
117 ui.status("date: %s\n" % time.asctime(
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
118 time.localtime(float(changes[2].split(' ')[0]))))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
119 ui.note("files: %s\n" % " ".join(changes[3]))
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
120 if description:
330
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
121 if ui.verbose:
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
122 ui.status("description:\n")
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
123 ui.status(changes[4].strip())
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
124 ui.status("\n")
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
125 else:
27d08c0c2a7e Merge with TAH
mpm@selenic.com
parents: 320 329
diff changeset
126 ui.status("summary: %s\n" % description[0])
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
127 ui.status("\n")
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
128
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
129 def help(ui, cmd=None):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
130 '''show help for a given command or all commands'''
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
131 if cmd:
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
132 try:
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
133 i = find(cmd)
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
134 ui.write("%s\n\n" % i[2])
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
135
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
136 if i[1]:
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
137 for s, l, d, c in i[1]:
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
138 opt=' '
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
139 if s: opt = opt + '-' + s + ' '
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
140 if l: opt = opt + '--' + l + ' '
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
141 if d: opt = opt + '(' + str(d) + ')'
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
142 ui.write(opt, "\n")
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
143 if c: ui.write(' %s\n' % c)
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
144 ui.write("\n")
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
145
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
146 ui.write(i[0].__doc__, "\n")
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
147 except UnknownCommand:
268
1634a7ea6748 unknown command fixups
mpm@selenic.com
parents: 266
diff changeset
148 ui.warn("hg: unknown command %s\n" % cmd)
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
149 sys.exit(0)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
150 else:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
151 ui.status('hg commands:\n\n')
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
152
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
153 h = {}
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
154 for e in table.values():
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
155 f = e[0]
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
156 if f.__name__.startswith("debug"): continue
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
157 d = ""
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
158 if f.__doc__:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
159 d = f.__doc__.splitlines(0)[0].rstrip()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
160 h[f.__name__] = d
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
161
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
162 fns = h.keys()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
163 fns.sort()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
164 m = max(map(len, fns))
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
165 for f in fns:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
166 ui.status(' %-*s %s\n' % (m, f, h[f]))
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
167
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
168 # Commands start here, listed alphabetically
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
169
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
170 def add(ui, repo, file, *files):
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
171 '''add the specified files on the next commit'''
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
172 repo.add(relpath(repo, (file,) + files))
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
173
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
174 def addremove(ui, repo):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
175 """add all new files, delete all missing files"""
230
00ea3613f82c make diffdir default to dirstate.parents()
mpm@selenic.com
parents: 227
diff changeset
176 (c, a, d, u) = repo.diffdir(repo.root)
259
45c293b71341 fix addremove
mpm@selenic.com
parents: 257
diff changeset
177 repo.add(u)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
178 repo.remove(d)
219
8ff4532376a4 hg checkout: refuse to checkout if there are outstanding changes
mpm@selenic.com
parents: 214
diff changeset
179
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
180 def annotate(u, repo, file, *files, **ops):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
181 """show changeset information per file line"""
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
182 def getnode(rev):
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
183 return hg.short(repo.changelog.node(rev))
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
184
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
185 def getname(rev):
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
186 try:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
187 return bcache[rev]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
188 except KeyError:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
189 cl = repo.changelog.read(repo.changelog.node(rev))
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
190 name = cl[1]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
191 f = name.find('@')
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
192 if f >= 0:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
193 name = name[:f]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
194 bcache[rev] = name
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
195 return name
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
196
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
197 bcache = {}
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
198 opmap = [['user', getname], ['number', str], ['changeset', getnode]]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
199 if not ops['user'] and not ops['changeset']:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
200 ops['number'] = 1
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
201
227
f57519cddd3d move repo.current to dirstate.parents()
mpm@selenic.com
parents: 221
diff changeset
202 node = repo.dirstate.parents()[0]
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
203 if ops['revision']:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
204 node = repo.changelog.lookup(ops['revision'])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
205 change = repo.changelog.read(node)
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
206 mmap = repo.manifest.read(change[0])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
207 maxuserlen = 0
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
208 maxchangelen = 0
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
209 for f in relpath(repo, (file,) + files):
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
210 lines = repo.file(f).annotate(mmap[f])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
211 pieces = []
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
212
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
213 for o, f in opmap:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
214 if ops[o]:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
215 l = [ f(n) for n,t in lines ]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
216 m = max(map(len, l))
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
217 pieces.append([ "%*s" % (m, x) for x in l])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
218
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
219 for p,l in zip(zip(*pieces), lines):
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
220 u.write(" ".join(p) + ": " + l[1])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
221
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
222 def cat(ui, repo, file, rev = []):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
223 """output the latest or given revision of a file"""
281
574420507d8c hg cat: relative file support
mpm@selenic.com
parents: 276
diff changeset
224 r = repo.file(relpath(repo, [file])[0])
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
225 n = r.tip()
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
226 if rev: n = r.lookup(rev)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
227 sys.stdout.write(r.read(n))
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
228
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
229 def commit(ui, repo, *files, **opts):
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
230 """commit the specified files or all outstanding changes"""
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
231 text = opts['text']
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
232 if not text and opts['logfile']:
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
233 try: text = open(opts['logfile']).read()
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
234 except IOError: pass
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
235
317
b18ce742566a hg commit: user and date options
mpm@selenic.com
parents: 312
diff changeset
236 repo.commit(relpath(repo, files), text, opts['user'], opts['date'])
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
237
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
238 def debugaddchangegroup(ui, repo):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
239 data = sys.stdin.read()
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
240 repo.addchangegroup(data)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
241
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
242 def debugchangegroup(ui, repo, roots):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
243 newer = repo.newer(map(repo.lookup, roots))
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
244 for chunk in repo.changegroup(newer):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
245 sys.stdout.write(chunk)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
246
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
247 def debugindex(ui, file):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
248 r = hg.revlog(open, file, "")
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
249 print " rev offset length base linkrev"+\
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
250 " p1 p2 nodeid"
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
251 for i in range(r.count()):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
252 e = r.index[i]
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
253 print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % (
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
254 i, e[0], e[1], e[2], e[3],
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
255 hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5]))
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
256
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
257 def debugindexdot(ui, file):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
258 r = hg.revlog(open, file, "")
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
259 print "digraph G {"
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
260 for i in range(r.count()):
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
261 e = r.index[i]
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
262 print "\t%d -> %d" % (r.rev(e[4]), i)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
263 if e[5] != hg.nullid:
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
264 print "\t%d -> %d" % (r.rev(e[5]), i)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
265 print "}"
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
266
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
267 def diff(ui, repo, *files, **opts):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
268 """diff working directory (or selected files)"""
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
269 revs = []
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
270 if opts['rev']:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
271 revs = map(lambda x: repo.lookup(x), opts['rev'])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
272
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
273 if len(revs) > 2:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
274 self.ui.warn("too many revisions to diff\n")
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
275 sys.exit(1)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
276
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
277 if files:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
278 files = relpath(repo, files)
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
279 else:
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
280 files = relpath(repo, [""])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
281
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
282 dodiff(repo, os.getcwd(), files, *revs)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
283
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
284 def export(ui, repo, changeset):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
285 """dump the changeset header and diffs for a revision"""
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
286 node = repo.lookup(changeset)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
287 prev, other = repo.changelog.parents(node)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
288 change = repo.changelog.read(node)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
289 print "# HG changeset patch"
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
290 print "# User %s" % change[1]
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
291 print "# Node ID %s" % hg.hex(node)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
292 print "# Parent %s" % hg.hex(prev)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
293 print
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
294 if other != hg.nullid:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
295 print "# Parent %s" % hg.hex(other)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
296 print change[4].rstrip()
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
297 print
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
298
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
299 dodiff(repo, "", None, prev, node)
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
300
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
301 def forget(ui, repo, file, *files):
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
302 """don't add the specified files on the next commit"""
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
303 repo.forget(relpath(repo, (file,) + files))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
304
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
305 def heads(ui, repo):
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
306 """show current repository heads"""
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
307 for n in repo.changelog.heads():
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
308 show_changeset(ui, repo, changenode=n)
221
2bfe525ef6ca Beginning of multi-head support
mpm@selenic.com
parents: 220
diff changeset
309
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
310 def history(ui, repo):
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
311 """show the changelog history"""
270
5a80ed2158c8 Reverse order of hg log and hg history lists
mpm@selenic.com
parents: 268
diff changeset
312 for i in range(repo.changelog.count() - 1, -1, -1):
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
313 show_changeset(ui, repo, rev=i)
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
314
290
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
315 def init(ui, source=None):
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
316 """create a new repository or copy an existing one"""
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
317
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
318 if source:
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
319 paths = {}
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
320 for name, path in ui.configitems("paths"):
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
321 paths[name] = path
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
322
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
323 if source in paths: source = paths[source]
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
324
290
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
325 link = 0
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
326 if not source.startswith("http://"):
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
327 d1 = os.stat(os.getcwd()).st_dev
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
328 d2 = os.stat(source).st_dev
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
329 if d1 == d2: link = 1
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
330
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
331 if link:
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
332 ui.debug("copying by hardlink\n")
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
333 os.system("cp -al %s/.hg .hg" % source)
300
d3400605d246 hg init: when hardlinking, remove dirstate
mpm@selenic.com
parents: 295
diff changeset
334 try:
d3400605d246 hg init: when hardlinking, remove dirstate
mpm@selenic.com
parents: 295
diff changeset
335 os.remove(".hg/dirstate")
d3400605d246 hg init: when hardlinking, remove dirstate
mpm@selenic.com
parents: 295
diff changeset
336 except: pass
290
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
337 else:
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
338 repo = hg.repository(ui, ".", create=1)
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
339 other = hg.repository(ui, source)
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
340 cg = repo.getchangegroup(other)
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
341 repo.addchangegroup(cg)
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
342 else:
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
343 hg.repository(ui, ".", create=1)
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
344
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
345 def log(ui, repo, f):
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
346 """show the revision history of a single file"""
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
347 f = relpath(repo, [f])[0]
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
348
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
349 r = repo.file(f)
270
5a80ed2158c8 Reverse order of hg log and hg history lists
mpm@selenic.com
parents: 268
diff changeset
350 for i in range(r.count() - 1, -1, -1):
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
351 show_changeset(ui, repo, filelog=r, rev=i)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
352
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
353 def manifest(ui, repo, rev = []):
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
354 """output the latest or given revision of the project manifest"""
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
355 n = repo.manifest.tip()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
356 if rev:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
357 n = repo.manifest.lookup(rev)
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
358 m = repo.manifest.read(n)
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
359 mf = repo.manifest.readflags(n)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
360 files = m.keys()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
361 files.sort()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
362
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
363 for f in files:
276
10e325db7347 add tracking of execute permissions
mpm@selenic.com
parents: 275
diff changeset
364 ui.write("%40s %3s %s\n" % (hg.hex(m[f]), mf[f] and "755" or "644", f))
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
365
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
366 def parents(ui, repo, node = None):
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
367 '''show the parents of the current working dir'''
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
368 if node:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
369 p = repo.changelog.parents(repo.lookup(hg.bin(node)))
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
370 else:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
371 p = repo.dirstate.parents()
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
372
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
373 for n in p:
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
374 if n != hg.nullid:
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
375 show_changeset(ui, repo, changenode=n)
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
376
294
f8d56da6ac8f hg patch: fix to actually take a list of patches
mpm@selenic.com
parents: 293
diff changeset
377 def patch(ui, repo, patch1, *patches, **opts):
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
378 """import an ordered set of patches"""
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
379 try:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
380 import psyco
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
381 psyco.full()
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
382 except:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
383 pass
294
f8d56da6ac8f hg patch: fix to actually take a list of patches
mpm@selenic.com
parents: 293
diff changeset
384
295
38919e1c254d Fix hg import fix
mpm@selenic.com
parents: 294
diff changeset
385 patches = (patch1,) + patches
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
386
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
387 d = opts["base"]
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
388 strip = opts["strip"]
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
389 quiet = opts["quiet"] and "> /dev/null" or ""
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
390
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
391 for patch in patches:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
392 ui.status("applying %s\n" % patch)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
393 pf = os.path.join(d, patch)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
394
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
395 text = ""
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
396 for l in file(pf):
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
397 if l[:4] == "--- ": break
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
398 text += l
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
399
310
273f6a01d18b hg patch: add default commit text
mpm@selenic.com
parents: 309
diff changeset
400 # make sure text isn't empty
273f6a01d18b hg patch: add default commit text
mpm@selenic.com
parents: 309
diff changeset
401 if not text: text = "imported patch %s\n" % patch
273f6a01d18b hg patch: add default commit text
mpm@selenic.com
parents: 309
diff changeset
402
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
403 f = os.popen("lsdiff --strip %d %s" % (strip, pf))
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
404 files = filter(None, map(lambda x: x.rstrip(), f.read().splitlines()))
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
405 f.close()
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
406
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
407 if files:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
408 if os.system("patch -p%d < %s %s" % (strip, pf, quiet)):
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
409 raise "patch failed!"
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
410 repo.commit(files, text)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
411
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
412 def pull(ui, repo, source):
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
413 """pull changes from the specified source"""
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
414 paths = {}
286
bd9d1e93f8d6 hg pull: ditch .hgpaths for new .hgrc
mpm@selenic.com
parents: 281
diff changeset
415 for name, path in ui.configitems("paths"):
290
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
416 paths[name] = path
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
417
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
418 if source in paths: source = paths[source]
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
419
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
420 other = hg.repository(ui, source)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
421 cg = repo.getchangegroup(other)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
422 repo.addchangegroup(cg)
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
423
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
424 def push(ui, repo, dest):
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
425 """push changes to the specified destination"""
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
426 paths = {}
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
427 for name, path in ui.configitems("paths"):
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
428 paths[name] = path
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
429
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
430 if dest in paths: dest = paths[dest]
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
431
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
432 if not dest.startswith("ssh://"):
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
433 ui.warn("abort: can only push to ssh:// destinations currently\n")
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
434 return 1
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
435
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
436 m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?', dest)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
437 if not m:
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
438 ui.warn("abort: couldn't parse destination %s\n" % dest)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
439 return 1
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
440
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
441 user, host, port, path = map(m.group, (2, 3, 5, 7))
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
442 host = user and ("%s@%s" % (user, host)) or host
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
443 port = port and (" -p %s") % port or ""
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
444 path = path or ""
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
445
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
446 sport = random.randrange(30000, 60000)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
447 cmd = "ssh %s%s -R %d:localhost:%d 'cd %s; hg pull http://localhost:%d/'"
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
448 cmd = cmd % (host, port, sport+1, sport, path, sport+1)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
449
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
450 child = os.fork()
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
451 if not child:
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
452 sys.stdout = file("/dev/null", "w")
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
453 sys.stderr = sys.stdout
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
454 hgweb.server(repo.root, "pull", "", "localhost", sport)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
455 else:
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
456 r = os.system(cmd)
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
457 os.kill(child, signal.SIGTERM)
320
292e10b5831a hg push: propagate return code
mpm@selenic.com
parents: 319
diff changeset
458 return r
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
459
333
d60a3060f9e2 hg rawcommit: fix files arg conflict
mpm@selenic.com
parents: 330
diff changeset
460 def rawcommit(ui, repo, flist, **rc):
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
461 "raw commit interface"
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
462
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
463 text = rc['text']
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
464 if not text and rc['logfile']:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
465 try: text = open(rc['logfile']).read()
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
466 except IOError: pass
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
467 if not text and not rc['logfile']:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
468 print "missing commit text"
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
469 return 1
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
470
333
d60a3060f9e2 hg rawcommit: fix files arg conflict
mpm@selenic.com
parents: 330
diff changeset
471 files = relpath(repo, flist)
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
472 if rc['files']:
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
473 files += open(rc['files']).read().splitlines()
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
474
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
475 repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent'])
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
476
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
477 def recover(ui, repo):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
478 """roll back an interrupted transaction"""
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
479 repo.recover()
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
480
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
481 def remove(ui, repo, file, *files):
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
482 """remove the specified files on the next commit"""
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
483 repo.remove(relpath(repo, (file,) + files))
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
484
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
485 def serve(ui, repo, **opts):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
486 """export the repository via HTTP"""
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
487 hgweb.server(repo.root, opts["name"], opts["templates"],
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
488 opts["address"], opts["port"])
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
489
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
490 def status(ui, repo):
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
491 '''show changed files in the working directory
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
492
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
493 C = changed
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
494 A = added
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
495 R = removed
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
496 ? = not tracked'''
312
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
497
09375250eb31 Optimize diff and status in subdirectories
mpm@selenic.com
parents: 310
diff changeset
498 (c, a, d, u) = repo.diffdir(os.getcwd())
220
3113a94c1bff change dircache into dirstate
mpm@selenic.com
parents: 219
diff changeset
499 (c, a, d, u) = map(lambda x: relfilter(repo, x), (c, a, d, u))
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
500
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
501 for f in c: print "C", f
220
3113a94c1bff change dircache into dirstate
mpm@selenic.com
parents: 219
diff changeset
502 for f in a: print "A", f
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
503 for f in d: print "R", f
220
3113a94c1bff change dircache into dirstate
mpm@selenic.com
parents: 219
diff changeset
504 for f in u: print "?", f
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
505
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
506 def tags(ui, repo):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
507 """list repository tags"""
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
508 repo.lookup(0) # prime the cache
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
509 i = repo.tags.items()
257
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
510 n = []
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
511 for e in i:
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
512 try:
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
513 l = repo.changelog.rev(e[1])
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
514 except KeyError:
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
515 l = -2
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
516 n.append((l, e))
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
517
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
518 n.sort()
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
519 n.reverse()
65dccc4555c2 Sort tags in revision order
mpm@selenic.com
parents: 255
diff changeset
520 i = [ e[1] for e in n ]
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
521 for k, n in i:
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
522 try:
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
523 r = repo.changelog.rev(n)
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
524 except KeyError:
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
525 r = "?"
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
526 print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n))
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
527
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
528 def tip(ui, repo):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
529 """show the tip revision"""
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
530 n = repo.changelog.tip()
329
67c19ad374a9 Use common output function show_changeset() for hg heads|history|log|tip.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 320
diff changeset
531 show_changeset(ui, repo, changenode=n)
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
532
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
533 def undo(ui, repo):
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
534 """undo the last transaction"""
210
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 209
diff changeset
535 repo.undo()
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 209
diff changeset
536
275
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
537 def update(ui, repo, node=None, merge=False, clean=False):
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
538 '''update or merge working directory
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
539
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
540 If there are no outstanding changes in the working directory and
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
541 there is a linear relationship between the current version and the
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
542 requested version, the result is the requested version.
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
543
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
544 Otherwise the result is a merge between the contents of the
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
545 current working directory and the requested version. Files that
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
546 changed between either parent are marked as changed for the next
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
547 commit and a commit must be performed before any further updates
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
548 are allowed.
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
549 '''
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
550 node = node and repo.lookup(node) or repo.changelog.tip()
275
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
551 return repo.update(node, allow=merge, force=clean)
254
c03f58e5fd2d unify checkout and resolve into update
mpm@selenic.com
parents: 252
diff changeset
552
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
553 def verify(ui, repo):
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
554 """verify the integrity of the repository"""
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
555 return repo.verify()
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
556
255
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
557 # Command options and aliases are listed here, alphabetically
20a44c82795f hg help: use docstrings only
mpm@selenic.com
parents: 254
diff changeset
558
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
559 table = {
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
560 "add": (add, [], "hg add [files]"),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
561 "addremove": (addremove, [], "hg addremove"),
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
562 "ann|annotate": (annotate,
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
563 [('r', 'revision', '', 'revision'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
564 ('u', 'user', None, 'show user'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
565 ('n', 'number', None, 'show revision number'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
566 ('c', 'changeset', None, 'show changeset')],
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
567 'hg annotate [-u] [-c] [-n] [-r id] [files]'),
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
568 "cat|dump": (cat, [], 'hg cat <file> [rev]'),
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
569 "commit|ci": (commit,
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
570 [('t', 'text', "", 'commit text'),
317
b18ce742566a hg commit: user and date options
mpm@selenic.com
parents: 312
diff changeset
571 ('l', 'logfile', "", 'commit text file'),
b18ce742566a hg commit: user and date options
mpm@selenic.com
parents: 312
diff changeset
572 ('d', 'date', "", 'data'),
b18ce742566a hg commit: user and date options
mpm@selenic.com
parents: 312
diff changeset
573 ('u', 'user', "", 'user')],
289
266396e32006 hg commit: add -t and -l options
mpm@selenic.com
parents: 286
diff changeset
574 'hg commit [files]'),
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
575 "debugaddchangegroup": (debugaddchangegroup, [], 'debugaddchangegroup'),
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
576 "debugchangegroup": (debugchangegroup, [], 'debugchangegroup [roots]'),
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
577 "debugindex": (debugindex, [], 'debugindex <file>'),
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
578 "debugindexdot": (debugindexdot, [], 'debugindexdot <file>'),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
579 "diff": (diff, [('r', 'rev', [], 'revision')],
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
580 'hg diff [-r A] [-r B] [files]'),
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
581 "export": (export, [], "hg export <changeset>"),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
582 "forget": (forget, [], "hg forget [files]"),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
583 "heads": (heads, [], 'hg heads'),
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
584 "history": (history, [], 'hg history'),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
585 "help": (help, [], 'hg help [command]'),
290
07c6cb9fd1c5 replace hg branch with hg init [source]
mpm@selenic.com
parents: 289
diff changeset
586 "init": (init, [], 'hg init [url]'),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
587 "log": (log, [], 'hg log <file>'),
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
588 "manifest|dumpmanifest": (manifest, [], 'hg manifest [rev]'),
227
f57519cddd3d move repo.current to dirstate.parents()
mpm@selenic.com
parents: 221
diff changeset
589 "parents": (parents, [], 'hg parents [node]'),
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
590 "patch|import": (patch,
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
591 [('p', 'strip', 1, 'path strip'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
592 ('b', 'base', "", 'base path'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
593 ('q', 'quiet', "", 'silence diff')],
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
594 "hg import [options] patches"),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
595 "pull|merge": (pull, [], 'hg pull [source]'),
319
9ab17e83bce3 stopgap hg push support
mpm@selenic.com
parents: 317
diff changeset
596 "push": (push, [], 'hg push <destination>'),
246
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
597 "rawcommit": (rawcommit,
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
598 [('p', 'parent', [], 'parent'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
599 ('d', 'date', "", 'data'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
600 ('u', 'user', "", 'user'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
601 ('F', 'files', "", 'file list'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
602 ('t', 'text', "", 'commit text'),
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
603 ('l', 'logfile', "", 'commit text file')],
96cde50a746f Migrate rawcommit, import, export, history, and merge
mpm@selenic.com
parents: 245
diff changeset
604 'hg rawcommit [options] [files]'),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
605 "recover": (recover, [], "hg recover"),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
606 "remove": (remove, [], "hg remove [files]"),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
607 "serve": (serve, [('p', 'port', 8000, 'listen port'),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
608 ('a', 'address', '', 'interface address'),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
609 ('n', 'name', os.getcwd(), 'repository name'),
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
610 ('t', 'templates', "", 'template map')],
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
611 "hg serve [options]"),
213
d2172916ef6c commands: migrate status and branch
mpm@selenic.com
parents: 212
diff changeset
612 "status": (status, [], 'hg status'),
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
613 "tags": (tags, [], 'hg tags'),
245
fef0f8e041aa big heap of command clean-up work
mpm@selenic.com
parents: 241
diff changeset
614 "tip": (tip, [], 'hg tip'),
210
d2badbd7d1ad hg undo: fixup working dir state
mpm@selenic.com
parents: 209
diff changeset
615 "undo": (undo, [], 'hg undo'),
275
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
616 "update|up|checkout|co|resolve": (update,
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
617 [('m', 'merge', None,
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
618 'allow merging of conflicts'),
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
619 ('C', 'clean', None,
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
620 'overwrite locally modified files')],
61d45b0ba8fb various merge improvements
mpm@selenic.com
parents: 270
diff changeset
621 'hg update [options] [node]'),
247
863b508c5b36 migrate verify
mpm@selenic.com
parents: 246
diff changeset
622 "verify": (verify, [], 'hg verify'),
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
623 }
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
624
248
b7645b3c86ff migrate remaining commands
mpm@selenic.com
parents: 247
diff changeset
625 norepo = "init branch help debugindex debugindexdot"
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
626
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
627 def find(cmd):
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
628 i = None
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
629 for e in table.keys():
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
630 if re.match(e + "$", cmd):
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
631 return table[e]
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
632
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
633 raise UnknownCommand(cmd)
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
634
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
635 class SignalInterrupt(Exception): pass
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
636
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
637 def catchterm(*args):
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
638 raise SignalInterrupt
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
639
249
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
640 def run():
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
641 sys.exit(dispatch(sys.argv[1:]))
619e775aa7f9 import and startup cleanups
mpm@selenic.com
parents: 248
diff changeset
642
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
643 def dispatch(args):
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
644 options = {}
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
645 opts = [('v', 'verbose', None, 'verbose'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
646 ('d', 'debug', None, 'debug'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
647 ('q', 'quiet', None, 'quiet'),
309
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
648 ('p', 'profile', None, 'profile'),
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
649 ('y', 'noninteractive', None, 'run non-interactively'),
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
650 ]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
651
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
652 args = fancyopts.fancyopts(args, opts, options,
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
653 'hg [options] <command> [options] [files]')
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
654
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
655 if not args:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
656 cmd = "help"
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
657 else:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
658 cmd, args = args[0], args[1:]
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
659
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
660 u = ui.ui(options["verbose"], options["debug"], options["quiet"],
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
661 not options["noninteractive"])
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
662
252
5eda6c542978 Handle unknown commands nicely
mpm@selenic.com
parents: 250
diff changeset
663 try:
5eda6c542978 Handle unknown commands nicely
mpm@selenic.com
parents: 250
diff changeset
664 i = find(cmd)
5eda6c542978 Handle unknown commands nicely
mpm@selenic.com
parents: 250
diff changeset
665 except UnknownCommand:
268
1634a7ea6748 unknown command fixups
mpm@selenic.com
parents: 266
diff changeset
666 u.warn("hg: unknown command '%s'\n" % cmd)
252
5eda6c542978 Handle unknown commands nicely
mpm@selenic.com
parents: 250
diff changeset
667 help(u)
5eda6c542978 Handle unknown commands nicely
mpm@selenic.com
parents: 250
diff changeset
668 sys.exit(1)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
669
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
670 signal.signal(signal.SIGTERM, catchterm)
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
671
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
672 cmdoptions = {}
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
673 try:
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
674 args = fancyopts.fancyopts(args, i[1], cmdoptions, i[2])
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
675 except fancyopts.getopt.GetoptError, inst:
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
676 u.warn("hg %s: %s\n" % (cmd, inst))
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
677 help(u, cmd)
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
678 sys.exit(-1)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
679
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
680 if cmd not in norepo.split():
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
681 repo = hg.repository(ui = u)
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
682 d = lambda: i[0](u, repo, *args, **cmdoptions)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
683 else:
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
684 d = lambda: i[0](u, *args, **cmdoptions)
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
685
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
686 try:
309
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
687 if options['profile']:
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
688 import hotshot, hotshot.stats
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
689 prof = hotshot.Profile("hg.prof")
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
690 r = prof.runcall(d)
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
691 prof.close()
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
692 stats = hotshot.stats.load("hg.prof")
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
693 stats.strip_dirs()
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
694 stats.sort_stats('time', 'calls')
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
695 stats.print_stats(40)
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
696 return r
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
697 else:
61414da06fe5 add easy profiling support
mpm@selenic.com
parents: 306
diff changeset
698 return d()
214
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
699 except SignalInterrupt:
2d60aa9bde0a catch TERM signal in command processor
mpm@selenic.com
parents: 213
diff changeset
700 u.warn("killed!\n")
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
701 except KeyboardInterrupt:
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents:
diff changeset
702 u.warn("interrupted!\n")
250
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
703 except IOError, inst:
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
704 if inst.errno == 32:
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
705 u.warn("broken pipe\n")
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
706 else:
45ee7c4cae4f Catch broken pipes in command interpreter
mpm@selenic.com
parents: 249
diff changeset
707 raise
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
708 except TypeError, inst:
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
709 # was this an argument error?
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
710 tb = traceback.extract_tb(sys.exc_info()[2])
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
711 if len(tb) > 2: # no
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
712 raise
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
713 u.debug(inst, "\n")
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
714 u.warn("%s: invalid arguments\n" % i[0].__name__)
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
715 help(u, cmd)
212
48398a5353e3 commands: better argument processing, per-command help
mpm@selenic.com
parents: 211
diff changeset
716 sys.exit(-1)
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 290
diff changeset
717