git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 5/6] am: Fix launching of pager

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Feb 15, 2010, 05:04 UTC
Message-ID
<20100215050413.GA19586@progeny.tock>
In-Reply-To
<20100215044223.GA3336@coredump.intra.peff.net>
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>
---
Jeff King wrote:
> On Sun, Feb 14, 2010 at 09:25:33PM -0600, Jonathan Nieder wrote:
Show 6 quoted lines
>> +		if tty <&1 >/dev/null 2>/dev/null
>
> We seem to use "test -t 1" for this elsewhere, and I don't see us using
> "tty" anywhere else. It is POSIX, and I tested that even Solaris 8 and
> AIX 6.1 have it. So I don't think it is a portability issue, but others
> may know more than I.
tty is portable, but "test -t 1" is cleaner.  Thanks for the pointer.
 git-am.sh       |    5 +----
 git-sh-setup.sh |   13 +++++++++++++
 2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/git-am.sh b/git-am.sh
index 3c08d53..b11af03 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 d56426d..44fb467 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 "$@"
 }
-- 
1.7.0
Previous: Jeff KingNext: Jeff King
Message 21 of 27 in “'git svn log' no longer uses the pager”
  1. Sebastian CelisFeb 13, 2010
  2. Jeff KingFeb 13, 2010
  3. Jonathan NiederFeb 14, 2010
  4. 1/6 Fix 'git var' usage synopsisJonathan Nieder, Feb 14, 2010
  5. Junio C HamanoFeb 15, 2010
  6. 1/6 Fix 'git var' usage synopsisJonathan Nieder, Feb 15, 2010
  7. Jeff KingFeb 15, 2010
  8. 2/6 Make 'git var GIT_PAGER' always print the configured pagerJonathan Nieder, Feb 14, 2010
  9. Jeff KingFeb 15, 2010
  10. Jonathan NiederFeb 15, 2010
  11. Jeff KingFeb 15, 2010
  12. 3/6 git.1: Clarify the behavior of the --paginate optionJonathan Nieder, Feb 14, 2010
  13. Jeff KingFeb 15, 2010
  14. 4/6 git svn: Fix launching of pagerJonathan Nieder, Feb 14, 2010
  15. Eric WongFeb 15, 2010
  16. 5/6 am: Fix launching of pagerJonathan Nieder, Feb 14, 2010
  17. Junio C HamanoFeb 15, 2010
  18. 5/6 am: Fix launching of pagerJonathan Nieder, Feb 15, 2010
  19. 5/6 am: Fix launching of pagerJonathan Nieder, Feb 15, 2010
  20. Jeff KingFeb 15, 2010
  21. 5/6 am: Fix launching of pagerJonathan Nieder, Feb 15, 2010
  22. Jeff KingFeb 15, 2010
  23. Johannes SixtFeb 15, 2010
  24. 6/6 tests: Add tests for automatic use of pagerJonathan Nieder, Feb 14, 2010
  25. Jeff KingFeb 15, 2010
  26. 6/6 tests: Add tests for automatic use of pagerJonathan Nieder, Feb 15, 2010
  27. Jeff KingFeb 15, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.