tests/test-pager-legacy.t
changeset 31405 d5eb20934c36
parent 31079 873ebdd6e84d
child 31406 e83302d43748
equal deleted inserted replaced
31404:7409eb69731f 31405:d5eb20934c36
       
     1   $ cat >> fakepager.py <<EOF
       
     2   > import sys
       
     3   > for line in sys.stdin:
       
     4   >     sys.stdout.write('paged! %r\n' % line)
       
     5   > EOF
       
     6 
       
     7 Enable ui.formatted because pager won't fire without it, and set up
       
     8 pager and tell it to use our fake pager that lets us see when the
       
     9 pager was running.
       
    10   $ cat >> $HGRCPATH <<EOF
       
    11   > [ui]
       
    12   > formatted = yes
       
    13   > [extensions]
       
    14   > pager=
       
    15   > [pager]
       
    16   > pager = python $TESTTMP/fakepager.py
       
    17   > EOF
       
    18 
       
    19   $ hg init repo
       
    20   $ cd repo
       
    21   $ echo a >> a
       
    22   $ hg add a
       
    23   $ hg ci -m 'add a'
       
    24   $ for x in `python $TESTDIR/seq.py 1 10`; do
       
    25   >   echo a $x >> a
       
    26   >   hg ci -m "modify a $x"
       
    27   > done
       
    28 
       
    29 By default diff and log are paged, but summary is not:
       
    30 
       
    31   $ hg diff -c 2 --pager=yes
       
    32   paged! 'diff -r f4be7687d414 -r bce265549556 a\n'
       
    33   paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n'
       
    34   paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n'
       
    35   paged! '@@ -1,2 +1,3 @@\n'
       
    36   paged! ' a\n'
       
    37   paged! ' a 1\n'
       
    38   paged! '+a 2\n'
       
    39 
       
    40   $ hg log --limit 2
       
    41   paged! 'changeset:   10:46106edeeb38\n'
       
    42   paged! 'tag:         tip\n'
       
    43   paged! 'user:        test\n'
       
    44   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
    45   paged! 'summary:     modify a 10\n'
       
    46   paged! '\n'
       
    47   paged! 'changeset:   9:6dd8ea7dd621\n'
       
    48   paged! 'user:        test\n'
       
    49   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
    50   paged! 'summary:     modify a 9\n'
       
    51   paged! '\n'
       
    52 
       
    53 BROKEN: should not be paged by default
       
    54   $ hg summary
       
    55   paged! 'parent: 10:46106edeeb38 tip\n'
       
    56   paged! ' modify a 10\n'
       
    57   paged! 'branch: default\n'
       
    58   paged! 'commit: (clean)\n'
       
    59   paged! 'update: (current)\n'
       
    60   paged! 'phases: 11 draft\n'
       
    61 
       
    62 We can enable the pager on summary:
       
    63 
       
    64   $ hg --config pager.attend-summary=yes summary
       
    65   paged! 'parent: 10:46106edeeb38 tip\n'
       
    66   paged! ' modify a 10\n'
       
    67   paged! 'branch: default\n'
       
    68   paged! 'commit: (clean)\n'
       
    69   paged! 'update: (current)\n'
       
    70   paged! 'phases: 11 draft\n'
       
    71 
       
    72   $ hg --config pager.attend-diff=no diff -c 2
       
    73   diff -r f4be7687d414 -r bce265549556 a
       
    74   --- a/a	Thu Jan 01 00:00:00 1970 +0000
       
    75   +++ b/a	Thu Jan 01 00:00:00 1970 +0000
       
    76   @@ -1,2 +1,3 @@
       
    77    a
       
    78    a 1
       
    79   +a 2
       
    80 
       
    81 If we completely change the attend list that's respected:
       
    82 BROKEN: diff should not be paged
       
    83   $ hg --config pager.attend=summary diff -c 2
       
    84   paged! 'diff -r f4be7687d414 -r bce265549556 a\n'
       
    85   paged! '--- a/a\tThu Jan 01 00:00:00 1970 +0000\n'
       
    86   paged! '+++ b/a\tThu Jan 01 00:00:00 1970 +0000\n'
       
    87   paged! '@@ -1,2 +1,3 @@\n'
       
    88   paged! ' a\n'
       
    89   paged! ' a 1\n'
       
    90   paged! '+a 2\n'
       
    91 
       
    92 If 'log' is in attend, then 'history' should also be paged:
       
    93   $ hg history --limit 2 --config pager.attend=log
       
    94   paged! 'changeset:   10:46106edeeb38\n'
       
    95   paged! 'tag:         tip\n'
       
    96   paged! 'user:        test\n'
       
    97   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
    98   paged! 'summary:     modify a 10\n'
       
    99   paged! '\n'
       
   100   paged! 'changeset:   9:6dd8ea7dd621\n'
       
   101   paged! 'user:        test\n'
       
   102   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   103   paged! 'summary:     modify a 9\n'
       
   104   paged! '\n'
       
   105 
       
   106 Possible bug: history is explicitly ignored in pager config, but
       
   107 because log is in the attend list it still gets pager treatment.
       
   108 
       
   109   $ hg history --limit 2 --config pager.attend=log \
       
   110   >   --config pager.ignore=history
       
   111   paged! 'changeset:   10:46106edeeb38\n'
       
   112   paged! 'tag:         tip\n'
       
   113   paged! 'user:        test\n'
       
   114   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   115   paged! 'summary:     modify a 10\n'
       
   116   paged! '\n'
       
   117   paged! 'changeset:   9:6dd8ea7dd621\n'
       
   118   paged! 'user:        test\n'
       
   119   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   120   paged! 'summary:     modify a 9\n'
       
   121   paged! '\n'
       
   122 
       
   123 Possible bug: history is explicitly marked as attend-history=no, but
       
   124 it doesn't fail to get paged because log is still in the attend list.
       
   125 
       
   126   $ hg history --limit 2 --config pager.attend-history=no
       
   127   paged! 'changeset:   10:46106edeeb38\n'
       
   128   paged! 'tag:         tip\n'
       
   129   paged! 'user:        test\n'
       
   130   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   131   paged! 'summary:     modify a 10\n'
       
   132   paged! '\n'
       
   133   paged! 'changeset:   9:6dd8ea7dd621\n'
       
   134   paged! 'user:        test\n'
       
   135   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   136   paged! 'summary:     modify a 9\n'
       
   137   paged! '\n'
       
   138 
       
   139 Possible bug: disabling pager for log but enabling it for history
       
   140 doesn't result in history being paged.
       
   141 
       
   142   $ hg history --limit 2 --config pager.attend-log=no \
       
   143   > --config pager.attend-history=yes
       
   144   changeset:   10:46106edeeb38
       
   145   tag:         tip
       
   146   user:        test
       
   147   date:        Thu Jan 01 00:00:00 1970 +0000
       
   148   summary:     modify a 10
       
   149   
       
   150   changeset:   9:6dd8ea7dd621
       
   151   user:        test
       
   152   date:        Thu Jan 01 00:00:00 1970 +0000
       
   153   summary:     modify a 9
       
   154   
       
   155 Pager should not start if stdout is not a tty.
       
   156 
       
   157   $ hg log -l1 -q --config ui.formatted=False
       
   158   10:46106edeeb38
       
   159 
       
   160 Pager with color enabled allows colors to come through by default,
       
   161 even though stdout is no longer a tty.
       
   162   $ cat >> $HGRCPATH <<EOF
       
   163   > [extensions]
       
   164   > color=
       
   165   > [color]
       
   166   > mode = ansi
       
   167   > EOF
       
   168   $ hg log --limit 3
       
   169   paged! '\x1b[0;33mchangeset:   10:46106edeeb38\x1b[0m\n'
       
   170   paged! 'tag:         tip\n'
       
   171   paged! 'user:        test\n'
       
   172   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   173   paged! 'summary:     modify a 10\n'
       
   174   paged! '\n'
       
   175   paged! '\x1b[0;33mchangeset:   9:6dd8ea7dd621\x1b[0m\n'
       
   176   paged! 'user:        test\n'
       
   177   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   178   paged! 'summary:     modify a 9\n'
       
   179   paged! '\n'
       
   180   paged! '\x1b[0;33mchangeset:   8:cff05a6312fe\x1b[0m\n'
       
   181   paged! 'user:        test\n'
       
   182   paged! 'date:        Thu Jan 01 00:00:00 1970 +0000\n'
       
   183   paged! 'summary:     modify a 8\n'
       
   184   paged! '\n'
       
   185 
       
   186 Pager works with shell aliases.
       
   187 
       
   188   $ cat >> $HGRCPATH <<EOF
       
   189   > [alias]
       
   190   > echoa = !echo a
       
   191   > EOF
       
   192 
       
   193   $ hg echoa
       
   194   a
       
   195   $ hg --config pager.attend-echoa=yes echoa
       
   196   paged! 'a\n'
       
   197 
       
   198 Pager works with hg aliases including environment variables.
       
   199 
       
   200   $ cat >> $HGRCPATH <<'EOF'
       
   201   > [alias]
       
   202   > printa = log -T "$A\n" -r 0
       
   203   > EOF
       
   204 
       
   205   $ A=1 hg --config pager.attend-printa=yes printa
       
   206   paged! '1\n'
       
   207   $ A=2 hg --config pager.attend-printa=yes printa
       
   208   paged! '2\n'
       
   209 
       
   210 Something that's explicitly attended is still not paginated if the
       
   211 pager is globally set to off using a flag:
       
   212   $ A=2 hg --config pager.attend-printa=yes printa --pager=no
       
   213   2
       
   214 
       
   215 Pager should not override the exit code of other commands
       
   216 
       
   217   $ cat >> $TESTTMP/fortytwo.py <<'EOF'
       
   218   > from mercurial import cmdutil, commands
       
   219   > cmdtable = {}
       
   220   > command = cmdutil.command(cmdtable)
       
   221   > @command('fortytwo', [], 'fortytwo', norepo=True)
       
   222   > def fortytwo(ui, *opts):
       
   223   >     ui.write('42\n')
       
   224   >     return 42
       
   225   > EOF
       
   226 
       
   227   $ cat >> $HGRCPATH <<'EOF'
       
   228   > [extensions]
       
   229   > fortytwo = $TESTTMP/fortytwo.py
       
   230   > EOF
       
   231 
       
   232   $ hg fortytwo --pager=on
       
   233   paged! '42\n'
       
   234   [42]