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)