mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
5a61921433
Summary: fastannotate has a fastpath, when the node (commit hash) exists in revmap, it would generate the output instantly from the linelog without going through the history. In the "fctx" mode, the vanilla annotate command would pass the revision number instead of changeset node to fastannotate, which prevents fastannotate from using the fast path. This diff converts the revision number to node before testing the fast path to solve the problem. Test Plan: Modified existing tests. Reviewers: #sourcecontrol, durham Reviewed By: durham Subscribers: durham, mjpieters Differential Revision: https://phabricator.intern.facebook.com/D4288927 Signature: t1:4288927:1481073363:3330d60878161139ee195bc968c161d6c0d95ace
267 lines
5.0 KiB
Perl
267 lines
5.0 KiB
Perl
$ PYTHONPATH=$TESTDIR/..:$PYTHONPATH
|
|
$ export PYTHONPATH
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> fastannotate=
|
|
> EOF
|
|
|
|
$ HGMERGE=true; export HGMERGE
|
|
|
|
$ hg init repo
|
|
$ cd repo
|
|
|
|
a simple merge case
|
|
|
|
$ echo 1 > a
|
|
$ hg commit -qAm 'append 1'
|
|
$ echo 2 >> a
|
|
$ hg commit -m 'append 2'
|
|
$ echo 3 >> a
|
|
$ hg commit -m 'append 3'
|
|
$ hg up 1 -q
|
|
$ cat > a << EOF
|
|
> 0
|
|
> 1
|
|
> 2
|
|
> EOF
|
|
$ hg commit -qm 'insert 0'
|
|
$ hg merge 2 -q
|
|
$ echo 4 >> a
|
|
$ hg commit -m merge
|
|
$ hg log -G -T '{rev}: {desc}'
|
|
@ 4: merge
|
|
|\
|
|
| o 3: insert 0
|
|
| |
|
|
o | 2: append 3
|
|
|/
|
|
o 1: append 2
|
|
|
|
|
o 0: append 1
|
|
|
|
$ hg fastannotate a
|
|
3: 0
|
|
0: 1
|
|
1: 2
|
|
2: 3
|
|
4: 4
|
|
$ hg fastannotate -r 0 a
|
|
0: 1
|
|
$ hg fastannotate -r 1 a
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate -udnclf a
|
|
test 3 d641cb51f61e Thu Jan 01 00:00:00 1970 +0000 a:1: 0
|
|
test 0 4994017376d3 Thu Jan 01 00:00:00 1970 +0000 a:1: 1
|
|
test 1 e940cb6d9a06 Thu Jan 01 00:00:00 1970 +0000 a:2: 2
|
|
test 2 26162a884ba6 Thu Jan 01 00:00:00 1970 +0000 a:3: 3
|
|
test 4 3ad7bcd2815f Thu Jan 01 00:00:00 1970 +0000 a:5: 4
|
|
$ hg fastannotate --linear a
|
|
3: 0
|
|
0: 1
|
|
1: 2
|
|
4: 3
|
|
4: 4
|
|
|
|
incrementally updating
|
|
|
|
$ hg fastannotate -r 0 a --debug
|
|
fastannotate: a: using fast path (resolved fctx: True)
|
|
0: 1
|
|
$ hg fastannotate -r 0 a --debug --rebuild
|
|
fastannotate: a: 1 new changesets in the main branch
|
|
0: 1
|
|
$ hg fastannotate -r 1 a --debug
|
|
fastannotate: a: 1 new changesets in the main branch
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate -r 3 a --debug
|
|
fastannotate: a: 1 new changesets in the main branch
|
|
3: 0
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate -r 4 a --debug
|
|
fastannotate: a: 1 new changesets in the main branch
|
|
3: 0
|
|
0: 1
|
|
1: 2
|
|
2: 3
|
|
4: 4
|
|
$ hg fastannotate -r 1 a --debug
|
|
fastannotate: a: using fast path (resolved fctx: True)
|
|
0: 1
|
|
1: 2
|
|
|
|
rebuild happens automatically if unable to update
|
|
|
|
$ hg fastannotate -r 2 a --debug
|
|
fastannotate: a: cache broken and deleted
|
|
fastannotate: a: 3 new changesets in the main branch
|
|
0: 1
|
|
1: 2
|
|
2: 3
|
|
|
|
config option "fastannotate.mainbranch"
|
|
|
|
$ hg fastannotate -r 1 --rebuild --config fastannotate.mainbranch=tip a --debug
|
|
fastannotate: a: 4 new changesets in the main branch
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate -r 4 a --debug
|
|
fastannotate: a: using fast path (resolved fctx: True)
|
|
3: 0
|
|
0: 1
|
|
1: 2
|
|
2: 3
|
|
4: 4
|
|
|
|
config option "fastannotate.modes"
|
|
|
|
$ hg annotate -r 1 --debug a
|
|
0: 1
|
|
1: 2
|
|
$ hg annotate --config fastannotate.modes=fctx -r 1 --debug a
|
|
fastannotate: a: using fast path (resolved fctx: False)
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate --config fastannotate.modes=fctx -h -q
|
|
hg: unknown command 'fastannotate'
|
|
(did you mean *) (glob)
|
|
[255]
|
|
|
|
rename
|
|
|
|
$ hg mv a b
|
|
$ cat > b << EOF
|
|
> 0
|
|
> 11
|
|
> 3
|
|
> 44
|
|
> EOF
|
|
$ hg commit -m b -q
|
|
$ hg fastannotate -ncf --long-hash b
|
|
3 d641cb51f61e331c44654104301f8154d7865c89 a: 0
|
|
5 d44dade239915bc82b91e4556b1257323f8e5824 b: 11
|
|
2 26162a884ba60e8c87bf4e0d6bb8efcc6f711a4e a: 3
|
|
5 d44dade239915bc82b91e4556b1257323f8e5824 b: 44
|
|
$ hg fastannotate -r 26162a884ba60e8c87bf4e0d6bb8efcc6f711a4e a
|
|
0: 1
|
|
1: 2
|
|
2: 3
|
|
|
|
fastannotate --deleted
|
|
|
|
$ hg fastannotate --deleted -nf b
|
|
3 a: 0
|
|
5 b: 11
|
|
0 a: -1
|
|
1 a: -2
|
|
2 a: 3
|
|
5 b: 44
|
|
4 a: -4
|
|
$ hg fastannotate --deleted -r 3 -nf a
|
|
3 a: 0
|
|
0 a: 1
|
|
1 a: 2
|
|
|
|
file and directories with ".l", ".m" suffixes
|
|
|
|
$ cd ..
|
|
$ hg init repo2
|
|
$ cd repo2
|
|
|
|
$ mkdir a.l b.m c.lock a.l.hg b.hg
|
|
$ for i in a b c d d.l d.m a.l/a b.m/a c.lock/a a.l.hg/a b.hg/a; do
|
|
> echo $i > $i
|
|
> done
|
|
$ hg add . -q
|
|
$ hg commit -m init
|
|
$ hg fastannotate a.l/a b.m/a c.lock/a a.l.hg/a b.hg/a d.l d.m a b c d
|
|
0: a
|
|
0: a.l.hg/a
|
|
0: a.l/a
|
|
0: b
|
|
0: b.hg/a
|
|
0: b.m/a
|
|
0: c
|
|
0: c.lock/a
|
|
0: d
|
|
0: d.l
|
|
0: d.m
|
|
|
|
empty file
|
|
|
|
$ touch empty
|
|
$ hg commit -A empty -m empty
|
|
$ hg fastannotate empty
|
|
|
|
json format
|
|
|
|
$ hg fastannotate -Tjson -cludn b a empty
|
|
[
|
|
{
|
|
"date": [0.0, 0],
|
|
"line": "a\n",
|
|
"line_number": 1,
|
|
"node": "1fd620b16252aecb54c6aa530dff5ed6e6ec3d21",
|
|
"rev": 0,
|
|
"user": "test"
|
|
},
|
|
{
|
|
"date": [0.0, 0],
|
|
"line": "b\n",
|
|
"line_number": 1,
|
|
"node": "1fd620b16252aecb54c6aa530dff5ed6e6ec3d21",
|
|
"rev": 0,
|
|
"user": "test"
|
|
}
|
|
]
|
|
|
|
$ hg fastannotate -Tjson -cludn empty
|
|
[
|
|
]
|
|
$ hg fastannotate -Tjson --no-content -n a
|
|
[
|
|
{
|
|
"rev": 0
|
|
}
|
|
]
|
|
|
|
working copy
|
|
|
|
$ echo a >> a
|
|
$ hg fastannotate -r 'wdir()' a
|
|
abort: cannot update linelog to wdir()
|
|
(set fastannotate.mainbranch)
|
|
[255]
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [fastannotate]
|
|
> mainbranch = .
|
|
> EOF
|
|
$ hg fastannotate -r 'wdir()' a
|
|
0 : a
|
|
1+: a
|
|
$ hg fastannotate -cludn -r 'wdir()' a
|
|
test 0 1fd620b16252 Thu Jan 01 00:00:00 1970 +0000:1: a
|
|
test 1 720582f5bdb6+ *:2: a (glob)
|
|
$ hg fastannotate -cludn -r 'wdir()' -Tjson a
|
|
[
|
|
{
|
|
"date": [0.0, 0],
|
|
"line": "a\n",
|
|
"line_number": 1,
|
|
"node": "1fd620b16252aecb54c6aa530dff5ed6e6ec3d21",
|
|
"rev": 0,
|
|
"user": "test"
|
|
},
|
|
{
|
|
"date": [*, 0], (glob)
|
|
"line": "a\n",
|
|
"line_number": 2,
|
|
"node": null,
|
|
"rev": null,
|
|
"user": "test"
|
|
}
|
|
]
|