equal
deleted
inserted
replaced
5 # This software may be used and distributed according to the terms of the |
5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. |
6 # GNU General Public License version 2 or any later version. |
7 from __future__ import absolute_import |
7 from __future__ import absolute_import |
8 |
8 |
9 from mercurial.i18n import _ |
9 from mercurial.i18n import _ |
10 from mercurial.node import bin, hex, nullid |
10 from mercurial.node import bin, hex |
11 from mercurial import ( |
11 from mercurial import ( |
12 bundlerepo, |
12 bundlerepo, |
13 changegroup, |
13 changegroup, |
14 error, |
14 error, |
15 match, |
15 match, |
141 results.append(fnode) |
141 results.append(fnode) |
142 return results |
142 return results |
143 |
143 |
144 def nodechunk(self, revlog, node, prevnode, linknode): |
144 def nodechunk(self, revlog, node, prevnode, linknode): |
145 prefix = b'' |
145 prefix = b'' |
146 if prevnode == nullid: |
146 if prevnode == revlog.nullid: |
147 delta = revlog.rawdata(node) |
147 delta = revlog.rawdata(node) |
148 prefix = mdiff.trivialdiffheader(len(delta)) |
148 prefix = mdiff.trivialdiffheader(len(delta)) |
149 else: |
149 else: |
150 # Actually uses remotefilelog.revdiff which works on nodes, not revs |
150 # Actually uses remotefilelog.revdiff which works on nodes, not revs |
151 delta = revlog.revdiff(prevnode, node) |
151 delta = revlog.revdiff(prevnode, node) |
243 raise error.Abort(_(b"received file revlog group is empty")) |
243 raise error.Abort(_(b"received file revlog group is empty")) |
244 |
244 |
245 processed = set() |
245 processed = set() |
246 |
246 |
247 def available(f, node, depf, depnode): |
247 def available(f, node, depf, depnode): |
248 if depnode != nullid and (depf, depnode) not in processed: |
248 if depnode != repo.nullid and (depf, depnode) not in processed: |
249 if not (depf, depnode) in revisiondatas: |
249 if not (depf, depnode) in revisiondatas: |
250 # It's not in the changegroup, assume it's already |
250 # It's not in the changegroup, assume it's already |
251 # in the repo |
251 # in the repo |
252 return True |
252 return True |
253 # re-add self to queue |
253 # re-add self to queue |
265 revisiondata = revisiondatas[(f, node)] |
265 revisiondata = revisiondatas[(f, node)] |
266 # revisiondata: (node, p1, p2, cs, deltabase, delta, flags) |
266 # revisiondata: (node, p1, p2, cs, deltabase, delta, flags) |
267 dependents = [revisiondata[1], revisiondata[2], revisiondata[4]] |
267 dependents = [revisiondata[1], revisiondata[2], revisiondata[4]] |
268 |
268 |
269 for dependent in dependents: |
269 for dependent in dependents: |
270 if dependent == nullid or (f, dependent) in revisiondatas: |
270 if dependent == repo.nullid or (f, dependent) in revisiondatas: |
271 continue |
271 continue |
272 prefetchfiles.append((f, hex(dependent))) |
272 prefetchfiles.append((f, hex(dependent))) |
273 |
273 |
274 repo.fileservice.prefetch(prefetchfiles) |
274 repo.fileservice.prefetch(prefetchfiles) |
275 |
275 |
304 copynode = bin(meta[b'copyrev']) |
304 copynode = bin(meta[b'copyrev']) |
305 if not available(f, node, copyfrom, copynode): |
305 if not available(f, node, copyfrom, copynode): |
306 continue |
306 continue |
307 |
307 |
308 for p in [p1, p2]: |
308 for p in [p1, p2]: |
309 if p != nullid: |
309 if p != repo.nullid: |
310 if not available(f, node, f, p): |
310 if not available(f, node, f, p): |
311 continue |
311 continue |
312 |
312 |
313 fl.add(text, meta, trp, linknode, p1, p2) |
313 fl.add(text, meta, trp, linknode, p1, p2) |
314 processed.add((f, node)) |
314 processed.add((f, node)) |