157 r = [] |
157 r = [] |
158 for b in repo.branches(nodes): |
158 for b in repo.branches(nodes): |
159 r.append(" ".join(map(hex, b)) + "\n") |
159 r.append(" ".join(map(hex, b)) + "\n") |
160 return "".join(r) |
160 return "".join(r) |
161 |
161 |
|
162 def capabilities(repo, proto): |
|
163 caps = 'lookup changegroupsubset branchmap pushkey'.split() |
|
164 if streamclone.allowed(repo.ui): |
|
165 caps.append('stream=%d' % repo.changelog.version) |
|
166 caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority)) |
|
167 return ' '.join(caps) |
|
168 |
162 def changegroup(repo, proto, roots): |
169 def changegroup(repo, proto, roots): |
163 nodes = map(bin, roots.split(" ")) |
170 nodes = map(bin, roots.split(" ")) |
164 cg = repo.changegroup(nodes, 'serve') |
171 cg = repo.changegroup(nodes, 'serve') |
165 proto.sendchangegroup(cg) |
172 proto.sendchangegroup(cg) |
166 |
173 |
171 proto.sendchangegroup(cg) |
178 proto.sendchangegroup(cg) |
172 |
179 |
173 def heads(repo, proto): |
180 def heads(repo, proto): |
174 h = repo.heads() |
181 h = repo.heads() |
175 return " ".join(map(hex, h)) + "\n" |
182 return " ".join(map(hex, h)) + "\n" |
|
183 |
|
184 def hello(repo, proto): |
|
185 '''the hello command returns a set of lines describing various |
|
186 interesting things about the server, in an RFC822-like format. |
|
187 Currently the only one defined is "capabilities", which |
|
188 consists of a line in the form: |
|
189 |
|
190 capabilities: space separated list of tokens |
|
191 ''' |
|
192 return "capabilities: %s\n" % (capabilities(repo, proto)) |
176 |
193 |
177 def listkeys(repo, proto, namespace): |
194 def listkeys(repo, proto, namespace): |
178 d = pushkey_.list(repo, namespace).items() |
195 d = pushkey_.list(repo, namespace).items() |
179 t = '\n'.join(['%s\t%s' % (k.encode('string-escape'), |
196 t = '\n'.join(['%s\t%s' % (k.encode('string-escape'), |
180 v.encode('string-escape')) for k, v in d]) |
197 v.encode('string-escape')) for k, v in d]) |
251 |
268 |
252 commands = { |
269 commands = { |
253 'between': (between, 'pairs'), |
270 'between': (between, 'pairs'), |
254 'branchmap': (branchmap, ''), |
271 'branchmap': (branchmap, ''), |
255 'branches': (branches, 'nodes'), |
272 'branches': (branches, 'nodes'), |
|
273 'capabilities': (capabilities, ''), |
256 'changegroup': (changegroup, 'roots'), |
274 'changegroup': (changegroup, 'roots'), |
257 'changegroupsubset': (changegroupsubset, 'bases heads'), |
275 'changegroupsubset': (changegroupsubset, 'bases heads'), |
258 'heads': (heads, ''), |
276 'heads': (heads, ''), |
|
277 'hello': (hello, ''), |
259 'listkeys': (listkeys, 'namespace'), |
278 'listkeys': (listkeys, 'namespace'), |
260 'lookup': (lookup, 'key'), |
279 'lookup': (lookup, 'key'), |
261 'pushkey': (pushkey, 'namespace key old new'), |
280 'pushkey': (pushkey, 'namespace key old new'), |
262 'stream_out': (stream, ''), |
281 'stream_out': (stream, ''), |
263 'unbundle': (unbundle, 'heads'), |
282 'unbundle': (unbundle, 'heads'), |