comparison mercurial/dirstate.py @ 34675:c6ef9a2498a5

dirstate: move identity to dirstatemap Moving the identity function to the dirstatemap class will allow alternative dirstate implementations to replace the implementation. Differential Revision: https://phab.mercurial-scm.org/D980
author Durham Goode <durham@fb.com>
date Thu, 05 Oct 2017 11:34:41 -0700
parents 60927b19ed65
children bfddc3d678ae
comparison
equal deleted inserted replaced
34674:60927b19ed65 34675:c6ef9a2498a5
131 (state, mode, size, time).''' 131 (state, mode, size, time).'''
132 self._read() 132 self._read()
133 return self._map 133 return self._map
134 134
135 @propertycache 135 @propertycache
136 def _identity(self):
137 self._read()
138 return self._identity
139
140 @propertycache
141 def _filefoldmap(self): 136 def _filefoldmap(self):
142 return self._map.filefoldmap() 137 return self._map.filefoldmap()
143 138
144 @propertycache 139 @propertycache
145 def _dirfoldmap(self): 140 def _dirfoldmap(self):
373 except: # re-raises 368 except: # re-raises
374 f.discard() 369 f.discard()
375 raise 370 raise
376 371
377 def _read(self): 372 def _read(self):
378 # ignore HG_PENDING because identity is used only for writing
379 self._identity = util.filestat.frompath(
380 self._opener.join(self._filename))
381 self._map = dirstatemap(self._ui, self._opener, self._root) 373 self._map = dirstatemap(self._ui, self._opener, self._root)
382 self._map.read() 374 self._map.read()
383 375
384 def invalidate(self): 376 def invalidate(self):
385 '''Causes the next access to reread the dirstate. 377 '''Causes the next access to reread the dirstate.
386 378
387 This is different from localrepo.invalidatedirstate() because it always 379 This is different from localrepo.invalidatedirstate() because it always
388 rereads the dirstate. Use localrepo.invalidatedirstate() if you want to 380 rereads the dirstate. Use localrepo.invalidatedirstate() if you want to
389 check whether the dirstate has changed before rereading it.''' 381 check whether the dirstate has changed before rereading it.'''
390 382
391 for a in ("_map", "_identity", 383 for a in ("_map", "_filefoldmap", "_dirfoldmap", "_branch",
392 "_filefoldmap", "_dirfoldmap", "_branch",
393 "_dirs", "_ignore"): 384 "_dirs", "_ignore"):
394 if a in self.__dict__: 385 if a in self.__dict__:
395 delattr(self, a) 386 delattr(self, a)
396 self._lastnormaltime = 0 387 self._lastnormaltime = 0
397 self._dirty = False 388 self._dirty = False
650 '''Return identity of dirstate itself to detect changing in storage 641 '''Return identity of dirstate itself to detect changing in storage
651 642
652 If identity of previous dirstate is equal to this, writing 643 If identity of previous dirstate is equal to this, writing
653 changes based on the former dirstate out can keep consistency. 644 changes based on the former dirstate out can keep consistency.
654 ''' 645 '''
655 return self._identity 646 return self._map.identity
656 647
657 def write(self, tr): 648 def write(self, tr):
658 if not self._dirty: 649 if not self._dirty:
659 return 650 return
660 651
1340 def setparents(self, p1, p2): 1331 def setparents(self, p1, p2):
1341 self._parents = (p1, p2) 1332 self._parents = (p1, p2)
1342 self._dirtyparents = True 1333 self._dirtyparents = True
1343 1334
1344 def read(self): 1335 def read(self):
1336 # ignore HG_PENDING because identity is used only for writing
1337 self.identity = util.filestat.frompath(
1338 self._opener.join(self._filename))
1339
1345 try: 1340 try:
1346 fp = self._opendirstatefile() 1341 fp = self._opendirstatefile()
1347 try: 1342 try:
1348 st = fp.read() 1343 st = fp.read()
1349 finally: 1344 finally:
1402 def otherparentset(self): 1397 def otherparentset(self):
1403 nonnorm, otherparents = self.nonnormalentries() 1398 nonnorm, otherparents = self.nonnormalentries()
1404 self.nonnormalset = nonnorm 1399 self.nonnormalset = nonnorm
1405 return otherparents 1400 return otherparents
1406 1401
1402 @propertycache
1403 def identity(self):
1404 self.read()
1405 return self.identity
1406