Code

am: Fix launching of pager
authorJonathan Nieder <jrnieder@gmail.com>
Mon, 15 Feb 2010 05:04:13 +0000 (23:04 -0600)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Feb 2010 06:05:17 +0000 (22:05 -0800)
The pagination functionality in git am has some problems:

 - It does not check if stdout is a tty, so it always paginates.

 - If $GIT_PAGER uses any environment variables, they are being
   ignored, since it does not run $GIT_PAGER through eval.

 - If $GIT_PAGER is set to the empty string, instead of passing
   output through to stdout, it tries to run $dotest/patch.

Fix them.  While at it, move the definition of git_pager() to
git-sh-setup so authors of other commands are not tempted to
reimplement it with the same mistakes.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-am.sh
git-sh-setup.sh

index 3c08d53161faa72744ab64a1391d85cf9243f006..b11af03e0b47f248304adfe4317949da92196388 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -663,10 +663,7 @@ do
                [eE]*) git_editor "$dotest/final-commit"
                       action=again ;;
                [vV]*) action=again
-                      : ${GIT_PAGER=$(git var GIT_PAGER)}
-                      : ${LESS=-FRSX}
-                      export LESS
-                      $GIT_PAGER "$dotest/patch" ;;
+                      git_pager "$dotest/patch" ;;
                *)     action=again ;;
                esac
            done
index d56426dd396190a07de7d661cd22fb284b759ca8..44fb4670aed97fb4eebc2c8985dff9c363732507 100755 (executable)
@@ -107,6 +107,19 @@ git_editor() {
        eval "$GIT_EDITOR" '"$@"'
 }
 
+git_pager() {
+       if test -t 1
+       then
+               GIT_PAGER=$(git var GIT_PAGER)
+       else
+               GIT_PAGER=cat
+       fi
+       : ${LESS=-FRSX}
+       export LESS
+
+       eval "$GIT_PAGER" '"$@"'
+}
+
 sane_grep () {
        GREP_OPTIONS= LC_ALL=C grep "$@"
 }