Mercurial > hg-stable
view tests/test-bheads @ 11609:890ad9d6a169
log: slowpath: do not read the full changelog
When in the slowpath, we are examining _all_ changesets in revs.
We need to order reads so they happen increasingly for I/O performance.
Increasing windows were used to read changelog backwards in a windowed manner,
reading the changelog forward inside each window. But since no revision range
was specified, it was equivalent to reading the full changelog, even if a
single revision was passed to the commandline.
When --removed is used, we _need_ to scan all changesets, but if we're only
looking for file patterns, this is not necessary and we can stick to
the revspec that was given to us.
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Sun, 04 Jul 2010 18:07:30 +0900 |
parents | 0a2762d83c53 |
children |
line wrap: on
line source
#!/bin/sh heads() { hg heads --template '{rev}: {desc|firstline|strip} ({branches})\n' "$@" } hg init a cd a echo 'root' >root hg add root hg commit -m "Adding root node" heads echo '-------' heads . echo '=======' echo 'a' >a hg add a hg branch a hg commit -m "Adding a branch" heads echo '-------' heads . echo '=======' hg update -C 0 echo 'b' >b hg add b hg branch b hg commit -m "Adding b branch" heads echo '-------' heads . echo '=======' echo 'bh1' >bh1 hg add bh1 hg commit -m "Adding b branch head 1" heads echo '-------' heads . echo '=======' hg update -C 2 echo 'bh2' >bh2 hg add bh2 hg commit -m "Adding b branch head 2" heads echo '-------' heads . echo '=======' hg update -C 2 echo 'bh3' >bh3 hg add bh3 hg commit -m "Adding b branch head 3" heads echo '-------' heads . echo '=======' hg merge 4 hg commit -m "Merging b branch head 2 and b branch head 3" heads echo '-------' heads . echo '=======' echo 'c' >c hg add c hg branch c hg commit -m "Adding c branch" heads echo '-------' heads . echo '=======' heads -r 3 . echo $? echo '-------' heads -r 2 . echo $? echo '-------' hg update -C 4 echo $? echo '-------' heads -r 3 . echo $? echo '-------' heads -r 2 . echo $? echo '-------' heads -r 7 . echo $? echo '=======' for i in 0 1 2 3 4 5 6 7; do hg update -C "$i" heads echo '-------' heads . echo '-------' done echo '=======' for i in a b c z; do heads "$i" echo '-------' done echo '=======' heads 0 1 2 3 4 5 6 7 echo '% topological heads' heads -t echo '______________' cd .. hg init newheadmsg cd newheadmsg echo '% created new head message' echo '% init: no msg' echo 1 > a hg ci -Am "a0: Initial root" echo 2 >> a hg ci -m "a1 (HN)" hg branch b echo 1 > b hg ci -Am "b2: Initial root for branch b" echo 2 >> b hg ci -m "b3 (HN)" echo '% case NN: msg' hg up -q null hg branch -f b echo 1 > bb hg ci -Am "b4 (NN): new topo root for branch b" echo '% case HN: no msg' echo 2 >> bb hg ci -m "b5 (HN)" echo '% case BN: msg' hg branch -f default echo 1 > aa hg ci -Am "a6 (BN): new branch root" echo '% case CN: msg' hg up -q 4 echo 3 >> bbb hg ci -Am "b7 (CN): regular new head" echo '% case BB: msg' hg up -q 4 hg merge -q 3 hg branch -f default hg ci -m "a8 (BB): weird new branch root" echo '% case CB: msg' hg up -q 4 hg merge -q 1 hg ci -m "b9 (CB): new head from branch merge" echo '% case HB: no msg' hg up -q 7 hg merge -q 6 hg ci -m "b10 (HB): continuing head from branch merge" echo '% case CC: msg' hg up -q 4 hg merge -q 2 hg ci -m "b11 (CC): new head from merge" echo '% case CH: no msg' hg up -q 2 hg merge -q 10 hg ci -m "b12 (CH): continuing head from merge" echo '% case HH: no msg' hg merge -q 3 hg ci -m "b12 (HH): merging two heads"