Re: [PATCH] pager: set LV=-c alongside LESS=FRSX

2014-01-29 Thread Anders Kaseorg

On 01/06/2014 09:14 PM, Jonathan Nieder wrote:

+test_expect_success TTY 'LESS and LV envvars are set for pagination' '
+   (
+   sane_unset LESS LV 
+   PAGER=env pager-env.out 
+   export PAGER 
+
+   test_terminal git log
+   ) 
+   grep ^LESS= pager-env.out 
+   grep ^LV= pager-env.out
+'
+


On the Ubuntu PPA builders, I’m seeing this new test fail with SIGPIPE 
about half the time:


died of signal 13 at /build/buildd/git-1.9~rc1/t/test-terminal.perl line 33.
not ok 6 - LESS and LV envvars are set for pagination

Although the test seems to work locally for me, I can reproduce a 
similar failure just by running


$ GIT_PAGER='env pager-env.out' ./test-terminal.perl git log
died of signal 13 at ./test-terminal.perl line 33.

Anders

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] pager: set LV=-c alongside LESS=FRSX

2014-01-07 Thread Junio C Hamano
Jonathan Nieder jrnie...@gmail.com writes:

 On systems with lv configured as the preferred pager (i.e.,
 DEFAULT_PAGER=lv at build time, or PAGER=lv exported in the
 environment) git commands that use color show control codes instead of
 color in the pager:

   $ git diff
   ^[[1mdiff --git a/.mailfilter b/.mailfilter^[[m
   ^[[1mindex aa4f0b2..17e113e 100644^[[m
   ^[[1m--- a/.mailfilter^[[m
   ^[[1m+++ b/.mailfilter^[[m
   ^[[36m@@ -1,11 +1,58 @@^[[m

 less avoids this problem because git uses the LESS environment
 variable to pass the -R option ('output ANSI color escapes in raw
 form') by default.  Use the LV environment variable to pass 'lv' the
 -c option ('allow ANSI escape sequences for text decoration / color')
 to fix it for lv, too.

 Noticed when the default value for color.ui flipped to 'auto' in
 v1.8.4-rc0~36^2~1 (2013-06-10).

 Reported-by: Olaf Meeuwissen olaf.meeuwis...@avasys.jp
 Signed-off-by: Jonathan Nieder jrnie...@gmail.com
 ---
 Olaf Meeuwissen wrote[1]:

 Yes, it's called LV and documented in the lv(1) manual page.  Simply
 search for 'env' ;-)

 Ah, thanks.  How about this patch?

 [1] http://bugs.debian.org/730527

Looks good; though I have to wonder two (and a half) things:

 - Scripted Porcelains get LESS=-FRSX while C Porcelains get
   LESS=FRSX as the default (the leading dash being the
   difference), which looks somewhat inconsistent.  Not a new
   problem, though.

 - Can we generalize this a bit so that a builder can pass a list
   of var=val pairs and demote the existing LESS=FRSX to just a
   canned setting of such a mechanism?

 - Can such a code be reused to make this into a runtime setting,
   even?  Would it be worth the complexity?

Thanks.

  Documentation/config.txt |  4 
  git-sh-setup.sh  |  3 ++-
  pager.c  | 11 +--
  perl/Git/SVN/Log.pm  |  1 +
  t/t7006-pager.sh | 12 
  5 files changed, 28 insertions(+), 3 deletions(-)

 diff --git a/Documentation/config.txt b/Documentation/config.txt
 index a405806..ed59853 100644
 --- a/Documentation/config.txt
 +++ b/Documentation/config.txt
 @@ -567,6 +567,10 @@ be passed to the shell by Git, which will translate the 
 final
  command to `LESS=FRSX less -+S`. The environment tells the command
  to set the `S` option to chop long lines but the command line
  resets it to the default to fold long lines.
 ++
 +Likewise, when the `LV` environment variable is unset, Git sets it
 +to `-c`.  You can override this setting by exporting `LV` with
 +another value or setting `core.pager` to `lv +c`.
  
  core.whitespace::
   A comma separated list of common whitespace problems to
 diff --git a/git-sh-setup.sh b/git-sh-setup.sh
 index 190a539..fffa3c7 100644
 --- a/git-sh-setup.sh
 +++ b/git-sh-setup.sh
 @@ -159,7 +159,8 @@ git_pager() {
   GIT_PAGER=cat
   fi
   : ${LESS=-FRSX}
 - export LESS
 + : ${LV=-c}
 + export LESS LV
  
   eval $GIT_PAGER '$@'
  }
 diff --git a/pager.c b/pager.c
 index 345b0bc..0cc75a8 100644
 --- a/pager.c
 +++ b/pager.c
 @@ -80,8 +80,15 @@ void setup_pager(void)
   pager_process.use_shell = 1;
   pager_process.argv = pager_argv;
   pager_process.in = -1;
 - if (!getenv(LESS)) {
 - static const char *env[] = { LESS=FRSX, NULL };
 + if (!getenv(LESS) || !getenv(LV)) {
 + static const char *env[3];
 + int i = 0;
 +
 + if (!getenv(LESS))
 + env[i++] = LESS=FRSX;
 + if (!getenv(LV))
 + env[i++] = LV=-c;
 + env[i] = NULL;
   pager_process.env = env;
   }
   if (start_command(pager_process))
 diff --git a/perl/Git/SVN/Log.pm b/perl/Git/SVN/Log.pm
 index 3f8350a..34f2869 100644
 --- a/perl/Git/SVN/Log.pm
 +++ b/perl/Git/SVN/Log.pm
 @@ -117,6 +117,7 @@ sub run_pager {
   }
   open STDIN, '', $rfd or fatal Can't redirect stdin: $!;
   $ENV{LESS} ||= 'FRSX';
 + $ENV{LV} ||= '-c';
   exec $pager or fatal Can't run pager: $! ($pager);
  }
  
 diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh
 index ff25908..7fe3367 100755
 --- a/t/t7006-pager.sh
 +++ b/t/t7006-pager.sh
 @@ -37,6 +37,18 @@ test_expect_failure TTY 'pager runs from subdir' '
   test_cmp expected actual
  '
  
 +test_expect_success TTY 'LESS and LV envvars are set for pagination' '
 + (
 + sane_unset LESS LV 
 + PAGER=env pager-env.out 
 + export PAGER 
 +
 + test_terminal git log
 + ) 
 + grep ^LESS= pager-env.out 
 + grep ^LV= pager-env.out
 +'
 +
  test_expect_success TTY 'some commands do not use a pager' '
   rm -f paginated.out 
   test_terminal git rev-list HEAD 
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] pager: set LV=-c alongside LESS=FRSX

2014-01-07 Thread Andreas Schwab
Junio C Hamano gits...@pobox.com writes:

  - Scripted Porcelains get LESS=-FRSX while C Porcelains get
LESS=FRSX as the default (the leading dash being the
difference), which looks somewhat inconsistent.  Not a new
problem, though.

Even the less manpage is inconsistent about whether $LESS should start
with a dash (there are examples with and without it).
Implementation-wise, less uses the same function to process an option
argument (including the leading dash) and the value of $LESS, so the
form with the leading dash is probably preferred.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
And now for something completely different.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html