##// END OF EJS Templates
localrepo: add sparse caches...
Gregory Szorc -
r33302:36a415b5 default
parent child Browse files
Show More
@@ -421,7 +421,7 b' def _wraprepo(ui, repo):'
421 """Returns the signature string representing the contents of the
421 """Returns the signature string representing the contents of the
422 current project sparse configuration. This can be used to cache the
422 current project sparse configuration. This can be used to cache the
423 sparse matcher for a given set of revs."""
423 sparse matcher for a given set of revs."""
424 signaturecache = self.signaturecache
424 signaturecache = self._sparsesignaturecache
425 signature = signaturecache.get('signature')
425 signature = signaturecache.get('signature')
426 if includetemp:
426 if includetemp:
427 tempsignature = signaturecache.get('tempsignature')
427 tempsignature = signaturecache.get('tempsignature')
@@ -445,13 +445,6 b' def _wraprepo(ui, repo):'
445 signaturecache['tempsignature'] = tempsignature
445 signaturecache['tempsignature'] = tempsignature
446 return '%s %s' % (str(signature), str(tempsignature))
446 return '%s %s' % (str(signature), str(tempsignature))
447
447
448 def invalidatecaches(self):
449 self.invalidatesignaturecache()
450 return super(SparseRepo, self).invalidatecaches()
451
452 def invalidatesignaturecache(self):
453 self.signaturecache.clear()
454
455 def sparsematch(self, *revs, **kwargs):
448 def sparsematch(self, *revs, **kwargs):
456 """Returns the sparse match function for the given revs.
449 """Returns the sparse match function for the given revs.
457
450
@@ -470,7 +463,7 b' def _wraprepo(ui, repo):'
470
463
471 key = '%s %s' % (str(signature), ' '.join([str(r) for r in revs]))
464 key = '%s %s' % (str(signature), ' '.join([str(r) for r in revs]))
472
465
473 result = self.sparsecache.get(key, None)
466 result = self._sparsematchercache.get(key, None)
474 if result:
467 if result:
475 return result
468 return result
476
469
@@ -513,7 +506,7 b' def _wraprepo(ui, repo):'
513 tempincludes = self.gettemporaryincludes()
506 tempincludes = self.gettemporaryincludes()
514 result = forceincludematcher(result, tempincludes)
507 result = forceincludematcher(result, tempincludes)
515
508
516 self.sparsecache[key] = result
509 self._sparsematchercache[key] = result
517
510
518 return result
511 return result
519
512
@@ -523,7 +516,7 b' def _wraprepo(ui, repo):'
523 '\n'.join(sorted(include)),
516 '\n'.join(sorted(include)),
524 '\n'.join(sorted(exclude)))
517 '\n'.join(sorted(exclude)))
525 self.vfs.write("sparse", raw)
518 self.vfs.write("sparse", raw)
526 self.invalidatesignaturecache()
519 sparse.invalidatesignaturecache(self)
527
520
528 def addtemporaryincludes(self, files):
521 def addtemporaryincludes(self, files):
529 includes = self.gettemporaryincludes()
522 includes = self.gettemporaryincludes()
@@ -541,7 +534,7 b' def _wraprepo(ui, repo):'
541 def _writetemporaryincludes(self, includes):
534 def _writetemporaryincludes(self, includes):
542 raw = '\n'.join(sorted(includes))
535 raw = '\n'.join(sorted(includes))
543 self.vfs.write('tempsparse', raw)
536 self.vfs.write('tempsparse', raw)
544 self.invalidatesignaturecache()
537 sparse.invalidatesignaturecache(self)
545
538
546 def prunetemporaryincludes(self):
539 def prunetemporaryincludes(self):
547 if repo.vfs.exists('tempsparse'):
540 if repo.vfs.exists('tempsparse'):
@@ -572,15 +565,14 b' def _wraprepo(ui, repo):'
572 dirstate.drop(file)
565 dirstate.drop(file)
573
566
574 self.vfs.unlink('tempsparse')
567 self.vfs.unlink('tempsparse')
575 self.invalidatesignaturecache()
568 sparse.invalidatesignaturecache(self)
576 msg = _("cleaned up %d temporarily added file(s) from the "
569 msg = _("cleaned up %d temporarily added file(s) from the "
577 "sparse checkout\n")
570 "sparse checkout\n")
578 ui.status(msg % len(tempincludes))
571 ui.status(msg % len(tempincludes))
579
572
580 if 'dirstate' in repo._filecache:
573 if 'dirstate' in repo._filecache:
581 repo.dirstate.repo = repo
574 repo.dirstate.repo = repo
582 repo.sparsecache = {}
575
583 repo.signaturecache = {}
584 repo.__class__ = SparseRepo
576 repo.__class__ = SparseRepo
585
577
586 @command('^debugsparse', [
578 @command('^debugsparse', [
@@ -422,6 +422,11 b' class localrepository(object):'
422 # generic mapping between names and nodes
422 # generic mapping between names and nodes
423 self.names = namespaces.namespaces()
423 self.names = namespaces.namespaces()
424
424
425 # Key to signature value.
426 self._sparsesignaturecache = {}
427 # Signature to cached matcher instance.
428 self._sparsematchercache = {}
429
425 def close(self):
430 def close(self):
426 self._writecaches()
431 self._writecaches()
427
432
@@ -1300,6 +1305,7 b' class localrepository(object):'
1300
1305
1301 self.unfiltered()._branchcaches.clear()
1306 self.unfiltered()._branchcaches.clear()
1302 self.invalidatevolatilesets()
1307 self.invalidatevolatilesets()
1308 self._sparsesignaturecache.clear()
1303
1309
1304 def invalidatevolatilesets(self):
1310 def invalidatevolatilesets(self):
1305 self.filteredrevcache.clear()
1311 self.filteredrevcache.clear()
@@ -126,3 +126,6 b' def activeprofiles(repo):'
126 profiles.update(patternsforrev(repo, rev)[2])
126 profiles.update(patternsforrev(repo, rev)[2])
127
127
128 return profiles
128 return profiles
129
130 def invalidatesignaturecache(repo):
131 repo._sparsesignaturecache.clear()
General Comments 0
You need to be logged in to leave comments. Login now