From: Jeff King <peff@peff•net>
To: Johannes Schindelin <Johannes.Schindelin@gmx•de>
Cc: gitster@pobox•com, git@vger•kernel.org
Subject: Re: [PATCH v2 1/2] Clean stale environment pointer in finish_command()
Date: Mon, 10 Nov 2014 22:16:36 -0500 [thread overview]
Message-ID: <20141111031636.GE21328@peff.net> (raw)
In-Reply-To: <alpine.DEB.1.00.1411101539091.13845@s15462909.onlinehome-server.info>
On Mon, Nov 10, 2014 at 03:41:09PM +0100, Johannes Schindelin wrote:
> > However, start_command() will set "env" to env_array.argv only if "env"
> > was unset to begin with, and if it was already set, the caller will need
> > the original value. Therefore, we need to be very careful only to reset
> > "env" in finish_command() when it has been initialized in start_command().
>
> In case it was unclear: this is needed for the the suggested switch from the
> previous method to construct the environment to the new env_array method
> to work.
>
> (The env_array method unfortunately requires the code to initialize the
> environment twice because finish_command() insists on always releasing the
> env_array, even if the caller may want to reuse the generated array).
I don't think this is "unfortunately"; freeing the memory was the entire
purpose in adding env_array. If you want to easily reuse the same
environment in multiple commands, it is still perfectly fine to use
"env" directly, like:
struct argv_array env = ARGV_ARRAY_INIT;
struct child_process one = CHILD_PROCESS_INIT;
struct child_process two = CHILD_PROCESS_INIT;
... setup env with argv_array_push ...
one.argv = foo;
one.env = env.argv;
run_command(&one);
two.argv = bar;
two.env = env.argv;
run_command(&two);
argv_array_clear(&env);
You do not get the benefit of the auto-cleanup (you have to call
argv_array_clear yourself), but that is less bad than repeating the
setup of "env" twice.
It may be that Documentation/technical/api-run-command.txt needs to
make this more explicit (I just read over it and it looks OK to me. But
since I am the one who designed the feature, I am not the best test of
whether it is sufficiently clear).
-Peff
next prev parent reply other threads:[~2014-11-11 3:16 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-07 13:58 [PATCH 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-07 13:58 ` [PATCH 1/2] Add a few more values for receive.denyCurrentBranch Johannes Schindelin
2014-11-07 18:49 ` Junio C Hamano
2014-11-07 18:58 ` Johannes Schindelin
2014-11-10 12:54 ` Johannes Schindelin
2014-11-10 16:00 ` Junio C Hamano
2014-11-12 11:13 ` Johannes Schindelin
2014-11-12 18:00 ` Junio C Hamano
2014-11-08 11:18 ` Jeff King
2014-11-08 18:48 ` brian m. carlson
2014-11-10 13:03 ` Johannes Schindelin
2014-11-07 13:58 ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Johannes Schindelin
2014-11-07 19:20 ` Junio C Hamano
2014-11-09 16:42 ` Jens Lehmann
2014-11-10 13:04 ` Johannes Schindelin
2014-11-10 13:01 ` Johannes Schindelin
2014-11-10 15:42 ` Junio C Hamano
2014-11-10 19:32 ` Junio C Hamano
2014-11-12 11:09 ` Johannes Schindelin
2014-11-12 17:59 ` Junio C Hamano
2014-11-13 10:29 ` Johannes Schindelin
2014-11-13 10:38 ` Johannes Schindelin
2014-11-13 17:41 ` Junio C Hamano
2014-11-13 18:55 ` Johannes Schindelin
2014-11-13 19:48 ` Junio C Hamano
2014-11-13 21:06 ` Junio C Hamano
2014-11-14 7:49 ` Junio C Hamano
2014-12-02 3:24 ` Junio C Hamano
2014-12-02 3:25 ` [PATCH 2/2] receive-pack: support push-to-checkout hook Junio C Hamano
2014-12-02 8:47 ` Johannes Schindelin
2014-12-02 13:03 ` Michael J Gruber
2014-12-02 13:25 ` Johannes Schindelin
2014-12-02 16:39 ` Junio C Hamano
2014-12-02 16:45 ` Johannes Schindelin
2014-12-02 17:00 ` Junio C Hamano
2014-12-02 17:12 ` Johannes Schindelin
2014-12-02 17:19 ` Junio C Hamano
2014-11-13 17:41 ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Junio C Hamano
2014-11-12 11:06 ` Johannes Schindelin
2014-11-10 14:38 ` [PATCH v2 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-13 11:03 ` [PATCH v3 0/1] " Johannes Schindelin
2014-11-13 11:03 ` [PATCH v3 1/1] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-13 17:51 ` Junio C Hamano
2014-11-13 19:21 ` Johannes Schindelin
2014-11-13 17:47 ` [PATCH v3 0/1] Support updating working trees when pushing into non-bare repos Junio C Hamano
2014-11-13 19:11 ` Junio C Hamano
2014-11-13 19:18 ` Johannes Schindelin
2014-11-26 20:21 ` [PATCH v4] " Johannes Schindelin
2014-11-26 20:21 ` [PATCH v4] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-26 21:02 ` Junio C Hamano
2014-11-26 22:44 ` [PATCH v5] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-26 22:44 ` [PATCH v5] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-12-01 3:18 ` Junio C Hamano
2014-12-01 7:44 ` Johannes Schindelin
2014-12-01 23:49 ` Junio C Hamano
2014-12-02 0:51 ` Junio C Hamano
2014-12-02 8:21 ` Johannes Schindelin
2014-12-02 16:20 ` Junio C Hamano
2014-12-02 16:51 ` Johannes Schindelin
2014-12-02 17:23 ` Junio C Hamano
[not found] ` <cover.1415630072.git.johannes.schindelin@gmx.de>
2014-11-10 14:38 ` [PATCH v2 1/2] Clean stale environment pointer in finish_command() Johannes Schindelin
2014-11-10 14:41 ` Johannes Schindelin
2014-11-11 3:16 ` Jeff King [this message]
2014-11-11 15:55 ` Junio C Hamano
2014-11-12 10:45 ` Johannes Schindelin
2014-11-12 10:52 ` Jeff King
2014-11-12 10:59 ` Jeff King
2014-11-12 16:17 ` Junio C Hamano
2014-11-10 21:44 ` Junio C Hamano
2014-11-11 3:11 ` Jeff King
2014-11-10 14:38 ` [PATCH v2 2/2] Add a few more options for receive.denyCurrentBranch Johannes Schindelin
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=20141111031636.GE21328@peff.net \
--to=peff@peff$(echo .)net \
--cc=Johannes.Schindelin@gmx$(echo .)de \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
/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