From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Eric Sunshine <sunshine@sunshineco.com>,
Wincent Colaiuta <win@wincent.com>,
Git List <git@vger.kernel.org>
Subject: [PATCH v2 6/7] trailer: use capture_command
Date: Sun, 22 Mar 2015 23:54:00 -0400 [thread overview]
Message-ID: <20150323035400.GF30337@peff.net> (raw)
In-Reply-To: <20150323035302.GA30279@peff.net>
When we read from a trailer.*.command sub-program, the
current code uses run_command followed by a pipe read, which
can result in deadlock (though in practice you would have to
have a large trailer for this to be a problem). The current
code also leaks the file descriptor for the pipe to the
sub-command.
Instead, let's use capture_command, which makes this simpler
(and we can get rid of our custom helper).
Signed-off-by: Jeff King <peff@peff.net>
---
trailer.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/trailer.c b/trailer.c
index 05b3859..4b14a56 100644
--- a/trailer.c
+++ b/trailer.c
@@ -214,16 +214,6 @@ static struct trailer_item *remove_first(struct trailer_item **first)
return item;
}
-static int read_from_command(struct child_process *cp, struct strbuf *buf)
-{
- if (run_command(cp))
- return error("running trailer command '%s' failed", cp->argv[0]);
- if (strbuf_read(buf, cp->out, 1024) < 1)
- return error("reading from trailer command '%s' failed", cp->argv[0]);
- strbuf_trim(buf);
- return 0;
-}
-
static const char *apply_command(const char *command, const char *arg)
{
struct strbuf cmd = STRBUF_INIT;
@@ -240,14 +230,16 @@ static const char *apply_command(const char *command, const char *arg)
cp.argv = argv;
cp.env = local_repo_env;
cp.no_stdin = 1;
- cp.out = -1;
cp.use_shell = 1;
- if (read_from_command(&cp, &buf)) {
+ if (capture_command(&cp, &buf, 1024)) {
+ error("running trailer command '%s' failed", cmd.buf);
strbuf_release(&buf);
result = xstrdup("");
- } else
+ } else {
+ strbuf_trim(&buf);
result = strbuf_detach(&buf, NULL);
+ }
strbuf_release(&cmd);
return result;
--
2.3.3.618.ga041503
next prev parent reply other threads:[~2015-03-23 3:54 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-22 5:56 status hangs trying to get submodule summary Wincent Colaiuta
2015-03-22 7:44 ` [PATCH] status: read submodule process output before calling wait() Jeff King
2015-03-22 8:07 ` Jeff King
2015-03-22 9:59 ` [PATCH 0/7] introduce strbuf_read_cmd to avoid deadlocks Jeff King
2015-03-22 10:00 ` [PATCH 1/7] wt-status: don't flush before running "submodule status" Jeff King
2015-03-22 10:00 ` [PATCH 2/7] wt_status: fix signedness mismatch in strbuf_read call Jeff King
2015-03-22 10:07 ` [PATCH 3/7] strbuf: introduce strbuf_read_cmd helper Jeff King
2015-03-22 19:36 ` Eric Sunshine
2015-03-22 22:54 ` Junio C Hamano
2015-03-22 23:40 ` Junio C Hamano
2015-03-23 3:53 ` [PATCH v2 0/7] introduce capture_command to avoid deadlocks Jeff King
2015-03-23 3:53 ` [PATCH v2 1/7] wt-status: don't flush before running "submodule status" Jeff King
2015-03-23 3:53 ` [PATCH v2 2/7] wt_status: fix signedness mismatch in strbuf_read call Jeff King
2015-03-23 3:53 ` [PATCH v2 3/7] run-command: introduce capture_command helper Jeff King
2015-03-23 3:53 ` [PATCH v2 4/7] wt-status: use capture_command Jeff King
2015-03-23 3:53 ` [PATCH v2 5/7] submodule: " Jeff King
2015-03-23 3:54 ` Jeff King [this message]
2015-03-23 3:54 ` [PATCH v2 7/7] run-command: forbid using run_command with piped output Jeff King
2015-03-23 4:40 ` [PATCH v2 0/7] introduce capture_command to avoid deadlocks Junio C Hamano
2015-03-22 23:34 ` [PATCH 3/7] strbuf: introduce strbuf_read_cmd helper Jeff King
2015-03-22 23:22 ` Junio C Hamano
2015-03-22 23:36 ` Jeff King
2015-03-22 10:08 ` [PATCH 4/7] wt-status: use strbuf_read_cmd Jeff King
2015-03-22 10:08 ` [PATCH 5/7] submodule: " Jeff King
2015-03-22 10:09 ` [PATCH 6/7] trailer: " Jeff King
2015-03-22 10:10 ` [PATCH 7/7] run-command: forbid using run_command with piped output 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=20150323035400.GF30337@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=sunshine@sunshineco.com \
--cc=win@wincent.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.
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 NNTP newsgroup(s).