Re: [PATCH] pager: set LV=-c alongside LESS=FRSX
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
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
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
[PATCH] pager: set LV=-c alongside LESS=FRSX
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 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 -- 1.8.5.1 -- 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