mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
dc07b62633
Summary: Previously we can only answer the "path" information when the revision is in the linelog revmap, and the code would crash if a revision is in a side branch, and the user requests path information. This diff fixes it. Besides, this diff improves rename handling. For example, given the following chart: ``` o---o -o file name: a / o---o- file name: b ^ ^ ^ 1 2 3 revisions ``` Depending on the position of the `main branch` reference, fastannotate may or may not use linelog: - main branch is at rev 2, annotate a -r 3 will not take advantage of linelog (fallback to slow annotate) - main branch is at rev 3, annotate a -r 2 will not take advantage of linelog This is not ideal, but seems to be the best we can do for now. Test Plan: Added a new test, updated existing relevant tests. Some debug messages are changed to reflect internals more precisely. Reviewers: #sourcecontrol, stash Reviewed By: stash Subscribers: stash, mjpieters Differential Revision: https://phabricator.intern.facebook.com/D4010964 Signature: t1:4010964:1476458201:79875d96399d023d0000d0c4bb8b8d40ea43eef0
199 lines
3.8 KiB
Perl
199 lines
3.8 KiB
Perl
$ extpath=`dirname $TESTDIR`
|
|
$ PYTHONPATH=$extpath:$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.commands"
|
|
|
|
$ hg annotate -r 1 --debug a
|
|
0: 1
|
|
1: 2
|
|
$ hg annotate --config fastannotate.commands=annotate -r 1 --debug a
|
|
fastannotate: a: using fast path (resolved fctx: True)
|
|
0: 1
|
|
1: 2
|
|
$ hg fastannotate --config fastannotate.commands=annotate -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
|