Show More
@@ -131,6 +131,13 class sshrepository(remoterepository): | |||||
131 | def unlock(self): |
|
131 | def unlock(self): | |
132 | self.call("unlock") |
|
132 | self.call("unlock") | |
133 |
|
133 | |||
|
134 | def lookup(self, key): | |||
|
135 | d = self.call("lookup", key=key) | |||
|
136 | try: | |||
|
137 | return bin(d[:-1]) | |||
|
138 | except: | |||
|
139 | raise hg.RepoError("unexpected response '%s'" % (d[:400] + "...")) | |||
|
140 | ||||
134 | def heads(self): |
|
141 | def heads(self): | |
135 | d = self.call("heads") |
|
142 | d = self.call("heads") | |
136 | try: |
|
143 | try: | |
@@ -160,6 +167,11 class sshrepository(remoterepository): | |||||
160 | n = " ".join(map(hex, nodes)) |
|
167 | n = " ".join(map(hex, nodes)) | |
161 | return self.do_cmd("changegroup", roots=n) |
|
168 | return self.do_cmd("changegroup", roots=n) | |
162 |
|
169 | |||
|
170 | def changegroupsubset(self, bases, heads, kind): | |||
|
171 | bases = " ".join(map(hex, bases)) | |||
|
172 | heads = " ".join(map(hex, heads)) | |||
|
173 | return self.do_cmd("changegroupsubset", bases=bases, heads=heads) | |||
|
174 | ||||
163 | def unbundle(self, cg, heads, source): |
|
175 | def unbundle(self, cg, heads, source): | |
164 | d = self.call("unbundle", heads=' '.join(map(hex, heads))) |
|
176 | d = self.call("unbundle", heads=' '.join(map(hex, heads))) | |
165 | if d: |
|
177 | if d: |
@@ -48,6 +48,11 class sshserver(object): | |||||
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") | |
@@ -61,7 +66,7 class sshserver(object): | |||||
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),)) | |
@@ -110,6 +115,22 class sshserver(object): | |||||
110 |
|
115 | |||
111 | self.fout.flush() |
|
116 | self.fout.flush() | |
112 |
|
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') | |||
|
126 | while True: | |||
|
127 | d = cg.read(4096) | |||
|
128 | if not d: | |||
|
129 | break | |||
|
130 | self.fout.write(d) | |||
|
131 | ||||
|
132 | self.fout.flush() | |||
|
133 | ||||
113 | def do_addchangegroup(self): |
|
134 | def do_addchangegroup(self): | |
114 | '''DEPRECATED''' |
|
135 | '''DEPRECATED''' | |
115 |
|
136 |
General Comments 0
You need to be logged in to leave comments.
Login now