##// END OF EJS Templates
import: use context manager for lock, dirstateguard, transaction...
import: use context manager for lock, dirstateguard, transaction A tiny side-effect is that the transaction is now closed after saving the commit message. Differential Revision: https://phab.mercurial-scm.org/D3748

File last commit:

r34919:27481162 stable
r38380:2ceea155 default
Show More
test-pager-legacy.t
263 lines | 7.3 KiB | text/troff | Tads3Lexer
/ tests / test-pager-legacy.t
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 $ cat >> fakepager.py <<EOF
> import sys
> for line in sys.stdin:
> sys.stdout.write('paged! %r\n' % line)
> 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
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > [extensions]
> pager=
> [pager]
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 > pager = $PYTHON $TESTTMP/fakepager.py
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > EOF
$ hg init repo
$ cd repo
$ echo a >> a
$ hg add a
$ hg ci -m 'add a'
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ for x in `$PYTHON $TESTDIR/seq.py 1 10`; do
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > echo a $x >> a
> hg ci -m "modify a $x"
> done
By default diff and log are paged, but summary is not:
$ 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'
$ hg summary
Martin von Zweigbergk
pager: if old pager extensions is enabled, respect pager.attend...
r31406 parent: 10:46106edeeb38 tip
modify a 10
branch: default
commit: (clean)
update: (current)
phases: 11 draft
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405
We can enable the pager on summary:
$ hg --config pager.attend-summary=yes summary
paged! 'parent: 10:46106edeeb38 tip\n'
paged! ' modify a 10\n'
paged! 'branch: default\n'
paged! 'commit: (clean)\n'
paged! 'update: (current)\n'
paged! 'phases: 11 draft\n'
$ 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
If we completely change the attend list that's respected:
$ hg --config pager.attend=summary diff -c 2
Martin von Zweigbergk
pager: if old pager extensions is enabled, respect pager.attend...
r31406 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
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405
If 'log' is in attend, then 'history' should also be paged:
$ hg history --limit 2 --config pager.attend=log
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'
Possible bug: history is explicitly ignored in pager config, but
because log is in the attend list it still gets pager treatment.
$ hg history --limit 2 --config pager.attend=log \
> --config pager.ignore=history
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'
Possible bug: history is explicitly marked as attend-history=no, but
it doesn't fail to get paged because log is still in the attend list.
$ hg history --limit 2 --config pager.attend-history=no
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'
Possible bug: disabling pager for log but enabling it for history
doesn't result in history being paged.
$ hg history --limit 2 --config pager.attend-log=no \
> --config pager.attend-history=yes
changeset: 10:46106edeeb38
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify a 10
changeset: 9:6dd8ea7dd621
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify a 9
Pager should not start if stdout is not a tty.
$ hg log -l1 -q --config ui.formatted=False
10:46106edeeb38
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
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > [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'
Pager works with shell aliases.
$ cat >> $HGRCPATH <<EOF
> [alias]
> echoa = !echo a
> EOF
$ hg echoa
a
$ hg --config pager.attend-echoa=yes echoa
paged! 'a\n'
Yuya Nishihara
mq: copy pager attributes back to qrepo.ui...
r34919 Pager attributes should be copied to mq repo. Otherwise pager would be started
twice and color mode would be lost.
$ cat >> $HGRCPATH <<EOF
> [extensions]
> mq =
> EOF
$ hg init --mq
$ hg qnew foo.patch
$ hg qpop
popping foo.patch
patch queue now empty
$ hg ci --mq -m 'commit patches'
$ hg log --mq --debug
starting pager for command 'extension-via-attend-log'
paged! '\x1b[0;33mchangeset: 0:6cc2ded15503e368aaf76b6cc3d12f320c9e3b87\x1b[0m\n'
paged! 'tag: tip\n'
paged! 'phase: draft\n'
paged! 'parent: -1:0000000000000000000000000000000000000000\n'
paged! 'parent: -1:0000000000000000000000000000000000000000\n'
paged! 'manifest: 0:4980de1ae1b612014d5bcfa9507da84ce8891daa\n'
paged! 'user: test\n'
paged! 'date: Thu Jan 01 00:00:00 1970 +0000\n'
paged! 'files+: .hgignore foo.patch series\n'
paged! 'extra: branch=default\n'
paged! 'description:\n'
paged! 'commit patches\n'
paged! '\n'
paged! '\n'
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 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'
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
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 registrar, commands
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Pulkit Goyal
py3: make sure commands name are bytes in tests
r33097 > @command(b'fortytwo', [], 'fortytwo', norepo=True)
Martin von Zweigbergk
tests: duplicate test for pager for old extension and for in-core pager...
r31405 > def fortytwo(ui, *opts):
> ui.write('42\n')
> return 42
> EOF
$ cat >> $HGRCPATH <<'EOF'
> [extensions]
> fortytwo = $TESTTMP/fortytwo.py
> EOF
$ hg fortytwo --pager=on
paged! '42\n'
[42]