mercurial/manifest.py
changeset 40038 906c95073ff7
parent 39987 e22016e83c1e
child 40039 a0c18b271ea1
equal deleted inserted replaced
40037:fcad7fdc6474 40038:906c95073ff7
   722         loadlazy = self._loadlazy
   722         loadlazy = self._loadlazy
   723         for k in visit:
   723         for k in visit:
   724             loadlazy(k + '/')
   724             loadlazy(k + '/')
   725         return visit
   725         return visit
   726 
   726 
       
   727     def _loaddifflazy(self, t1, t2):
       
   728         """load items in t1 and t2 if they're needed for diffing.
       
   729 
       
   730         The criteria currently is:
       
   731         - if it's not present in _lazydirs in either t1 or t2, load it in the
       
   732           other (it may already be loaded or it may not exist, doesn't matter)
       
   733         - if it's present in _lazydirs in both, compare the nodeid; if it
       
   734           differs, load it in both
       
   735         """
       
   736         toloadlazy = []
       
   737         for d, v1 in t1._lazydirs.iteritems():
       
   738             v2 = t2._lazydirs.get(d)
       
   739             if not v2 or v2[1] != v1[1]:
       
   740                 toloadlazy.append(d)
       
   741         for d, v1 in t2._lazydirs.iteritems():
       
   742             if d not in t1._lazydirs:
       
   743                 toloadlazy.append(d)
       
   744 
       
   745         for d in toloadlazy:
       
   746             t1._loadlazy(d)
       
   747             t2._loadlazy(d)
       
   748 
   727     def __len__(self):
   749     def __len__(self):
   728         self._load()
   750         self._load()
   729         size = len(self._files)
   751         size = len(self._files)
   730         self._loadalllazy()
   752         self._loadalllazy()
   731         for m in self._dirs.values():
   753         for m in self._dirs.values():
   955         def _filesnotin(t1, t2):
   977         def _filesnotin(t1, t2):
   956             if t1._node == t2._node and not t1._dirty and not t2._dirty:
   978             if t1._node == t2._node and not t1._dirty and not t2._dirty:
   957                 return
   979                 return
   958             t1._load()
   980             t1._load()
   959             t2._load()
   981             t2._load()
   960             t1._loadalllazy()
   982             self._loaddifflazy(t1, t2)
   961             t2._loadalllazy()
       
   962             for d, m1 in t1._dirs.iteritems():
   983             for d, m1 in t1._dirs.iteritems():
   963                 if d in t2._dirs:
   984                 if d in t2._dirs:
   964                     m2 = t2._dirs[d]
   985                     m2 = t2._dirs[d]
   965                     _filesnotin(m1, m2)
   986                     _filesnotin(m1, m2)
   966                 else:
   987                 else:
  1111         def _diff(t1, t2):
  1132         def _diff(t1, t2):
  1112             if t1._node == t2._node and not t1._dirty and not t2._dirty:
  1133             if t1._node == t2._node and not t1._dirty and not t2._dirty:
  1113                 return
  1134                 return
  1114             t1._load()
  1135             t1._load()
  1115             t2._load()
  1136             t2._load()
  1116             toloadlazy = []
  1137             self._loaddifflazy(t1, t2)
  1117             for d, v1 in t1._lazydirs.iteritems():
       
  1118                 v2 = t2._lazydirs.get(d)
       
  1119                 if not v2 or v2[1] != v1[1]:
       
  1120                     toloadlazy.append(d)
       
  1121             for d, v1 in t2._lazydirs.iteritems():
       
  1122                 if d not in t1._lazydirs:
       
  1123                     toloadlazy.append(d)
       
  1124 
       
  1125             for d in toloadlazy:
       
  1126                 t1._loadlazy(d)
       
  1127                 t2._loadlazy(d)
       
  1128 
  1138 
  1129             for d, m1 in t1._dirs.iteritems():
  1139             for d, m1 in t1._dirs.iteritems():
  1130                 m2 = t2._dirs.get(d, emptytree)
  1140                 m2 = t2._dirs.get(d, emptytree)
  1131                 _diff(m1, m2)
  1141                 _diff(m1, m2)
  1132 
  1142