15 # psyco.full() |
15 # psyco.full() |
16 # except: |
16 # except: |
17 # pass |
17 # pass |
18 |
18 |
19 import sys |
19 import sys |
20 from mercurial import hg, fancyopts, ui, commands |
20 from mercurial import commands |
21 |
21 |
22 try: |
22 sys.exit(commands.dispatch(sys.argv[1:])) |
23 sys.exit(commands.dispatch(sys.argv[1:])) |
|
24 except commands.UnknownCommand: |
|
25 # fall through |
|
26 pass |
|
27 |
23 |
28 options = {} |
|
29 opts = [('v', 'verbose', None, 'verbose'), |
|
30 ('d', 'debug', None, 'debug'), |
|
31 ('q', 'quiet', None, 'quiet'), |
|
32 ('y', 'noninteractive', None, 'run non-interactively'), |
|
33 ] |
|
34 |
|
35 args = fancyopts.fancyopts(sys.argv[1:], opts, options, |
|
36 'hg [options] <command> [command options] [files]') |
|
37 |
|
38 try: |
|
39 cmd = args[0] |
|
40 args = args[1:] |
|
41 except: |
|
42 cmd = "help" |
|
43 |
|
44 ui = ui.ui(options["verbose"], options["debug"], options["quiet"], |
|
45 not options["noninteractive"]) |
|
46 |
|
47 try: |
|
48 repo = hg.repository(ui=ui) |
|
49 except IOError: |
|
50 ui.warn("Unable to open repository\n") |
|
51 sys.exit(0) |
|
52 |
|
53 if cmd == "debugchangegroup": |
|
54 newer = repo.newer(map(repo.lookup, args)) |
|
55 for chunk in repo.changegroup(newer): |
|
56 sys.stdout.write(chunk) |
|
57 |
|
58 elif cmd == "debugaddchangegroup": |
|
59 data = sys.stdin.read() |
|
60 repo.addchangegroup(data) |
|
61 |
|
62 elif cmd == "dump": |
|
63 if args: |
|
64 r = repo.file(args[0]) |
|
65 n = r.tip() |
|
66 if len(args) > 1: n = r.lookup(args[1]) |
|
67 sys.stdout.write(r.read(n)) |
|
68 else: |
|
69 print "missing filename" |
|
70 |
|
71 elif cmd == "dumpmanifest": |
|
72 n = repo.manifest.tip() |
|
73 if len(args) > 0: |
|
74 n = repo.manifest.lookup(args[0]) |
|
75 m = repo.manifest.read(n) |
|
76 files = m.keys() |
|
77 files.sort() |
|
78 |
|
79 for f in files: |
|
80 print hg.hex(m[f]), f |
|
81 |
|
82 elif cmd == "debugindex": |
|
83 if ".hg" not in args[0]: |
|
84 args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i" |
|
85 |
|
86 r = hg.revlog(open, args[0], "") |
|
87 print " rev offset length base linkrev"+\ |
|
88 " p1 p2 nodeid" |
|
89 for i in range(r.count()): |
|
90 e = r.index[i] |
|
91 print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % ( |
|
92 i, e[0], e[1], e[2], e[3], |
|
93 hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5])) |
|
94 |
|
95 elif cmd == "debugindexdot": |
|
96 if ".hg" not in args[0]: |
|
97 args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i" |
|
98 |
|
99 r = hg.revlog(open, args[0], "") |
|
100 print "digraph G {" |
|
101 for i in range(r.count()): |
|
102 e = r.index[i] |
|
103 print "\t%d -> %d" % (r.rev(e[4]), i) |
|
104 if e[5] != hg.nullid: |
|
105 print "\t%d -> %d" % (r.rev(e[5]), i) |
|
106 print "}" |
|
107 |
|
108 elif cmd == "tags": |
|
109 repo.lookup(0) # prime the cache |
|
110 i = repo.tags.items() |
|
111 i.sort() |
|
112 for k, n in i: |
|
113 try: |
|
114 r = repo.changelog.rev(n) |
|
115 except KeyError: |
|
116 r = "?" |
|
117 print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n)) |
|
118 |
|
119 else: |
|
120 if cmd: ui.warn("unknown command\n\n") |
|
121 sys.exit(1) |
|