Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/localrepo.py @ 1462:12a8d772fa32
Optimizing manifest reads in changegroupsubset by using deltas.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Mon, 10 Oct 2005 08:36:29 -0700 |
parents | 02099220ad49 |
children | 00117edce2dd |
comparison
equal
deleted
inserted
replaced
1461:02099220ad49 | 1462:12a8d772fa32 |
---|---|
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: |