summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2010-02-14 23:04:13 -0600
committerJunio C Hamano <gitster@pobox.com>2010-02-14 22:05:17 -0800
commitf6dff119d51e0067d213068093039bb2f939d139 (patch)
treedb787d1d1aa1ef9b9f83d5b7c57516c3169dcfd3
parent190c1cda7eb6dc03be80f45d3d174c313d23da2c (diff)
downloadgit-f6dff119d51e0067d213068093039bb2f939d139.tar.gz
am: Fix launching of pager
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>
-rwxr-xr-xgit-am.sh5
-rwxr-xr-xgit-sh-setup.sh13
2 files changed, 14 insertions, 4 deletions
diff --git a/git-am.sh b/git-am.sh
index 3c08d53161..b11af03e0b 100755
--- 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
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index d56426dd39..44fb4670ae 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -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 "$@"
}