From: Anders Melchiorsen <mail@cup.kalibalik.dk>
To: Linus Torvalds <torvalds@linux-foundation.org>, gitster@pobox.com
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Use line buffering for standard output
Date: Mon, 04 Aug 2008 00:48:51 +0200 [thread overview]
Message-ID: <87hca1ogto.fsf@cup.kalibalik.dk> (raw)
In-Reply-To: <alpine.LFD.1.10.0808031444270.3668@nehalem.linux-foundation.org> (Linus Torvalds's message of "Sun\, 3 Aug 2008 14\:46\:18 -0700 \(PDT\)")
Linus Torvalds <torvalds@linux-foundation.org> writes:
> On Sun, 3 Aug 2008, Anders Melchiorsen wrote:
>>
>> By always setting stdout to line buffering, we make the output work
>> identically for all output devices.
>
> Please don't.
>
> This is a huge peformance issue for things like
>
> git log -p > file
>
> where we really want it to be fully buffered.
>
> So please just find the place where we do a fork() without flushing
> pending output...
Sure. The sledgehammer approach was partly to get some advice on the
proper solution. I now realize that you have generally been careful
about this, and so a single flush should be enough.
Below are two alternative proposals, one local and one global. Both of
them fix the problem for me, but maybe you were even thinking about a
third place?
For the run-command.c one, I was not sure whether to put it inside or
outside the ifdef, and I also was not sure whether to add it for
start_command(). Not having other testcases, and not knowing Windows,
this is the way it ended up.
Cheers,
Anders.
From: Anders Melchiorsen <mail@cup.kalibalik.dk>
Date: Mon, 4 Aug 2008 00:21:49 +0200
Subject: [PATCH] Flush stdout in init-db
Before this change, clone outputs "Initialized empty ..." twice
if output is piped.
Signed-off-by: Anders Melchiorsen <mail@cup.kalibalik.dk>
---
builtin-init-db.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/builtin-init-db.c b/builtin-init-db.c
index baf0d09..954c7e9 100644
--- a/builtin-init-db.c
+++ b/builtin-init-db.c
@@ -315,11 +315,13 @@ int init_db(const char *template_dir, unsigned int flags)
git_config_set("receive.denyNonFastforwards", "true");
}
- if (!(flags & INIT_DB_QUIET))
+ if (!(flags & INIT_DB_QUIET)) {
printf("%s%s Git repository in %s/\n",
reinit ? "Reinitialized existing" : "Initialized empty",
shared_repository ? " shared" : "",
get_git_dir());
+ fflush(stdout);
+ }
return 0;
}
From: Anders Melchiorsen <mail@cup.kalibalik.dk>
Date: Mon, 4 Aug 2008 00:35:40 +0200
Subject: [PATCH] Flush standard output in start_async
This prevents double output in case stdout is redirected.
Signed-off-by: Anders Melchiorsen <mail@cup.kalibalik.dk>
---
run-command.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/run-command.c b/run-command.c
index a3b28a6..67be079 100644
--- a/run-command.c
+++ b/run-command.c
@@ -304,6 +304,9 @@ int start_async(struct async *async)
async->out = pipe_out[0];
#ifndef __MINGW32__
+ /* Flush output before fork() to avoid cloning the buffer */
+ fflush(stdout);
+
async->pid = fork();
if (async->pid < 0) {
error("fork (async) failed: %s", strerror(errno));
next prev parent reply other threads:[~2008-08-03 22:49 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-03 21:26 [PATCH] Use line buffering for standard output Anders Melchiorsen
2008-08-03 21:38 ` Junio C Hamano
2008-08-03 21:46 ` Linus Torvalds
2008-08-03 22:48 ` Anders Melchiorsen [this message]
2008-08-04 0:24 ` Junio C Hamano
2008-08-04 0:30 ` [PATCH] Flush output in start_async Anders Melchiorsen
2008-08-04 5:50 ` [PATCH] Use line buffering for standard output Linus Torvalds
2008-08-04 10:18 ` [PATCH] Add output flushing before fork() Anders Melchiorsen
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=87hca1ogto.fsf@cup.kalibalik.dk \
--to=mail@cup.kalibalik.dk \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=torvalds@linux-foundation.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.