comparison mercurial/manifest.py @ 24405:cbe9d50d9e65

treemanifest: make filesnotin() faster Same rationale as the previous change.
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 03 Mar 2015 13:50:06 -0800
parents 96cccf1e3257
children 1297480ed347
comparison
equal deleted inserted replaced
24404:96cccf1e3257 24405:cbe9d50d9e65
480 ret.setflag(fn, flags) 480 ret.setflag(fn, flags)
481 return ret 481 return ret
482 482
483 def filesnotin(self, m2): 483 def filesnotin(self, m2):
484 '''Set of files in this manifest that are not in the other''' 484 '''Set of files in this manifest that are not in the other'''
485 files = set(self.iterkeys()) 485 files = set()
486 files.difference_update(m2.iterkeys()) 486 def _filesnotin(t1, t2):
487 for d, m1 in t1._dirs.iteritems():
488 if d in t2._dirs:
489 m2 = t2._dirs[d]
490 _filesnotin(m1, m2)
491 else:
492 files.update(m1.iterkeys())
493
494 for fn in t1._files.iterkeys():
495 if fn not in t2._files:
496 files.add(t1._subpath(fn))
497
498 _filesnotin(self, m2)
487 return files 499 return files
488 500
489 @propertycache 501 @propertycache
490 def _alldirs(self): 502 def _alldirs(self):
491 return scmutil.dirs(self) 503 return scmutil.dirs(self)