git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jonathan Nieder <jrnieder@gmail.com>,
	Yuri <yuri@rawbw.com>
Subject: Re: [PATCH 2/3] setup_pager: set MORE=R
Date: Tue, 21 Jan 2014 01:13:07 -0500	[thread overview]
Message-ID: <20140121061307.GE5878@sigill.intra.peff.net> (raw)
In-Reply-To: <xmqq61piw4yf.fsf@gitster.dls.corp.google.com>

On Fri, Jan 17, 2014 at 03:42:32PM -0800, Junio C Hamano wrote:

> 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:

> +	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

  reply	other threads:[~2014-01-21  6:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-17  0:34 'git log' escape symbols shown as ESC[33 and ESC[m Yuri
2014-01-17  1:47 ` Jeff King
2014-01-17  2:02   ` Yuri
2014-01-17  2:13     ` Jeff King
2014-01-17  2:28       ` Yuri
2014-01-17  2:32         ` Jeff King
2014-01-17  2:46           ` Yuri
2014-01-17  2:29       ` Jonathan Nieder
2014-01-17  2:35         ` Jeff King
2014-01-17  3:21           ` Jeff King
2014-01-17  4:14           ` [PATCH 0/3] improved out-of-the-box color settings Jeff King
2014-01-17  4:21             ` [PATCH 1/3] setup_pager: refactor LESS/LV environment setting Jeff King
2014-01-17  4:21             ` [PATCH 2/3] setup_pager: set MORE=R Jeff King
2014-01-17  7:26               ` Kyle J. McKay
2014-01-17 19:11                 ` Junio C Hamano
2014-01-21  5:30                 ` Jeff King
2014-01-21  8:42                   ` Kyle J. McKay
2014-01-23  2:14                     ` Jeff King
2014-01-23 17:22                       ` Junio C Hamano
2014-01-17 19:17               ` Junio C Hamano
2014-01-17 19:57                 ` Junio C Hamano
2014-01-17 23:42                   ` Junio C Hamano
2014-01-21  6:13                     ` Jeff King [this message]
2014-01-21 19:28                       ` Junio C Hamano
2014-01-21  5:49                 ` Jeff King
2014-01-21 19:23                   ` Junio C Hamano
2014-02-04 22:12                     ` Jeff King
2014-02-04 22:17                       ` Junio C Hamano
2014-02-04 22:25                         ` Jeff King
2014-02-04 22:45                           ` Yuri
2014-02-04 22:48                             ` Jeff King
2014-02-04 22:54                               ` Junio C Hamano
2014-02-04 23:00                               ` Yuri
2014-02-05  2:11                       ` Kyle J. McKay
2014-01-17  4:24             ` [PATCH 3/3] pager: disable colors for some known-bad configurations Jeff King
2014-01-17  9:13             ` [PATCH 0/3] improved out-of-the-box color settings Yuri
2014-01-17 20:15   ` 'git log' escape symbols shown as ESC[33 and ESC[m Yuri
2014-02-05  1:24   ` Yuri
2014-02-05  1:33     ` Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140121061307.GE5878@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=yuri@rawbw.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).