From: Junio C Hamano <gitster@pobox•com>
To: Jeff King <peff@peff•net>
Cc: "Eric Wong" <e@80x24•org>, "Kyle J. McKay" <mackyle@gmail•com>,
git@vger•kernel.org,
"brian m. carlson" <sandals@crustytoothpaste•net>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail•com>,
"Jakub Narębski" <jnareb@gmail•com>
Subject: Re: [PATCH 1/1 v2] pager: move pager-specific setup into the build
Date: Wed, 03 Aug 2016 13:57:09 -0700 [thread overview]
Message-ID: <xmqq4m718tay.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20160803161911.dxucq7f2pvnoovoc@sigill.intra.peff.net> (Jeff King's message of "Wed, 3 Aug 2016 12:19:11 -0400")
Jeff King <peff@peff•net> writes:
> On Mon, Aug 01, 2016 at 09:49:37PM +0000, Eric Wong wrote:
>
> You'd want:
>
> argv_array_pushf(env, "%.*s", (int)(cp - pager_env), pager_env);
>
> Also:
>
>> + strbuf_reset(&buf);
>
> should this be strbuf_release()? If we didn't follow the conditional
> above (because getenv() told us the variable was already set), then we
> would not do do the detach/release there, and would finish the loop with
> memory still allocated by "buf".
All bugs are from my original, I think. Here is a proposed squash.
* This shouldn't make much difference for @@PAGER_ENV@@, but not
quoting the default assignment, i.e.
: "${VAR=VAL}" && export VAR
is bad manners. cf. 01247e02 (sh-setup: enclose setting of
${VAR=default} in double-quotes, 2016-06-19)
* Again, this shouldn't make much difference for PAGER_ENV, but
let's follow the "reset per iteration, release at the end"
pattern to avoid repeated allocation.
* Let's avoid a hand-rolled "skip blanks" loop and let strspn() do
it.
git-sh-setup.sh | 2 +-
| 15 ++++++---------
2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index b6b75e9..cda32d0 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -163,7 +163,7 @@ git_pager() {
for vardef in @@PAGER_ENV@@
do
var=${vardef%%=*}
- eval ": \${$vardef} && export $var"
+ eval ": \"\${$vardef}\" && export $var"
done
eval "$GIT_PAGER" '"$@"'
--git a/pager.c b/pager.c
index cd1ac54..7199c31 100644
--- a/pager.c
+++ b/pager.c
@@ -66,25 +66,22 @@ const char *git_pager(int stdout_is_tty)
static void setup_pager_env(struct argv_array *env)
{
const char *pager_env = PAGER_ENV;
+ struct strbuf buf = STRBUF_INIT;
while (*pager_env) {
- struct strbuf buf = STRBUF_INIT;
const char *cp = strchrnul(pager_env, '=');
if (!*cp)
die("malformed build-time PAGER_ENV");
strbuf_add(&buf, pager_env, cp - pager_env);
cp = strchrnul(pager_env, ' ');
- if (!getenv(buf.buf)) {
- strbuf_reset(&buf);
- strbuf_add(&buf, pager_env, cp - pager_env);
- argv_array_push(env, strbuf_detach(&buf, NULL));
- }
+ if (!getenv(buf.buf))
+ argv_array_pushf(env, "%.*s",
+ (int)(cp - pager_env), pager_env);
+ pager_env = cp + strspn(cp, " ");
strbuf_reset(&buf);
- while (*cp && *cp == ' ')
- cp++;
- pager_env = cp;
}
+ strbuf_release(&buf);
}
void prepare_pager_args(struct child_process *pager_process, const char *pager)
next prev parent reply other threads:[~2016-08-03 21:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-01 1:05 [PATCH 0/2] add PAGER_ENV to build and core.pagerEnv to config Eric Wong
2016-08-01 1:05 ` [PATCH 1/2] pager: move pager-specific setup into the build Eric Wong
2016-08-01 1:43 ` brian m. carlson
2016-08-01 7:00 ` Eric Wong
2016-08-01 8:57 ` Jakub Narębski
2016-08-01 10:40 ` brian m. carlson
2016-08-01 17:24 ` Jeff King
2016-08-01 18:07 ` Junio C Hamano
2016-08-01 17:46 ` Duy Nguyen
2016-08-01 17:52 ` Jeff King
2016-08-01 18:01 ` Duy Nguyen
2016-08-01 18:07 ` Jeff King
2016-08-01 1:05 ` [PATCH 2/2] pager: implement core.pagerEnv in config Eric Wong
2016-08-01 17:28 ` Jeff King
2016-08-01 21:49 ` [PATCH 0/1 v2] add PAGER_ENV to build Eric Wong
2016-08-01 21:49 ` [PATCH 1/1 v2] pager: move pager-specific setup into the build Eric Wong
2016-08-01 23:03 ` Junio C Hamano
2016-08-01 23:46 ` Jeff King
2016-08-02 21:14 ` Junio C Hamano
2016-08-01 23:56 ` Eric Wong
2016-08-02 21:15 ` Junio C Hamano
2016-08-03 16:19 ` Jeff King
2016-08-03 20:57 ` Junio C Hamano [this message]
2016-08-03 21:08 ` Eric Wong
2016-08-03 21:15 ` Junio C Hamano
2016-08-04 3:43 ` [PATCH v3] " Eric Wong
2016-08-04 5:34 ` Jeff King
2016-08-04 11:34 ` Eric Wong
2016-08-04 17:53 ` Jeff King
2016-08-04 11:40 ` [PATCH v4] " Eric Wong
2016-08-03 21:09 ` [PATCH 1/1 v2] " Jeff King
2016-08-01 21:59 ` [PATCH 0/1 v2] add PAGER_ENV to build 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq4m718tay.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=e@80x24$(echo .)org \
--cc=git@vger$(echo .)kernel.org \
--cc=jnareb@gmail$(echo .)com \
--cc=mackyle@gmail$(echo .)com \
--cc=pclouds@gmail$(echo .)com \
--cc=peff@peff$(echo .)net \
--cc=sandals@crustytoothpaste$(echo .)net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox