mercurial/localrepo.py
changeset 1462 12a8d772fa32
parent 1461 02099220ad49
child 1464 00117edce2dd
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: