Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/sshserver.py @ 3446:0b450267cf47
Adding changegroupsubset and lookup to ssh protocol so pull -r and
clone -r can be supported.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Sat, 09 Sep 2006 18:25:06 -0700 |
parents | 53e843840349 |
children | ef1032c223e7 |
comparison
equal
deleted
inserted
replaced
3445:233c733e4af5 | 3446:0b450267cf47 |
---|---|
46 impl = getattr(self, 'do_' + cmd, None) | 46 impl = getattr(self, 'do_' + cmd, None) |
47 if impl: impl() | 47 if impl: impl() |
48 else: self.respond("") | 48 else: self.respond("") |
49 return cmd != '' | 49 return cmd != '' |
50 | 50 |
51 def do_lookup(self): | |
52 arg, key = self.getarg() | |
53 assert arg == 'key' | |
54 self.respond(hex(self.repo.lookup(key)) + "\n") | |
55 | |
51 def do_heads(self): | 56 def do_heads(self): |
52 h = self.repo.heads() | 57 h = self.repo.heads() |
53 self.respond(" ".join(map(hex, h)) + "\n") | 58 self.respond(" ".join(map(hex, h)) + "\n") |
54 | 59 |
55 def do_hello(self): | 60 def do_hello(self): |
59 consists of a line in the form: | 64 consists of a line in the form: |
60 | 65 |
61 capabilities: space separated list of tokens | 66 capabilities: space separated list of tokens |
62 ''' | 67 ''' |
63 | 68 |
64 caps = ['unbundle'] | 69 caps = ['unbundle', 'lookup', 'changegroupsubset'] |
65 if self.ui.configbool('server', 'uncompressed'): | 70 if self.ui.configbool('server', 'uncompressed'): |
66 caps.append('stream=%d' % self.repo.revlogversion) | 71 caps.append('stream=%d' % self.repo.revlogversion) |
67 self.respond("capabilities: %s\n" % (' '.join(caps),)) | 72 self.respond("capabilities: %s\n" % (' '.join(caps),)) |
68 | 73 |
69 def do_lock(self): | 74 def do_lock(self): |
100 nodes = [] | 105 nodes = [] |
101 arg, roots = self.getarg() | 106 arg, roots = self.getarg() |
102 nodes = map(bin, roots.split(" ")) | 107 nodes = map(bin, roots.split(" ")) |
103 | 108 |
104 cg = self.repo.changegroup(nodes, 'serve') | 109 cg = self.repo.changegroup(nodes, 'serve') |
110 while True: | |
111 d = cg.read(4096) | |
112 if not d: | |
113 break | |
114 self.fout.write(d) | |
115 | |
116 self.fout.flush() | |
117 | |
118 def do_changegroupsubset(self): | |
119 bases = [] | |
120 heads = [] | |
121 argmap = dict([self.getarg(), self.getarg()]) | |
122 bases = [bin(n) for n in argmap['bases'].split(' ')] | |
123 heads = [bin(n) for n in argmap['heads'].split(' ')] | |
124 | |
125 cg = self.repo.changegroupsubset(bases, heads, 'serve') | |
105 while True: | 126 while True: |
106 d = cg.read(4096) | 127 d = cg.read(4096) |
107 if not d: | 128 if not d: |
108 break | 129 break |
109 self.fout.write(d) | 130 self.fout.write(d) |