Mercurial > public > mercurial-scm > hg
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) |