test-pager.t
416 lines
| 10.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-pager.t
Augie Fackler
|
r28319 | $ cat >> fakepager.py <<EOF | ||
> import sys | ||||
Yuya Nishihara
|
r32541 | > printed = False | ||
Augie Fackler
|
r28319 | > for line in sys.stdin: | ||
> sys.stdout.write('paged! %r\n' % line) | ||||
Yuya Nishihara
|
r32541 | > printed = True | ||
> if not printed: | ||||
> sys.stdout.write('paged empty output!\n') | ||||
Augie Fackler
|
r28319 | > EOF | ||
Enable ui.formatted because pager won't fire without it, and set up | ||||
pager and tell it to use our fake pager that lets us see when the | ||||
pager was running. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [ui] | ||||
> formatted = yes | ||||
Pierre-Yves David
|
r32026 | > color = no | ||
Augie Fackler
|
r28319 | > [pager] | ||
Matt Harbison
|
r39743 | > pager = "$PYTHON" $TESTTMP/fakepager.py | ||
Augie Fackler
|
r28319 | > EOF | ||
$ hg init repo | ||||
$ cd repo | ||||
$ echo a >> a | ||||
$ hg add a | ||||
$ hg ci -m 'add a' | ||||
Matt Harbison
|
r39743 | $ for x in `"$PYTHON" $TESTDIR/seq.py 1 10`; do | ||
Augie Fackler
|
r28319 | > echo a $x >> a | ||
> hg ci -m "modify a $x" | ||||
> done | ||||
Augie Fackler
|
r30944 | By default diff and log are paged, but id is not: | ||
Augie Fackler
|
r28319 | |||
$ hg diff -c 2 --pager=yes | ||||
paged! 'diff -r f4be7687d414 -r bce265549556 a\n' | ||||
paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! '@@ -1,2 +1,3 @@\n' | ||||
paged! ' a\n' | ||||
paged! ' a 1\n' | ||||
paged! '+a 2\n' | ||||
$ hg log --limit 2 | ||||
paged! 'changeset: 10:46106edeeb38\n' | ||||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
paged! 'changeset: 9:6dd8ea7dd621\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 9\n' | ||||
paged! '\n' | ||||
Augie Fackler
|
r30944 | $ hg id | ||
46106edeeb38 tip | ||||
Augie Fackler
|
r28319 | |||
Pierre-Yves David
|
r32099 | We can control the pager from the config | ||
Pierre-Yves David
|
r32105 | $ hg log --limit 1 --config 'ui.paginate=False' | ||
Pierre-Yves David
|
r32099 | changeset: 10:46106edeeb38 | ||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 10 | ||||
Pierre-Yves David
|
r32105 | $ hg log --limit 1 --config 'ui.paginate=0' | ||
Pierre-Yves David
|
r32099 | changeset: 10:46106edeeb38 | ||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 10 | ||||
Pierre-Yves David
|
r32105 | $ hg log --limit 1 --config 'ui.paginate=1' | ||
Pierre-Yves David
|
r32099 | paged! 'changeset: 10:46106edeeb38\n' | ||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
FUJIWARA Katsunori
|
r33622 | explicit --pager=on should take precedence over other configurations | ||
(issue5580) | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [ui] | ||||
> paginate = false | ||||
> EOF | ||||
$ hg log --limit 1 --pager=on | ||||
paged! 'changeset: 10:46106edeeb38\n' | ||||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [ui] | ||||
> # true is default value of ui.paginate | ||||
> paginate = true | ||||
> EOF | ||||
$ hg log --limit 1 --pager=off | ||||
changeset: 10:46106edeeb38 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 10 | ||||
Augie Fackler
|
r30944 | We can enable the pager on id: | ||
Augie Fackler
|
r28319 | |||
Martin von Zweigbergk
|
r31405 | BROKEN: should be paged | ||
Augie Fackler
|
r30944 | $ hg --config pager.attend-id=yes id | ||
Martin von Zweigbergk
|
r31405 | 46106edeeb38 tip | ||
Augie Fackler
|
r28319 | |||
Augie Fackler
|
r30996 | Setting attend-$COMMAND to a false value works, even with pager in | ||
core: | ||||
Augie Fackler
|
r28319 | $ hg --config pager.attend-diff=no diff -c 2 | ||
diff -r f4be7687d414 -r bce265549556 a | ||||
--- a/a Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/a Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,2 +1,3 @@ | ||||
a | ||||
a 1 | ||||
+a 2 | ||||
Gregory Szorc
|
r32072 | Command aliases should have same behavior as main command | ||
$ hg history --limit 2 | ||||
Augie Fackler
|
r28319 | paged! 'changeset: 10:46106edeeb38\n' | ||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
paged! 'changeset: 9:6dd8ea7dd621\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 9\n' | ||||
paged! '\n' | ||||
Gregory Szorc
|
r32073 | Abbreviated command alias should also be paged | ||
$ hg hist -l 1 | ||||
paged! 'changeset: 10:46106edeeb38\n' | ||||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
Gregory Szorc
|
r32074 | Attend for an abbreviated command does not work | ||
$ hg --config pager.attend-ident=true ident | ||||
46106edeeb38 tip | ||||
$ hg --config extensions.pager= --config pager.attend-ident=true ident | ||||
46106edeeb38 tip | ||||
Yuya Nishihara
|
r30847 | Pager should not start if stdout is not a tty. | ||
$ hg log -l1 -q --config ui.formatted=False | ||||
10:46106edeeb38 | ||||
Yuya Nishihara
|
r31079 | Pager should be disabled if pager.pager is empty (otherwise the output would | ||
be silently lost.) | ||||
$ hg log -l1 -q --config pager.pager= | ||||
10:46106edeeb38 | ||||
Augie Fackler
|
r28531 | Pager with color enabled allows colors to come through by default, | ||
even though stdout is no longer a tty. | ||||
$ cat >> $HGRCPATH <<EOF | ||||
Pierre-Yves David
|
r32025 | > [ui] | ||
Pierre-Yves David
|
r32104 | > color = always | ||
Augie Fackler
|
r28531 | > [color] | ||
> mode = ansi | ||||
> EOF | ||||
$ hg log --limit 3 | ||||
paged! '\x1b[0;33mchangeset: 10:46106edeeb38\x1b[0m\n' | ||||
paged! 'tag: tip\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 10\n' | ||||
paged! '\n' | ||||
paged! '\x1b[0;33mchangeset: 9:6dd8ea7dd621\x1b[0m\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 9\n' | ||||
paged! '\n' | ||||
paged! '\x1b[0;33mchangeset: 8:cff05a6312fe\x1b[0m\n' | ||||
paged! 'user: test\n' | ||||
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! 'summary: modify a 8\n' | ||||
paged! '\n' | ||||
Jun Wu
|
r29132 | |||
Jun Wu
|
r34443 | #if no-chg | ||
Augie Fackler
|
r31478 | An invalid pager command name is reported sensibly if we don't have to | ||
use shell=True in the subprocess call: | ||||
$ hg log --limit 3 --config pager.pager=this-command-better-never-exist | ||||
missing pager command 'this-command-better-never-exist', skipping pager | ||||
\x1b[0;33mchangeset: 10:46106edeeb38\x1b[0m (esc) | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 10 | ||||
\x1b[0;33mchangeset: 9:6dd8ea7dd621\x1b[0m (esc) | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 9 | ||||
\x1b[0;33mchangeset: 8:cff05a6312fe\x1b[0m (esc) | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: modify a 8 | ||||
Jun Wu
|
r34443 | #endif | ||
Augie Fackler
|
r31478 | |||
A complicated pager command gets worse behavior. Bonus points if you can | ||||
improve this. | ||||
$ hg log --limit 3 \ | ||||
> --config pager.pager='this-command-better-never-exist --seriously' \ | ||||
> 2>/dev/null || true | ||||
Jun Wu
|
r29132 | Pager works with shell aliases. | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [alias] | ||||
> echoa = !echo a | ||||
> EOF | ||||
$ hg echoa | ||||
a | ||||
Martin von Zweigbergk
|
r31405 | BROKEN: should be paged | ||
Jun Wu
|
r29132 | $ hg --config pager.attend-echoa=yes echoa | ||
Martin von Zweigbergk
|
r31405 | a | ||
Jun Wu
|
r29343 | |||
Pager works with hg aliases including environment variables. | ||||
$ cat >> $HGRCPATH <<'EOF' | ||||
> [alias] | ||||
> printa = log -T "$A\n" -r 0 | ||||
> EOF | ||||
$ A=1 hg --config pager.attend-printa=yes printa | ||||
paged! '1\n' | ||||
$ A=2 hg --config pager.attend-printa=yes printa | ||||
paged! '2\n' | ||||
Jun Wu
|
r29344 | |||
Augie Fackler
|
r30942 | Something that's explicitly attended is still not paginated if the | ||
pager is globally set to off using a flag: | ||||
$ A=2 hg --config pager.attend-printa=yes printa --pager=no | ||||
2 | ||||
Jun Wu
|
r29344 | Pager should not override the exit code of other commands | ||
$ cat >> $TESTTMP/fortytwo.py <<'EOF' | ||||
Yuya Nishihara
|
r32337 | > from mercurial import commands, registrar | ||
Jun Wu
|
r29344 | > cmdtable = {} | ||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Pulkit Goyal
|
r38085 | > @command(b'fortytwo', [], b'fortytwo', norepo=True) | ||
Jun Wu
|
r29344 | > def fortytwo(ui, *opts): | ||
Pulkit Goyal
|
r38085 | > ui.write(b'42\n') | ||
Jun Wu
|
r29344 | > return 42 | ||
> EOF | ||||
$ cat >> $HGRCPATH <<'EOF' | ||||
> [extensions] | ||||
> fortytwo = $TESTTMP/fortytwo.py | ||||
> EOF | ||||
$ hg fortytwo --pager=on | ||||
paged! '42\n' | ||||
[42] | ||||
Augie Fackler
|
r30999 | |||
A command that asks for paging using ui.pager() directly works: | ||||
$ hg blame a | ||||
paged! ' 0: a\n' | ||||
paged! ' 1: a 1\n' | ||||
paged! ' 2: a 2\n' | ||||
paged! ' 3: a 3\n' | ||||
paged! ' 4: a 4\n' | ||||
paged! ' 5: a 5\n' | ||||
paged! ' 6: a 6\n' | ||||
paged! ' 7: a 7\n' | ||||
paged! ' 8: a 8\n' | ||||
paged! ' 9: a 9\n' | ||||
paged! '10: a 10\n' | ||||
but not with HGPLAIN | ||||
$ HGPLAIN=1 hg blame a | ||||
0: a | ||||
1: a 1 | ||||
2: a 2 | ||||
3: a 3 | ||||
4: a 4 | ||||
5: a 5 | ||||
6: a 6 | ||||
7: a 7 | ||||
8: a 8 | ||||
9: a 9 | ||||
10: a 10 | ||||
explicit flags work too: | ||||
$ hg blame --pager=no a | ||||
0: a | ||||
1: a 1 | ||||
2: a 2 | ||||
3: a 3 | ||||
4: a 4 | ||||
5: a 5 | ||||
6: a 6 | ||||
7: a 7 | ||||
8: a 8 | ||||
9: a 9 | ||||
10: a 10 | ||||
Augie Fackler
|
r31000 | |||
Yuya Nishihara
|
r32541 | A command with --output option: | ||
$ hg cat -r0 a | ||||
paged! 'a\n' | ||||
$ hg cat -r0 a --output=- | ||||
paged! 'a\n' | ||||
$ hg cat -r0 a --output=out | ||||
Yuya Nishihara
|
r37616 | |||
$ hg export -r0 | ||||
paged! '# HG changeset patch\n' | ||||
paged! '# User test\n' | ||||
paged! '# Date 0 0\n' | ||||
paged! '# Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! '# Node ID 1f0dee641bb7258c56bd60e93edfa2405381c41e\n' | ||||
paged! '# Parent 0000000000000000000000000000000000000000\n' | ||||
paged! 'add a\n' | ||||
paged! '\n' | ||||
paged! '\x1b[0;1mdiff -r 000000000000 -r 1f0dee641bb7 a\x1b[0m\n' | ||||
paged! '\x1b[0;31;1m--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\x1b[0m\n' | ||||
paged! '\x1b[0;32;1m+++ b/a\tThu Jan 01 00:00:00 1970 +0000\x1b[0m\n' | ||||
paged! '\x1b[0;35m@@ -0,0 +1,1 @@\x1b[0m\n' | ||||
paged! '\x1b[0;32m+a\x1b[0m\n' | ||||
$ hg export -r0 -o - | ||||
paged! '# HG changeset patch\n' | ||||
paged! '# User test\n' | ||||
paged! '# Date 0 0\n' | ||||
paged! '# Thu Jan 01 00:00:00 1970 +0000\n' | ||||
paged! '# Node ID 1f0dee641bb7258c56bd60e93edfa2405381c41e\n' | ||||
paged! '# Parent 0000000000000000000000000000000000000000\n' | ||||
paged! 'add a\n' | ||||
paged! '\n' | ||||
paged! '\x1b[0;1mdiff -r 000000000000 -r 1f0dee641bb7 a\x1b[0m\n' | ||||
paged! '\x1b[0;31;1m--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\x1b[0m\n' | ||||
paged! '\x1b[0;32;1m+++ b/a\tThu Jan 01 00:00:00 1970 +0000\x1b[0m\n' | ||||
paged! '\x1b[0;35m@@ -0,0 +1,1 @@\x1b[0m\n' | ||||
paged! '\x1b[0;32m+a\x1b[0m\n' | ||||
$ hg export -r0 -o out | ||||
Yuya Nishihara
|
r32541 | $ rm out | ||
Augie Fackler
|
r31000 | Put annotate in the ignore list for pager: | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [pager] | ||||
> ignore = annotate | ||||
> EOF | ||||
$ hg blame a | ||||
0: a | ||||
1: a 1 | ||||
2: a 2 | ||||
3: a 3 | ||||
4: a 4 | ||||
5: a 5 | ||||
6: a 6 | ||||
7: a 7 | ||||
8: a 8 | ||||
9: a 9 | ||||
10: a 10 | ||||
Jun Wu
|
r31954 | |||
Jun Wu
|
r34023 | During pushbuffer, pager should not start: | ||
$ cat > $TESTTMP/pushbufferpager.py <<EOF | ||||
> def uisetup(ui): | ||||
> ui.pushbuffer() | ||||
Pulkit Goyal
|
r38085 | > ui.pager(b'mycmd') | ||
> ui.write(b'content\n') | ||||
Jun Wu
|
r34023 | > ui.write(ui.popbuffer()) | ||
> EOF | ||||
$ echo append >> a | ||||
$ hg --config extensions.pushbuffer=$TESTTMP/pushbufferpager.py status --color=off | ||||
content | ||||
paged! 'M a\n' | ||||
Jun Wu
|
r31954 | Environment variables like LESS and LV are set automatically: | ||
$ cat > $TESTTMP/printlesslv.py <<EOF | ||||
Augie Fackler
|
r33973 | > from __future__ import absolute_import | ||
> import os | ||||
> import sys | ||||
Jun Wu
|
r31954 | > sys.stdin.read() | ||
> for name in ['LESS', 'LV']: | ||||
> sys.stdout.write(('%s=%s\n') % (name, os.environ.get(name, '-'))) | ||||
> sys.stdout.flush() | ||||
> EOF | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [alias] | ||||
> noop = log -r 0 -T '' | ||||
> [ui] | ||||
> formatted=1 | ||||
> [pager] | ||||
Matt Harbison
|
r39743 | > pager = "$PYTHON" $TESTTMP/printlesslv.py | ||
Jun Wu
|
r31954 | > EOF | ||
$ unset LESS | ||||
$ unset LV | ||||
$ hg noop --pager=on | ||||
LESS=FRX | ||||
LV=-c | ||||
$ LESS=EFGH hg noop --pager=on | ||||
LESS=EFGH | ||||
LV=-c | ||||