##// END OF EJS Templates
discovery: cache the children mapping used during each discovery...
marmoute -
r42051:5baf06d2 default
parent child Browse files
Show More
@@ -116,6 +116,7 b' class partialdiscovery(object):'
116 self._common = repo.changelog.incrementalmissingrevs()
116 self._common = repo.changelog.incrementalmissingrevs()
117 self._undecided = None
117 self._undecided = None
118 self.missing = set()
118 self.missing = set()
119 self._childrenmap = None
119
120
120 def addcommons(self, commons):
121 def addcommons(self, commons):
121 """registrer nodes known as common"""
122 """registrer nodes known as common"""
@@ -173,15 +174,14 b' class partialdiscovery(object):'
173
174
174 def _childrengetter(self, revs):
175 def _childrengetter(self, revs):
175
176
177 if self._childrenmap is not None:
178 return self._childrenmap.__getitem__
179
176 # _updatesample() essentially does interaction over revisions to look
180 # _updatesample() essentially does interaction over revisions to look
177 # up their children. This lookup is expensive and doing it in a loop is
181 # up their children. This lookup is expensive and doing it in a loop is
178 # quadratic. We precompute the children for all relevant revisions and
182 # quadratic. We precompute the children for all relevant revisions and
179 # make the lookup in _updatesample() a simple dict lookup.
183 # make the lookup in _updatesample() a simple dict lookup.
180 #
184 self._childrenmap = children = {}
181 # Because this function can be called multiple times during discovery,
182 # we may still perform redundant work and there is room to optimize
183 # this by keeping a persistent cache of children across invocations.
184 children = {}
185
185
186 parentrevs = self._parentsgetter()
186 parentrevs = self._parentsgetter()
187
187
General Comments 0
You need to be logged in to leave comments. Login now