Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 1460:40d08cf1c544
Bug fixing in localrepository.changegroupsubset. Bugs found in testing.
author | Eric Hopper <hopper@omnifarious.org> |
---|---|
date | Fri, 07 Oct 2005 19:49:25 -0700 |
parents | 1033892bbb87 |
children | 02099220ad49 |
comparison
equal
deleted
inserted
replaced
1459:106fdec8e1fb | 1460:40d08cf1c544 |
---|---|
893 return remote.addchangegroup(cg) | 893 return remote.addchangegroup(cg) |
894 | 894 |
895 def changegroupsubset(self, bases, heads): | 895 def changegroupsubset(self, bases, heads): |
896 cl = self.changelog | 896 cl = self.changelog |
897 # msng = missing | 897 # msng = missing |
898 msng_cl_lst, bases, heads = cl.nodesbetween(basenodes, headnodes) | 898 msng_cl_lst, bases, heads = cl.nodesbetween(bases, heads) |
899 junk = None | 899 junk = None |
900 knownheads = {} | 900 knownheads = {} |
901 for n in basenodes: | 901 for n in bases: |
902 for p in cl.parents(n): | 902 for p in cl.parents(n): |
903 if p != nullid: | 903 if p != nullid: |
904 knownheads[p] = 1 | 904 knownheads[p] = 1 |
905 knownheads = knownheads.keys() | 905 knownheads = knownheads.keys() |
906 has_cl_set, junk, junk = cl.nodesbetween(None, knownheads) | 906 if knownheads: |
907 has_cl_set = dict.fromkeys(hasnodeset) | 907 has_cl_set, junk, junk = cl.nodesbetween(None, knownheads) |
908 has_cl_set = dict.fromkeys(hasnodeset) | |
909 else: | |
910 has_cl_set = {} | |
908 | 911 |
909 mnfst = self.manifest | 912 mnfst = self.manifest |
910 msng_mnfst_set = {} | 913 msng_mnfst_set = {} |
911 msng_filenode_set = {} | 914 msng_filenode_set = {} |
915 | |
916 junk = mnfst.index[mnfst.count() - 1] # Get around a bug in lazyindex | |
917 junk = None | |
912 | 918 |
913 def identity(x): | 919 def identity(x): |
914 return x | 920 return x |
915 | 921 |
916 def cmp_by_rev_func(revlog): | 922 def cmp_by_rev_func(revlog): |
936 def collect_manifests_and_files(clnode): | 942 def collect_manifests_and_files(clnode): |
937 c = cl.read(clnode) | 943 c = cl.read(clnode) |
938 for f in c[3]: | 944 for f in c[3]: |
939 # This is to make sure we only have one instance of each | 945 # This is to make sure we only have one instance of each |
940 # filename string for each filename. | 946 # filename string for each filename. |
941 changedfileset.set_default(f, f) | 947 changedfileset.setdefault(f, f) |
942 msng_mnfst_set.set_default(c[0], clnode) | 948 msng_mnfst_set.setdefault(c[0], clnode) |
943 return collect_manifests_and_files | 949 return collect_manifests_and_files |
944 | 950 |
945 def prune_manifests(): | 951 def prune_manifests(): |
946 has_mnfst_set = {} | 952 has_mnfst_set = {} |
947 for n in msng_mnfst_set: | 953 for n in msng_mnfst_set: |
959 for f in changedfiles: | 965 for f in changedfiles: |
960 fnode = m.get(f, None) | 966 fnode = m.get(f, None) |
961 if fnode is not None: | 967 if fnode is not None: |
962 clnode = msng_mnfst_set[mnfstnode] | 968 clnode = msng_mnfst_set[mnfstnode] |
963 ndset = msng_filenode_set.setdefault(f, {}) | 969 ndset = msng_filenode_set.setdefault(f, {}) |
964 ndset.set_default(fnode, clnode) | 970 ndset.setdefault(fnode, clnode) |
971 return collect_msng_filenodes | |
965 | 972 |
966 def prune_filenodes(f, filerevlog): | 973 def prune_filenodes(f, filerevlog): |
967 msngset = msng_filenode_set[f] | 974 msngset = msng_filenode_set[f] |
968 hasset = {} | 975 hasset = {} |
969 for n in msngset: | 976 for n in msngset: |
987 prune_manifests() | 994 prune_manifests() |
988 msng_mnfst_lst = msng_mnfst_set.keys() | 995 msng_mnfst_lst = msng_mnfst_set.keys() |
989 msng_mnfst_lst.sort(cmp_by_rev_func(mnfst)) | 996 msng_mnfst_lst.sort(cmp_by_rev_func(mnfst)) |
990 changedfiles = changedfiles.keys() | 997 changedfiles = changedfiles.keys() |
991 changedfiles.sort() | 998 changedfiles.sort() |
992 group = mnfst.group(mnfst, lookup_manifest_link, | 999 group = mnfst.group(msng_mnfst_lst, lookup_manifest_link, |
993 filenode_collector(changedfiles)) | 1000 filenode_collector(changedfiles)) |
994 for chnk in group: | 1001 for chnk in group: |
995 yield chnk | 1002 yield chnk |
996 msng_mnfst_lst = None | 1003 msng_mnfst_lst = None |
997 msng_mnfst_set.clear() | 1004 msng_mnfst_set.clear() |
998 for fname in changedfiles: | 1005 for fname in changedfiles: |
999 filerevlog = self.file(fname) | 1006 filerevlog = self.file(fname) |
1000 prune_filenodes(fname, filerevlog) | 1007 prune_filenodes(fname, filerevlog) |
1001 msng_filenode_lst = msng_filenode_set[fname].keys() | 1008 msng_filenode_lst = msng_filenode_set[fname].keys() |
1002 if len(msng_filenode_lst) > 0: | 1009 if len(msng_filenode_lst) > 0: |
1003 yield struct.pack(">l", len(f) + 4) + f | 1010 yield struct.pack(">l", len(fname) + 4) + fname |
1004 msng_filenode_lst.sort(cmp_by_rev_func(filerevlog)) | 1011 msng_filenode_lst.sort(cmp_by_rev_func(filerevlog)) |
1005 group = filerevlog.group(msng_filenode_lst, | 1012 group = filerevlog.group(msng_filenode_lst, |
1006 lookup_filenode_link) | 1013 lookup_filenode_link_func(fname)) |
1007 for chnk in group: | 1014 for chnk in group: |
1008 yield chnk | 1015 yield chnk |
1009 del msng_filenode_set[fname] | 1016 del msng_filenode_set[fname] |
1010 yield struct.pack(">l", 0) | 1017 yield struct.pack(">l", 0) |
1011 | 1018 |
1046 yield chnk | 1053 yield chnk |
1047 changedfiles = changedfiles.keys() | 1054 changedfiles = changedfiles.keys() |
1048 changedfiles.sort() | 1055 changedfiles.sort() |
1049 | 1056 |
1050 mnfst = self.manifest | 1057 mnfst = self.manifest |
1051 def nodegen(revlog, reviter): | |
1052 for r in reviter: | |
1053 yield revlog.node(r) | |
1054 nodeiter = gennodelst(mnfst) | 1058 nodeiter = gennodelst(mnfst) |
1055 for chnk in mnfst.group(nodeiter, lookuprevlink_func(mnfst)): | 1059 for chnk in mnfst.group(nodeiter, lookuprevlink_func(mnfst)): |
1056 yield chnk | 1060 yield chnk |
1057 | 1061 |
1058 for fname in changedfiles: | 1062 for fname in changedfiles: |