13 def dispatch(repo, proto, command): |
13 def dispatch(repo, proto, command): |
14 if command not in commands: |
14 if command not in commands: |
15 return False |
15 return False |
16 func, spec = commands[command] |
16 func, spec = commands[command] |
17 args = proto.getargs(spec) |
17 args = proto.getargs(spec) |
18 proto.respond(func(repo, *args)) |
18 proto.respond(func(repo, proto, *args)) |
19 return True |
19 return True |
20 |
20 |
21 def between(repo, pairs): |
21 def between(repo, proto, pairs): |
22 pairs = [map(bin, p.split("-")) for p in pairs.split(" ")] |
22 pairs = [map(bin, p.split("-")) for p in pairs.split(" ")] |
23 r = [] |
23 r = [] |
24 for b in repo.between(pairs): |
24 for b in repo.between(pairs): |
25 r.append(" ".join(map(hex, b)) + "\n") |
25 r.append(" ".join(map(hex, b)) + "\n") |
26 return "".join(r) |
26 return "".join(r) |
27 |
27 |
28 def branchmap(repo): |
28 def branchmap(repo, proto): |
29 branchmap = repo.branchmap() |
29 branchmap = repo.branchmap() |
30 heads = [] |
30 heads = [] |
31 for branch, nodes in branchmap.iteritems(): |
31 for branch, nodes in branchmap.iteritems(): |
32 branchname = urllib.quote(branch) |
32 branchname = urllib.quote(branch) |
33 branchnodes = [hex(node) for node in nodes] |
33 branchnodes = [hex(node) for node in nodes] |
34 heads.append('%s %s' % (branchname, ' '.join(branchnodes))) |
34 heads.append('%s %s' % (branchname, ' '.join(branchnodes))) |
35 return '\n'.join(heads) |
35 return '\n'.join(heads) |
36 |
36 |
37 def branches(repo, nodes): |
37 def branches(repo, proto, nodes): |
38 nodes = map(bin, nodes.split(" ")) |
38 nodes = map(bin, nodes.split(" ")) |
39 r = [] |
39 r = [] |
40 for b in repo.branches(nodes): |
40 for b in repo.branches(nodes): |
41 r.append(" ".join(map(hex, b)) + "\n") |
41 r.append(" ".join(map(hex, b)) + "\n") |
42 return "".join(r) |
42 return "".join(r) |
43 |
43 |
44 def heads(repo): |
44 def heads(repo, proto): |
45 h = repo.heads() |
45 h = repo.heads() |
46 return " ".join(map(hex, h)) + "\n" |
46 return " ".join(map(hex, h)) + "\n" |
47 |
47 |
48 def listkeys(repo, namespace): |
48 def listkeys(repo, proto, namespace): |
49 d = pushkey_.list(repo, namespace).items() |
49 d = pushkey_.list(repo, namespace).items() |
50 t = '\n'.join(['%s\t%s' % (k.encode('string-escape'), |
50 t = '\n'.join(['%s\t%s' % (k.encode('string-escape'), |
51 v.encode('string-escape')) for k, v in d]) |
51 v.encode('string-escape')) for k, v in d]) |
52 return t |
52 return t |
53 |
53 |
54 def lookup(repo, key): |
54 def lookup(repo, proto, key): |
55 try: |
55 try: |
56 r = hex(repo.lookup(key)) |
56 r = hex(repo.lookup(key)) |
57 success = 1 |
57 success = 1 |
58 except Exception, inst: |
58 except Exception, inst: |
59 r = str(inst) |
59 r = str(inst) |
60 success = 0 |
60 success = 0 |
61 return "%s %s\n" % (success, r) |
61 return "%s %s\n" % (success, r) |
62 |
62 |
63 def pushkey(repo, namespace, key, old, new): |
63 def pushkey(repo, proto, namespace, key, old, new): |
64 r = pushkey_.push(repo, namespace, key, old, new) |
64 r = pushkey_.push(repo, namespace, key, old, new) |
65 return '%s\n' % int(r) |
65 return '%s\n' % int(r) |
66 |
66 |
67 commands = { |
67 commands = { |
68 'between': (between, 'pairs'), |
68 'between': (between, 'pairs'), |