diff --git a/tests/test-pager-legacy.t b/tests/test-pager-legacy.t new file mode 100644 index 0000000000..54a9d0b93a --- /dev/null +++ b/tests/test-pager-legacy.t @@ -0,0 +1,234 @@ + $ cat >> fakepager.py < 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 < [ui] + > formatted = yes + > [extensions] + > pager= + > [pager] + > pager = python $TESTTMP/fakepager.py + > EOF + + $ hg init repo + $ cd repo + $ echo a >> a + $ hg add a + $ hg ci -m 'add a' + $ for x in `python $TESTDIR/seq.py 1 10`; do + > 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' + +BROKEN: should not be paged by default + $ hg 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' + +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: +BROKEN: diff should not be paged + $ hg --config pager.attend=summary diff -c 2 + 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' + +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 < [extensions] + > color= + > [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 < [alias] + > echoa = !echo a + > EOF + + $ hg echoa + a + $ hg --config pager.attend-echoa=yes echoa + paged! 'a\n' + +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' + > from mercurial import cmdutil, commands + > cmdtable = {} + > command = cmdutil.command(cmdtable) + > @command('fortytwo', [], 'fortytwo', norepo=True) + > 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] diff --git a/tests/test-pager.t b/tests/test-pager.t index 6148f6b89c..0dce809c1e 100644 --- a/tests/test-pager.t +++ b/tests/test-pager.t @@ -10,8 +10,6 @@ pager was running. $ cat >> $HGRCPATH < [ui] > formatted = yes - > [extensions] - > pager= > [pager] > pager = python $TESTTMP/fakepager.py > EOF @@ -55,12 +53,12 @@ By default diff and log are paged, but id is not: We can enable the pager on id: +BROKEN: should be paged $ hg --config pager.attend-id=yes id - paged! '46106edeeb38 tip\n' + 46106edeeb38 tip Setting attend-$COMMAND to a false value works, even with pager in core: - $ 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 @@ -130,8 +128,9 @@ Pager works with shell aliases. $ hg echoa a +BROKEN: should be paged $ hg --config pager.attend-echoa=yes echoa - paged! 'a\n' + a Pager works with hg aliases including environment variables.