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

Re: [PATCH 2/3] setup_pager: set MORE=R

From
Jeff King <peff@peff.net>
Date
Jan 21, 2014, 06:13 UTC
Message-ID
<20140121061307.GE5878@sigill.intra.peff.net>
In-Reply-To
<xmqq61piw4yf.fsf@gitster.dls.corp.google.com>
On Fri, Jan 17, 2014 at 03:42:32PM -0800, Junio C Hamano wrote:
Show 12 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
> 
> > Perhaps we can start it like this.  Then pager.c can iterate over
> > the PAGER_ENV string, parse out LESS=, LV=, etc., and do its thing.
> >
> > We would also need to muck with git-sh-setup.sh but that file is
> > already preprocessed in the Makefile, so we should be able to do
> > something similar to "# @@BROKEN_PATH_FIX@@" there.
> 
> And here is such an attempt.  There may be some missing dependencies
> that need to be covered with a mechanism like GIT-BUILD-OPTIONS,
> though.

Perhaps instead of just dumping it into a macro, we could actually parse it at compile time into C code, and store the result as a header file. Then that header file becomes the proper dependency, and this run-time error:

Show 6 quoted lines
> +	while (*pager_env) {
> +		struct strbuf buf = STRBUF_INIT;
> +		const char *cp = strchrnul(pager_env, '=');
> +
> +		if (!*cp)
> +			die("malformed build-time PAGER_ENV");

would become a compile-time error. We could do the same for the shell code, too.

I'm thinking something like:
diff --git a/Makefile b/Makefile
index b4af1e2..3a8d15e 100644
--- a/Makefile
+++ b/Makefile
@@ -2182,6 +2182,16 @@ GIT-LDFLAGS: FORCE
 		echo "$$FLAGS" >GIT-LDFLAGS; \
             fi
 
+GIT-PAGER-ENV:
+	@PAGER_ENV='$(PAGER_ENV)'; \
+	if test x"$$PAGER_ENV" != x"`cat GIT-PAGER-ENV 2>/dev/null`"; then \
+		echo "$$PAGER_ENV" >GIT-PAGER-ENV; \
+	fi
+
+pager-env.h: GIT-PAGER-ENV mkcarray
+	$(SHELL_PATH) mkcarray pager_env <$< >$@+
+	mv $@+ $@
+
 # We need to apply sq twice, once to protect from the shell
 # that runs GIT-BUILD-OPTIONS, and then again to protect it
 # and the first level quoting from the shell that runs "echo".
diff --git a/mkcarray b/mkcarray
index e69de29..5962440 100644
--- a/mkcarray
+++ b/mkcarray
@@ -0,0 +1,21 @@
+name=$1; shift
+guard=$(echo "$name" | tr a-z A-Z)
+
+cat <<-EOF
+#ifndef ${guard}_H
+#define ${guard}_H
+
+static const char *${name} = {
+EOF
+
+for i in $(cat); do
+	# XXX c-quote the values?
+	printf '\t"%s",\n' "$i"
+done
+
+cat <<EOF
+	NULL
+};
+
+#endif /* ${guard}_H */
+EOF
Previous: Junio C HamanoNext: Junio C Hamano
Message 23 of 39 in “'git log' escape symbols shown as ESC[33 and ESC[m”
  1. YuriJan 17, 2014
  2. Jeff KingJan 17, 2014
  3. YuriJan 17, 2014
  4. Jeff KingJan 17, 2014
  5. YuriJan 17, 2014
  6. Jeff KingJan 17, 2014
  7. YuriJan 17, 2014
  8. Jonathan NiederJan 17, 2014
  9. Jeff KingJan 17, 2014
  10. Jeff KingJan 17, 2014
  11. 0/3 improved out-of-the-box color settingsJeff King, Jan 17, 2014
  12. 1/3 setup_pager: refactor LESS/LV environment settingJeff King, Jan 17, 2014
  13. 2/3 setup_pager: set MORE=RJeff King, Jan 17, 2014
  14. Kyle J. McKayJan 17, 2014
  15. Junio C HamanoJan 17, 2014
  16. Jeff KingJan 21, 2014
  17. Kyle J. McKayJan 21, 2014
  18. Jeff KingJan 23, 2014
  19. Junio C HamanoJan 23, 2014
  20. Junio C HamanoJan 17, 2014
  21. Junio C HamanoJan 17, 2014
  22. Junio C HamanoJan 17, 2014
  23. Jeff KingJan 21, 2014
  24. Junio C HamanoJan 21, 2014
  25. Jeff KingJan 21, 2014
  26. Junio C HamanoJan 21, 2014
  27. Jeff KingFeb 4, 2014
  28. Junio C HamanoFeb 4, 2014
  29. Jeff KingFeb 4, 2014
  30. YuriFeb 4, 2014
  31. Jeff KingFeb 4, 2014
  32. Junio C HamanoFeb 4, 2014
  33. YuriFeb 4, 2014
  34. Kyle J. McKayFeb 5, 2014
  35. 3/3 pager: disable colors for some known-bad configurationsJeff King, Jan 17, 2014
  36. YuriJan 17, 2014
  37. YuriJan 17, 2014
  38. YuriFeb 5, 2014
  39. Jeff KingFeb 5, 2014

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.