Mercurial > hg
view tests/test-locate.t @ 46095:93e09d370003
treemanifest: stop storing full path for each item in manifest._lazydirs
This information is obtainable, if needed, based on the lazydirs key (which is
the entry name) and the manifest's `dir()` method.
### Performance
This is actually both a memory and a performance improvement, but it's likely to
be a very small one in most situations. In the pathological repo I've been using
for testing other performance work I've done recently, this reduced the time for
a rebase operation (rebasing two commits across a public-phase change that
touches a sibling of one of my tracked directories where the common parent is
massive (>>10k entries)):
#### Before
```
Time (mean ± σ): 4.059 s ± 0.121 s [User: 0.9 ms, System: 0.6 ms]
Range (min … max): 3.941 s … 4.352 s 10 runs
```
#### After
```
Time (mean ± σ): 3.707 s ± 0.060 s [User: 0.8 ms, System: 0.8 ms]
Range (min … max): 3.648 s … 3.818 s 10 runs
```
Differential Revision: https://phab.mercurial-scm.org/D9553
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Thu, 03 Dec 2020 14:39:39 -0800 |
parents | 15f63ac122ea |
children |
line wrap: on
line source
$ hg init repo $ cd repo $ echo 0 > a $ echo 0 > b $ echo 0 > t.h $ mkdir t $ echo 0 > t/x $ echo 0 > t/b $ echo 0 > t/e.h $ mkdir dir.h $ echo 0 > dir.h/foo $ hg ci -A -m m adding a adding b adding dir.h/foo adding t.h adding t/b adding t/e.h adding t/x $ touch nottracked $ hg locate a a $ hg locate NONEXISTENT [1] $ hg locate a b dir.h/foo t.h t/b t/e.h t/x $ hg rm a $ hg ci -m m $ hg locate a [1] $ hg locate NONEXISTENT [1] $ hg locate relpath:NONEXISTENT [1] $ hg locate b dir.h/foo t.h t/b t/e.h t/x $ hg locate -r 0 a a $ hg locate -r 0 NONEXISTENT [1] $ hg locate -r 0 relpath:NONEXISTENT [1] $ hg locate -r 0 a b dir.h/foo t.h t/b t/e.h t/x -I/-X with relative path should work: $ cd t $ hg locate b dir.h/foo t.h t/b t/e.h t/x $ hg locate -I ../t t/b t/e.h t/x Issue294: hg remove --after dir fails when dir.* also exists $ cd .. $ rm -r t $ hg rm t/b $ hg locate 't/**' t/b t/e.h t/x $ hg files b dir.h/foo t.h t/e.h t/x $ hg files b b -X with explicit path: $ hg files b -X b [1] $ mkdir otherdir $ cd otherdir $ hg files path: ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ hg files path:. ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ hg files --config ui.relative-paths=yes ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ hg files --config ui.relative-paths=no b dir.h/foo t.h t/e.h t/x $ hg files --config ui.relative-paths=legacy ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ hg locate b ../b ../t/b $ hg locate '*.h' ../t.h ../t/e.h $ hg locate path:t/x ../t/x $ hg locate 're:.*\.h$' ../t.h ../t/e.h $ hg locate -r 0 b ../b ../t/b $ hg locate -r 0 '*.h' ../t.h ../t/e.h $ hg locate -r 0 path:t/x ../t/x $ hg locate -r 0 're:.*\.h$' ../t.h ../t/e.h $ hg files ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ hg files . [1] Fileset at null (i.e. a falsy context) shouldn't crash (issue6046) $ hg files -r null 'set:tracked()' [1] Convert native path separator to slash (issue5572) $ hg files -T '{path|relpath|slashpath}\n' ../b ../dir.h/foo ../t.h ../t/e.h ../t/x $ cd ../..