mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
dirstate: eliminate reference cycle from normalize
Bound methods hold a reference to self, so assigning a bound method to an instance unavoidably creates a cycle. Work around this by choosing a normalize method at walk time instead. Eliminate default arg while we're at it.
This commit is contained in:
parent
4269cb82b8
commit
edecde7d3c
@ -114,12 +114,6 @@ class dirstate(object):
|
||||
def _checkcase(self):
|
||||
return not util.checkcase(self._join('.hg'))
|
||||
|
||||
@propertycache
|
||||
def normalize(self):
|
||||
if self._checkcase:
|
||||
return self._normalize
|
||||
return lambda x, y=False: x
|
||||
|
||||
def _join(self, f):
|
||||
# much faster than os.path.join()
|
||||
# it's safe because f is always a relative path
|
||||
@ -345,7 +339,7 @@ class dirstate(object):
|
||||
except KeyError:
|
||||
self._ui.warn(_("not in dirstate: %s\n") % f)
|
||||
|
||||
def _normalize(self, path, knownpath=False):
|
||||
def _normalize(self, path, knownpath):
|
||||
norm_path = os.path.normcase(path)
|
||||
fold_path = self._foldmap.get(norm_path, None)
|
||||
if fold_path is None:
|
||||
@ -450,7 +444,6 @@ class dirstate(object):
|
||||
badfn = match.bad
|
||||
dmap = self._map
|
||||
normpath = util.normpath
|
||||
normalize = self.normalize
|
||||
listdir = osutil.listdir
|
||||
lstat = os.lstat
|
||||
getkind = stat.S_IFMT
|
||||
@ -461,6 +454,11 @@ class dirstate(object):
|
||||
work = []
|
||||
wadd = work.append
|
||||
|
||||
if self._checkcase:
|
||||
normalize = self._normalize
|
||||
else:
|
||||
normalize = lambda x, y: x
|
||||
|
||||
exact = skipstep3 = False
|
||||
if matchfn == match.exact: # match.exact
|
||||
exact = True
|
||||
@ -475,7 +473,7 @@ class dirstate(object):
|
||||
|
||||
# step 1: find all explicit files
|
||||
for ff in sorted(files):
|
||||
nf = normalize(normpath(ff))
|
||||
nf = normalize(normpath(ff), True)
|
||||
if nf in results:
|
||||
continue
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user