961 |
961 |
962 def lookup_manifest_link(mnfstnode): |
962 def lookup_manifest_link(mnfstnode): |
963 return msng_mnfst_set[mnfstnode] |
963 return msng_mnfst_set[mnfstnode] |
964 |
964 |
965 def filenode_collector(changedfiles): |
965 def filenode_collector(changedfiles): |
|
966 next_rev = [0] |
966 def collect_msng_filenodes(mnfstnode): |
967 def collect_msng_filenodes(mnfstnode): |
967 m = mnfst.read(mnfstnode) |
968 r = mnfst.rev(mnfstnode) |
968 for f in changedfiles: |
969 if r == next_rev[0]: |
969 fnode = m.get(f, None) |
970 # If the last rev we looked at was the one just previous, |
970 if fnode is not None: |
971 # we only need to see a diff. |
971 clnode = msng_mnfst_set[mnfstnode] |
972 delta = mdiff.patchtext(mnfst.delta(mnfstnode)) |
972 ndset = msng_filenode_set.setdefault(f, {}) |
973 for dline in delta.splitlines(): |
973 ndset.setdefault(fnode, clnode) |
974 f, fnode = dline.split('\0') |
|
975 fnode = bin(fnode[:40]) |
|
976 f = changedfiles.get(f, None) |
|
977 if f is not None: |
|
978 clnode = msng_mnfst_set[mnfstnode] |
|
979 ndset = msng_filenode_set.setdefault(f, {}) |
|
980 ndset.setdefault(fnode, clnode) |
|
981 else: |
|
982 m = mnfst.read(mnfstnode) |
|
983 for f in changedfiles: |
|
984 fnode = m.get(f, None) |
|
985 if fnode is not None: |
|
986 clnode = msng_mnfst_set[mnfstnode] |
|
987 ndset = msng_filenode_set.setdefault(f, {}) |
|
988 ndset.setdefault(fnode, clnode) |
|
989 next_rev[0] = r + 1 |
974 return collect_msng_filenodes |
990 return collect_msng_filenodes |
975 |
991 |
976 def prune_filenodes(f, filerevlog): |
992 def prune_filenodes(f, filerevlog): |
977 msngset = msng_filenode_set[f] |
993 msngset = msng_filenode_set[f] |
978 hasset = {} |
994 hasset = {} |
995 for chnk in group: |
1011 for chnk in group: |
996 yield chnk |
1012 yield chnk |
997 prune_manifests() |
1013 prune_manifests() |
998 msng_mnfst_lst = msng_mnfst_set.keys() |
1014 msng_mnfst_lst = msng_mnfst_set.keys() |
999 msng_mnfst_lst.sort(cmp_by_rev_func(mnfst)) |
1015 msng_mnfst_lst.sort(cmp_by_rev_func(mnfst)) |
1000 changedfiles = changedfiles.keys() |
|
1001 changedfiles.sort() |
|
1002 group = mnfst.group(msng_mnfst_lst, lookup_manifest_link, |
1016 group = mnfst.group(msng_mnfst_lst, lookup_manifest_link, |
1003 filenode_collector(changedfiles)) |
1017 filenode_collector(changedfiles)) |
1004 for chnk in group: |
1018 for chnk in group: |
1005 yield chnk |
1019 yield chnk |
1006 msng_mnfst_lst = None |
1020 msng_mnfst_lst = None |
1007 msng_mnfst_set.clear() |
1021 msng_mnfst_set.clear() |
|
1022 changedfiles = changedfiles.keys() |
|
1023 changedfiles.sort() |
1008 for fname in changedfiles: |
1024 for fname in changedfiles: |
1009 filerevlog = self.file(fname) |
1025 filerevlog = self.file(fname) |
1010 prune_filenodes(fname, filerevlog) |
1026 prune_filenodes(fname, filerevlog) |
1011 msng_filenode_lst = msng_filenode_set[fname].keys() |
1027 msng_filenode_lst = msng_filenode_set[fname].keys() |
1012 if len(msng_filenode_lst) > 0: |
1028 if len(msng_filenode_lst) > 0: |