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

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

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Feb 15, 2010, 02:59 UTC
Message-ID
<20100215025958.GB17444@progeny.tock>
In-Reply-To
<20100214120731.GE3499@progeny.tock>
The git_pager() function used 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.

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.

If GIT_PAGER is set to the empty string, pagination is disabled. This is different from the treatment of GIT_EDITOR by git_editor(), but consistency with the use of GIT_PAGER by git builtins is more important.

Acked-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Jonathan Nieder wrote:
Show 6 quoted lines
> +		if tty <&1 >/dev/null 2>/dev/null
> +		then
> +			GIT_PAGER=cat
> +		else
> +			GIT_PAGER=$(git var GIT_PAGER)
> +		fi
This was backwards.  *sigh*

Here’s a tested version. Junio, I carried over your Ack, but please feel free to revoke it.

 git-am.sh       |    5 +----
 git-sh-setup.sh |   16 ++++++++++++++++
 2 files changed, 17 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..4500c12 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -107,6 +107,22 @@ git_editor() {
 	eval "$GIT_EDITOR" '"$@"'
 }
 
+git_pager() {
+	if test -z "${GIT_PAGER+set}"
+	then
+		if tty <&1 >/dev/null 2>/dev/null
+		then
+			GIT_PAGER=$(git var GIT_PAGER)
+		else
+			GIT_PAGER=cat
+		fi
+	fi
+	: ${LESS=-FRSX}
+	export LESS
+
+	eval "$GIT_PAGER" '"$@"'
+}
+
 sane_grep () {
 	GREP_OPTIONS= LC_ALL=C grep "$@"
 }
-- 
1.7.0
Previous: Junio C HamanoNext: Jonathan Nieder
Message 18 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.