equal
deleted
inserted
replaced
24 ) |
24 ) |
25 |
25 |
26 from . import ( |
26 from . import ( |
27 dagutil, |
27 dagutil, |
28 error, |
28 error, |
29 manifest, |
|
30 match as matchmod, |
29 match as matchmod, |
31 mdiff, |
30 mdiff, |
32 phases, |
31 phases, |
33 pycompat, |
32 pycompat, |
34 repository, |
33 repository, |
822 if progress: |
821 if progress: |
823 progress.complete() |
822 progress.complete() |
824 |
823 |
825 yield closechunk() |
824 yield closechunk() |
826 |
825 |
827 # filter any nodes that claim to be part of the known set |
|
828 def _prune(self, store, missing, commonrevs): |
|
829 # TODO this violates storage abstraction for manifests. |
|
830 if isinstance(store, manifest.manifestrevlog): |
|
831 if not self._filematcher.visitdir(store._dir[:-1] or '.'): |
|
832 return [] |
|
833 |
|
834 rr, rl = store.rev, store.linkrev |
|
835 return [n for n in missing if rl(rr(n)) not in commonrevs] |
|
836 |
|
837 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
826 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): |
838 """Yield a sequence of changegroup byte chunks.""" |
827 """Yield a sequence of changegroup byte chunks.""" |
839 |
828 |
840 repo = self._repo |
829 repo = self._repo |
841 cl = repo.changelog |
830 cl = repo.changelog |
1029 |
1018 |
1030 size = 0 |
1019 size = 0 |
1031 while tmfnodes: |
1020 while tmfnodes: |
1032 dir, nodes = tmfnodes.popitem() |
1021 dir, nodes = tmfnodes.popitem() |
1033 store = dirlog(dir) |
1022 store = dirlog(dir) |
1034 prunednodes = self._prune(store, nodes, commonrevs) |
1023 |
|
1024 if not self._filematcher.visitdir(store._dir[:-1] or '.'): |
|
1025 prunednodes = [] |
|
1026 else: |
|
1027 frev, flr = store.rev, store.linkrev |
|
1028 prunednodes = [n for n in nodes |
|
1029 if flr(frev(n)) not in commonrevs] |
1035 |
1030 |
1036 if dir and not prunednodes: |
1031 if dir and not prunednodes: |
1037 continue |
1032 continue |
1038 |
1033 |
1039 lookupfn = makelookupmflinknode(dir, nodes) |
1034 lookupfn = makelookupmflinknode(dir, nodes) |
1125 # Lookup for filenodes, we collected the linkrev nodes above in the |
1120 # Lookup for filenodes, we collected the linkrev nodes above in the |
1126 # fastpath case and with lookupmf in the slowpath case. |
1121 # fastpath case and with lookupmf in the slowpath case. |
1127 def lookupfilelog(x): |
1122 def lookupfilelog(x): |
1128 return linkrevnodes[x] |
1123 return linkrevnodes[x] |
1129 |
1124 |
1130 filenodes = self._prune(filerevlog, linkrevnodes, commonrevs) |
1125 frev, flr = filerevlog.rev, filerevlog.linkrev |
|
1126 filenodes = [n for n in linkrevnodes |
|
1127 if flr(frev(n)) not in commonrevs] |
|
1128 |
1131 if filenodes: |
1129 if filenodes: |
1132 if self._ellipses: |
1130 if self._ellipses: |
1133 revs = _sortnodesellipsis(filerevlog, filenodes, |
1131 revs = _sortnodesellipsis(filerevlog, filenodes, |
1134 cl, lookupfilelog) |
1132 cl, lookupfilelog) |
1135 else: |
1133 else: |