Show More
@@ -502,9 +502,6 b' class localrepository(object):' | |||
|
502 | 502 | # post-dirstate-status hooks |
|
503 | 503 | self._postdsstatus = [] |
|
504 | 504 | |
|
505 | # Cache of types representing filtered repos. | |
|
506 | self._filteredrepotypes = weakref.WeakKeyDictionary() | |
|
507 | ||
|
508 | 505 | # generic mapping between names and nodes |
|
509 | 506 | self.names = namespaces.namespaces() |
|
510 | 507 | |
@@ -680,20 +677,8 b' class localrepository(object):' | |||
|
680 | 677 | |
|
681 | 678 | def filtered(self, name): |
|
682 | 679 | """Return a filtered version of a repository""" |
|
683 | # Python <3.4 easily leaks types via __mro__. See | |
|
684 | # https://bugs.python.org/issue17950. We cache dynamically | |
|
685 | # created types so this method doesn't leak on every | |
|
686 | # invocation. | |
|
687 | ||
|
688 | key = self.unfiltered().__class__ | |
|
689 | if key not in self._filteredrepotypes: | |
|
690 | # Build a new type with the repoview mixin and the base | |
|
691 | # class of this repo. | |
|
692 | class filteredrepo(repoview.repoview, key): | |
|
693 | pass | |
|
694 | self._filteredrepotypes[key] = filteredrepo | |
|
695 | ||
|
696 | return self._filteredrepotypes[key](self, name) | |
|
680 | cls = repoview.newtype(self.unfiltered().__class__) | |
|
681 | return cls(self, name) | |
|
697 | 682 | |
|
698 | 683 | @repofilecache('bookmarks', 'bookmarks.current') |
|
699 | 684 | def _bookmarks(self): |
@@ -9,6 +9,7 b'' | |||
|
9 | 9 | from __future__ import absolute_import |
|
10 | 10 | |
|
11 | 11 | import copy |
|
12 | import weakref | |
|
12 | 13 | |
|
13 | 14 | from .node import nullrev |
|
14 | 15 | from . import ( |
@@ -240,3 +241,16 b' class repoview(object):' | |||
|
240 | 241 | |
|
241 | 242 | def __delattr__(self, attr): |
|
242 | 243 | return delattr(self._unfilteredrepo, attr) |
|
244 | ||
|
245 | # Python <3.4 easily leaks types via __mro__. See | |
|
246 | # https://bugs.python.org/issue17950. We cache dynamically created types | |
|
247 | # so they won't be leaked on every invocation of repo.filtered(). | |
|
248 | _filteredrepotypes = weakref.WeakKeyDictionary() | |
|
249 | ||
|
250 | def newtype(base): | |
|
251 | """Create a new type with the repoview mixin and the given base class""" | |
|
252 | if base not in _filteredrepotypes: | |
|
253 | class filteredrepo(repoview, base): | |
|
254 | pass | |
|
255 | _filteredrepotypes[base] = filteredrepo | |
|
256 | return _filteredrepotypes[base] |
@@ -166,8 +166,6 b' class statichttprepository(localrepo.loc' | |||
|
166 | 166 | self.encodepats = None |
|
167 | 167 | self.decodepats = None |
|
168 | 168 | self._transref = None |
|
169 | # Cache of types representing filtered repos. | |
|
170 | self._filteredrepotypes = {} | |
|
171 | 169 | |
|
172 | 170 | def _restrictcapabilities(self, caps): |
|
173 | 171 | caps = super(statichttprepository, self)._restrictcapabilities(caps) |
General Comments 0
You need to be logged in to leave comments.
Login now