125 yield length |
125 yield length |
126 for c in proto.groupchunks(obsdata): |
126 for c in proto.groupchunks(obsdata): |
127 yield c |
127 yield c |
128 return wireproto.streamres(data()) |
128 return wireproto.streamres(data()) |
129 |
129 |
|
130 |
|
131 def _obsrelsethashtree(repo): |
|
132 cache = [] |
|
133 unfi = repo.unfiltered() |
|
134 for i in unfi: |
|
135 ctx = unfi[i] |
|
136 entry = 0 |
|
137 sha = util.sha1() |
|
138 # add data from p1 |
|
139 for p in ctx.parents(): |
|
140 p = p.rev() |
|
141 if p < 0: |
|
142 p = node.nullid |
|
143 else: |
|
144 p = cache[p][1] |
|
145 if p != node.nullid: |
|
146 entry += 1 |
|
147 sha.update(p) |
|
148 tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) |
|
149 if tmarkers: |
|
150 bmarkers = [obsolete._encodeonemarker(m) for m in tmarkers] |
|
151 bmarkers.sort() |
|
152 for m in bmarkers: |
|
153 entry += 1 |
|
154 sha.update(m) |
|
155 if entry: |
|
156 cache.append((ctx.node(), sha.digest())) |
|
157 else: |
|
158 cache.append((ctx.node(), node.nullid)) |
|
159 return cache |
|
160 |
|
161 def _obshash(repo, nodes): |
|
162 hashs = _obsrelsethashtree(repo) |
|
163 nm = repo.changelog.nodemap |
|
164 return [hashs[nm.get(n)][1] for n in nodes] |
|
165 |
|
166 def srv_obshash(repo, proto, nodes): |
|
167 return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes))) |
|
168 |
130 def capabilities(orig, repo, proto): |
169 def capabilities(orig, repo, proto): |
131 """wrapper to advertise new capability""" |
170 """wrapper to advertise new capability""" |
132 caps = orig(repo, proto) |
171 caps = orig(repo, proto) |
133 if obsolete._enabled: |
172 if obsolete._enabled: |
134 caps += ' _evoext_pushobsmarkers_0' |
173 caps += ' _evoext_pushobsmarkers_0' |
135 caps += ' _evoext_pullobsmarkers_0' |
174 caps += ' _evoext_pullobsmarkers_0' |
|
175 caps += ' _evoext_obshash_0' |
136 return caps |
176 return caps |
137 |
177 |
138 def extsetup(ui): |
178 def extsetup(ui): |
139 obsolete.obsstore = pruneobsstore |
179 obsolete.obsstore = pruneobsstore |
140 obsolete.obsstore.relevantmarkers = relevantmarkers |
180 obsolete.obsstore.relevantmarkers = relevantmarkers |
141 wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') |
181 wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') |
142 wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') |
182 wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') |
143 extensions.wrapfunction(wireproto, 'capabilities', capabilities) |
183 extensions.wrapfunction(wireproto, 'capabilities', capabilities) |
|
184 wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes') |