mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
339f9e280d
If pagercmd is explicitly set to '', the pager process would exit silently and the output would be lost. We'd better disable the pager in such case.
231 lines
5.2 KiB
Perl
231 lines
5.2 KiB
Perl
$ 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
|
|
> [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 id 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 id
|
|
46106edeeb38 tip
|
|
|
|
We can enable the pager on id:
|
|
|
|
$ hg --config pager.attend-id=yes id
|
|
paged! '46106edeeb38 tip\n'
|
|
|
|
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
|
|
+++ b/a Thu Jan 01 00:00:00 1970 +0000
|
|
@@ -1,2 +1,3 @@
|
|
a
|
|
a 1
|
|
+a 2
|
|
|
|
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'
|
|
|
|
Pager should not start if stdout is not a tty.
|
|
|
|
$ hg log -l1 -q --config ui.formatted=False
|
|
10:46106edeeb38
|
|
|
|
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
|
|
|
|
Pager with color enabled allows colors to come through by default,
|
|
even though stdout is no longer a tty.
|
|
$ cat >> $HGRCPATH <<EOF
|
|
> [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 <<EOF
|
|
> [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]
|
|
|
|
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
|
|
|
|
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
|