sapling/eden/scm/tests/test-fb-hgext-smartlog.t
Jun Wu 33b28a117e smartlog: limit commits to show
Summary:
There are a report of slow smartlog that tries to show 8M nodes in `draft()`.
That is an issue after the automatic bookmark clean up, and the visible heads
incorrectly make large amount of commits draft.

Reviewed By: kulshrax

Differential Revision: D26934644

fbshipit-source-id: 0c0890f8eaf1422dab9c03159a419800ae7247ca
2021-03-10 15:24:39 -08:00

394 lines
8.3 KiB
Perl

#chg-compatible
$ disable treemanifest
$ enable smartlog
$ readconfig <<EOF
> [format]
> use-segmented-changelog=1
> [experimental]
> graphstyle.grandparent=|
> graphstyle.missing=|
> EOF
Build up a repo
$ hg init repo
$ cd repo
Confirm smartlog doesn't error on an empty repo
$ hg smartlog
Continue repo setup
$ hg book master
$ hg sl -r 'smartlog() + master'
$ touch a1 && hg add a1 && hg ci -ma1
$ touch a2 && hg add a2 && hg ci -ma2
$ hg book feature1
$ touch b && hg add b && hg ci -mb
$ hg up -q master
$ touch c1 && hg add c1 && hg ci -mc1
$ touch c2 && hg add c2 && hg ci -mc2
$ hg book feature2
$ touch d && hg add d && hg ci -md
$ hg debugmakepublic master
$ hg log -G -T "{node|short} {bookmarks} {desc}" -r 'sort(:, topo)'
@ db92053d5c83 feature2 d
│ o 49cdb4091aca feature1 b
│ │
o │ 38d85b506754 master c2
│ │
o │ ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
o df4fd610a3d6 a1
Basic test
$ hg smartlog -T '{node|short} {bookmarks} {desc}'
@ db92053d5c83 feature2 d
o 38d85b506754 master c2
╷ o 49cdb4091aca feature1 b
╭─╯
o b68836a6e2ca a2
~
With commit info
$ echo "hello" >c2 && hg ci --amend
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --commit-info
@ 05d10250273e feature2 d M c2
│ A d
o 38d85b506754 master c2
╷ o 49cdb4091aca feature1 b
╭─╯
o b68836a6e2ca a2
~
As a revset
$ hg log -G -T '{node|short} {bookmarks} {desc}' -r 'smartlog()'
@ 05d10250273e feature2 d
│ o 49cdb4091aca feature1 b
│ │
o │ 38d85b506754 master c2
├─╯
o b68836a6e2ca a2
~
With --master
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --master 'desc(a2)'
o 49cdb4091aca feature1 b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 master c2
├─╯
o b68836a6e2ca a2
~
Specific revs
$ hg smartlog -T '{node|short} {bookmarks} {desc}' -r 'desc(b)' -r 'desc(c2)' --master null
o 49cdb4091aca feature1 b
│ o 38d85b506754 master c2
├─╯
o b68836a6e2ca a2
~
$ hg smartlog -T '{node|short} {bookmarks} {desc}' -r 'smartlog()' -r 'desc(a1)'
@ 05d10250273e feature2 d
o 38d85b506754 master c2
╷ o 49cdb4091aca feature1 b
╭─╯
o b68836a6e2ca a2
o df4fd610a3d6 a1
Test master ordering
$ hg debugmakepublic 49cdb4091aca
$ hg boo -f master -r 49cdb4091aca
$ hg smartlog -T '{node|short} {bookmarks} {desc}'
o 49cdb4091aca feature1 master b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 c2
│ │
│ o ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
~
Test overriding master
$ hg debugmakepublic 38d85b506754
$ hg boo -f master -r 38d85b506754
$ hg smartlog -T '{node|short} {bookmarks} {desc}'
@ 05d10250273e feature2 d
o 38d85b506754 master c2
╷ o 49cdb4091aca feature1 b
╭─╯
o b68836a6e2ca a2
~
$ hg debugmakepublic feature1
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --master feature1
o 49cdb4091aca feature1 b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 master c2
│ │
│ o ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
~
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --config smartlog.master=feature1
o 49cdb4091aca feature1 b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 master c2
│ │
│ o ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
~
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --config smartlog.master=feature2 --master feature1
o 49cdb4091aca feature1 b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 master c2
│ │
│ o ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
~
$ hg debugmakepublic .
Test with weird bookmark names
$ hg book -r 'desc(b)' foo-bar
$ hg smartlog -r 'foo-bar + .' -T '{node|short} {bookmarks} {desc}'
@ 05d10250273e feature2 d
o 38d85b506754 master c2
╷ o 49cdb4091aca feature1 foo-bar b
╭─╯
o b68836a6e2ca a2
~
$ hg debugmakepublic foo-bar
$ hg smartlog --config smartlog.master=foo-bar -T '{node|short} {bookmarks} {desc}'
o 49cdb4091aca feature1 foo-bar b
│ @ 05d10250273e feature2 d
│ │
│ o 38d85b506754 master c2
│ │
│ o ec7553f7b382 c1
├─╯
o b68836a6e2ca a2
~
$ hg smartlog --config smartlog.master=xxxx -T '{node|short} {bookmarks} {desc}'
abort: unknown revision 'xxxx'!
[255]
Test with two unrelated histories
$ hg update null
0 files updated, 0 files merged, 5 files removed, 0 files unresolved
(leaving bookmark feature2)
$ touch u1 && hg add u1 && hg ci -mu1
$ touch u2 && hg add u2 && hg ci -mu2
$ hg smartlog -T '{node|short} {bookmarks} {desc}'
@ 806aaef35296 u2
o 8749dc393678 u1
o 05d10250273e feature2 d
o 38d85b506754 master c2
o ec7553f7b382 c1
│ o 49cdb4091aca feature1 foo-bar b
├─╯
o b68836a6e2ca a2
~
A draft stack at the top
$ cd ..
$ hg init repo2
$ cd repo2
$ hg debugbuilddag '+4'
$ hg bookmark curr
$ hg bookmark master -r 'desc(r1)'
$ hg debugmakepublic -r 'desc(r1)'
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all
o 2dc09a01254d r3
o 01241442b3c2 r2
o 66f7d451a68b master r1
~
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.indentnonpublic=1
o 2dc09a01254d r3
o 01241442b3c2 r2
╭─╯
o 66f7d451a68b master r1
~
Different number of lines per node
$ hg smartlog -T '{node|short}\n{bookmarks}\n{desc}\n{author}\n{date|isodate}\n' --all --config smartlog.indentnonpublic=1
o 2dc09a01254d
│ r3
│ debugbuilddag
│ 1970-01-01 00:00 +0000
o 01241442b3c2
╭─╯
│ r2
│ debugbuilddag
│ 1970-01-01 00:00 +0000
o 66f7d451a68b
│ master
~ r1
debugbuilddag
1970-01-01 00:00 +0000
Add other draft stacks
$ hg up 'desc(r1)' -q
$ echo 1 > a
$ hg ci -A a -m a -q
$ echo 2 >> a
$ hg ci -A a -m a -q
$ hg up 'desc(r2)' -q
$ echo 2 > b
$ hg ci -A b -m b -q
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.indentnonpublic=1
o a60fccdcd9e9 a
o 8d92afe5abfd a
╭─╯
│ @ 401cd6213b51 b
│ │
│ │ o 2dc09a01254d r3
│ ├─╯
│ o 01241442b3c2 r2
├─╯
o 66f7d451a68b master r1
~
Limit by threshold
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.max-commit-threshold=2
smartlog: too many (6) commits, not rendering all of them
(consider running 'hg doctor' to hide unrelated commits)
@ 401cd6213b51 b
╷ o a60fccdcd9e9 a
╭─╯
╷ o 2dc09a01254d r3
╭─╯
o 66f7d451a68b master r1
~
Recent arg select days correctly
$ echo 1 >> b
$ myday=`hg debugsh -c 'import time; ui.write(str(int(time.time()) - 24 * 3600 * 20))'`
$ hg commit --date "$myday 0" -m test2
$ hg update 'desc(r0)' -q
$ hg log -Gr 'smartlog(master="master", heads=((date(-15) & draft()) + .))' -T '{node|short} {bookmarks} {desc}'
o 66f7d451a68b master r1
@ 1ea73414a91b r0
$ hg log -Gr 'smartlog((date(-25) & draft()) + .)' -T '{bookmarks} {desc}'
o test2
o b
o r2
o master r1
@ r0
Make sure public commits that are descendants of master are not drawn
$ cd ..
$ hg init repo3
$ cd repo3
$ hg debugbuilddag '+5'
$ hg bookmark master -r 'desc(r1)'
$ hg debugmakepublic -r 'desc(r1)'
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.indentnonpublic=1
o bebd167eb94d r4
o 2dc09a01254d r3
o 01241442b3c2 r2
╭─╯
o 66f7d451a68b master r1
~
$ hg debugmakepublic 'desc(r3)'
$ hg up -q 'desc(r4)'
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.indentnonpublic=1
@ bebd167eb94d r4
╭─╯
o 2dc09a01254d r3
o 66f7d451a68b master r1
~
$ hg debugmakepublic 'desc(r4)'
$ hg smartlog -T '{node|short} {bookmarks} {desc}' --all --config smartlog.indentnonpublic=1
@ bebd167eb94d r4
o 66f7d451a68b master r1
~