##// END OF EJS Templates
localrepo: use context manager for lock and transaction in commitctx()...
localrepo: use context manager for lock and transaction in commitctx() Differential Revision: https://phab.mercurial-scm.org/D5624

File last commit:

r39743:5abc47d4 default
r41400:0132221c default
Show More
test-pager.t
416 lines | 10.4 KiB | text/troff | Tads3Lexer
Augie Fackler
pager: add tests...
r28319 $ cat >> fakepager.py <<EOF
> import sys
Yuya Nishihara
cat: do not start pager if output will be written to file
r32541 > printed = False
Augie Fackler
pager: add tests...
r28319 > for line in sys.stdin:
> sys.stdout.write('paged! %r\n' % line)
Yuya Nishihara
cat: do not start pager if output will be written to file
r32541 > printed = True
> if not printed:
> sys.stdout.write('paged empty output!\n')
Augie Fackler
pager: add tests...
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
color: turn on by default (but for windows)...
r32026 > color = no
Augie Fackler
pager: add tests...
r28319 > [pager]
Matt Harbison
tests: quote PYTHON usage...
r39743 > pager = "$PYTHON" $TESTTMP/fakepager.py
Augie Fackler
pager: add tests...
r28319 > EOF
$ hg init repo
$ cd repo
$ echo a >> a
$ hg add a
$ hg ci -m 'add a'
Matt Harbison
tests: quote PYTHON usage...
r39743 $ for x in `"$PYTHON" $TESTDIR/seq.py 1 10`; do
Augie Fackler
pager: add tests...
r28319 > echo a $x >> a
> hg ci -m "modify a $x"
> done
Augie Fackler
tests: switch "this command isn't paged" example to id...
r30944 By default diff and log are paged, but id is not:
Augie Fackler
pager: add tests...
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
tests: switch "this command isn't paged" example to id...
r30944 $ hg id
46106edeeb38 tip
Augie Fackler
pager: add tests...
r28319
Pierre-Yves David
pager: test the 'enable' config option...
r32099 We can control the pager from the config
Pierre-Yves David
pager: rename 'pager.enable' to 'ui.paginate'...
r32105 $ hg log --limit 1 --config 'ui.paginate=False'
Pierre-Yves David
pager: test the 'enable' config option...
r32099 changeset: 10:46106edeeb38
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify a 10
Pierre-Yves David
pager: rename 'pager.enable' to 'ui.paginate'...
r32105 $ hg log --limit 1 --config 'ui.paginate=0'
Pierre-Yves David
pager: test the 'enable' config option...
r32099 changeset: 10:46106edeeb38
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify a 10
Pierre-Yves David
pager: rename 'pager.enable' to 'ui.paginate'...
r32105 $ hg log --limit 1 --config 'ui.paginate=1'
Pierre-Yves David
pager: test the 'enable' config option...
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
ui: enable pager always for explicit --pager=on (issue5580)...
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
tests: switch "this command isn't paged" example to id...
r30944 We can enable the pager on id:
Augie Fackler
pager: add tests...
r28319
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 BROKEN: should be paged
Augie Fackler
tests: switch "this command isn't paged" example to id...
r30944 $ hg --config pager.attend-id=yes id
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 46106edeeb38 tip
Augie Fackler
pager: add tests...
r28319
Augie Fackler
tests: clean up a bunch of pager testing that is about to be invalidated...
r30996 Setting attend-$COMMAND to a false value works, even with pager in
core:
Augie Fackler
pager: add tests...
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
tests: drop unnecessary pager attend in test...
r32072 Command aliases should have same behavior as main command
$ hg history --limit 2
Augie Fackler
pager: add tests...
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
tests: test that abbreviated command alias is also paged...
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
tests: demonstrate that pager.attend-<abbreviated> doesn't work...
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
pager: wrap _runcommand() no matter if stdout is redirected...
r30847 Pager should not start if stdout is not a tty.
$ hg log -l1 -q --config ui.formatted=False
10:46106edeeb38
Yuya Nishihara
pager: do not try to run an empty pager command...
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
test-pager: add a test for pager with color enabled
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
pager: stop using the color extension in tests...
r32025 > [ui]
Pierre-Yves David
color: special case 'always' in 'ui.color'...
r32104 > color = always
Augie Fackler
test-pager: add a test for pager with color enabled
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
dispatch: always load extensions before running shell aliases (issue5230)...
r29132
Jun Wu
test-pager: make it compatible with chg...
r34443 #if no-chg
Augie Fackler
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)...
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
test-pager: make it compatible with chg...
r34443 #endif
Augie Fackler
pager: avoid shell=True on subprocess.Popen for better errors (issue5491)...
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
dispatch: always load extensions before running shell aliases (issue5230)...
r29132 Pager works with shell aliases.
$ cat >> $HGRCPATH <<EOF
> [alias]
> echoa = !echo a
> EOF
$ hg echoa
a
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 BROKEN: should be paged
Jun Wu
dispatch: always load extensions before running shell aliases (issue5230)...
r29132 $ hg --config pager.attend-echoa=yes echoa
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 a
Jun Wu
tests: move chg pager test to test-pager.t...
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
chg: exec pager in child process...
r29344
Augie Fackler
pager: add a test of --pager=no functionality...
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
chg: exec pager in child process...
r29344 Pager should not override the exit code of other commands
$ cat >> $TESTTMP/fortytwo.py <<'EOF'
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > from mercurial import commands, registrar
Jun Wu
chg: exec pager in child process...
r29344 > cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Pulkit Goyal
py3: add b'' prefixes in tests/test-pager.t...
r38085 > @command(b'fortytwo', [], b'fortytwo', norepo=True)
Jun Wu
chg: exec pager in child process...
r29344 > def fortytwo(ui, *opts):
Pulkit Goyal
py3: add b'' prefixes in tests/test-pager.t...
r38085 > ui.write(b'42\n')
Jun Wu
chg: exec pager in child process...
r29344 > return 42
> EOF
$ cat >> $HGRCPATH <<'EOF'
> [extensions]
> fortytwo = $TESTTMP/fortytwo.py
> EOF
$ hg fortytwo --pager=on
paged! '42\n'
[42]
Augie Fackler
annotate: migrate to modern pager API
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
tests: prove that ignore works
r31000
Yuya Nishihara
cat: do not start pager if output will be written to file
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
export: do not start pager if output will be written to file...
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
cat: do not start pager if output will be written to file
r32541 $ rm out
Augie Fackler
tests: prove that ignore works
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
pager: set some environment variables if they're not set...
r31954
Jun Wu
pager: do not start pager if `ui` has been `pushbuffer`-ed...
r34023 During pushbuffer, pager should not start:
$ cat > $TESTTMP/pushbufferpager.py <<EOF
> def uisetup(ui):
> ui.pushbuffer()
Pulkit Goyal
py3: add b'' prefixes in tests/test-pager.t...
r38085 > ui.pager(b'mycmd')
> ui.write(b'content\n')
Jun Wu
pager: do not start pager if `ui` has been `pushbuffer`-ed...
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
pager: set some environment variables if they're not set...
r31954 Environment variables like LESS and LV are set automatically:
$ cat > $TESTTMP/printlesslv.py <<EOF
Augie Fackler
tests: update test-pager to pass our import checker
r33973 > from __future__ import absolute_import
> import os
> import sys
Jun Wu
pager: set some environment variables if they're not set...
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
tests: quote PYTHON usage...
r39743 > pager = "$PYTHON" $TESTTMP/printlesslv.py
Jun Wu
pager: set some environment variables if they're not set...
r31954 > EOF
$ unset LESS
$ unset LV
$ hg noop --pager=on
LESS=FRX
LV=-c
$ LESS=EFGH hg noop --pager=on
LESS=EFGH
LV=-c