comparison mercurial/context.py @ 24050:a9b61dbdb827

context: use unfiltered repo for '.' There is no reason to read obsolescence markers when doing a plain 'hg status' without --rev. Use the unfiltered repo when initializing context._rev to speed things up. This speeds up 'hg status' from 1.342s to 0.080s on my repo with ~110k markers.
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 20 Nov 2014 12:15:12 -0800
parents 2896f53509a7
children d8e0c591781c
comparison
equal deleted inserted replaced
24049:ba272156113f 24050:a9b61dbdb827
374 self._node = repo.changelog.node(changeid) 374 self._node = repo.changelog.node(changeid)
375 self._rev = changeid 375 self._rev = changeid
376 return 376 return
377 if isinstance(changeid, long): 377 if isinstance(changeid, long):
378 changeid = str(changeid) 378 changeid = str(changeid)
379 if changeid == '.':
380 self._node = repo.dirstate.p1()
381 self._rev = repo.changelog.rev(self._node)
382 return
383 if changeid == 'null': 379 if changeid == 'null':
384 self._node = nullid 380 self._node = nullid
385 self._rev = nullrev 381 self._rev = nullrev
386 return 382 return
387 if changeid == 'tip': 383 if changeid == 'tip':
388 self._node = repo.changelog.tip() 384 self._node = repo.changelog.tip()
389 self._rev = repo.changelog.rev(self._node) 385 self._rev = repo.changelog.rev(self._node)
386 return
387 if changeid == '.' or changeid == repo.dirstate.p1():
388 # this is a hack to delay/avoid loading obsmarkers
389 # when we know that '.' won't be hidden
390 self._node = repo.dirstate.p1()
391 self._rev = repo.unfiltered().changelog.rev(self._node)
390 return 392 return
391 if len(changeid) == 20: 393 if len(changeid) == 20:
392 try: 394 try:
393 self._node = changeid 395 self._node = changeid
394 self._rev = repo.changelog.rev(changeid) 396 self._rev = repo.changelog.rev(changeid)