sapling/eden/hg-server/tests/test-fb-hgext-smartlog.t
Durham Goode 98d9269874 server: copy hg to a new hg-server directory
Summary:
Create a fork of the Mercurial code that we can use to build server
rpms. The hg servers will continue to exist for a few more months while we move
the darkstorm and ediscovery use cases off them. In the mean time, we want to
start making breaking changes to the client, so let's create a stable copy of
the hg code to produce rpms for the hg servers.

The fork is based off c7770c78d, the latest hg release.

This copies the files as is, then adds some minor tweaks to get it to build:
- Disables some lint checks that appear to be bypassed by path
- sed replace eden/scm with eden/hg-server
- Removed a dependency on scm/telemetry from the edenfs-client tests since
  scm/telemetry pulls in the original eden/scm/lib/configparser which conflicts
  with the hg-server conflict parser.

allow-large-files

Reviewed By: quark-zju

Differential Revision: D27632557

fbshipit-source-id: b2f442f4ec000ea08e4d62de068750832198e1f4
2021-04-09 10:09:06 -07: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
~