From: Adam Spiers <git@adamspiers.org>
To: git list <git@vger.kernel.org>
Subject: [PATCH 3/5] Documentation: add caveats about I/O buffering for check-{attr,ignore}
Date: Thu, 11 Apr 2013 02:59:33 +0100 [thread overview]
Message-ID: <1365645575-11428-3-git-send-email-git@adamspiers.org> (raw)
In-Reply-To: <1365645575-11428-1-git-send-email-git@adamspiers.org>
check-attr and check-ignore have the potential to deadlock callers
which do not read back the output in real-time. For example, if a
caller writes N paths out and then reads N lines back in, it risks
becoming blocked on write() to check-*, and check-* is blocked on
write back to the caller. Somebody has to buffer; the pipe buffers
provide some leeway, but they are limited.
Thanks to Peff for pointing this out:
http://article.gmane.org/gmane.comp.version-control.git/220534
Signed-off-by: Adam Spiers <git@adamspiers.org>
---
Documentation/git-check-attr.txt | 5 +++++
Documentation/git-check-ignore.txt | 5 +++++
Documentation/git.txt | 16 +++++++++-------
3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt
index 5abdbaa..a7be80d 100644
--- a/Documentation/git-check-attr.txt
+++ b/Documentation/git-check-attr.txt
@@ -56,6 +56,11 @@ being queried and <info> can be either:
'set';; when the attribute is defined as true.
<value>;; when a value has been assigned to the attribute.
+Buffering happens as documented under the `GIT_FLUSH` option in
+linkgit:git[1]. The caller is responsible for avoiding deadlocks
+caused by overfilling an input buffer or reading from an empty output
+buffer.
+
EXAMPLES
--------
diff --git a/Documentation/git-check-ignore.txt b/Documentation/git-check-ignore.txt
index 854e4d0..4014d28 100644
--- a/Documentation/git-check-ignore.txt
+++ b/Documentation/git-check-ignore.txt
@@ -66,6 +66,11 @@ are also used instead of colons and hard tabs:
<source> <NULL> <linenum> <NULL> <pattern> <NULL> <pathname> <NULL>
+Buffering happens as documented under the `GIT_FLUSH` option in
+linkgit:git[1]. The caller is responsible for avoiding deadlocks
+caused by overfilling an input buffer or reading from an empty output
+buffer.
+
EXIT STATUS
-----------
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 6a875f2..eecdb15 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -808,13 +808,15 @@ for further details.
'GIT_FLUSH'::
If this environment variable is set to "1", then commands such
- as 'git blame' (in incremental mode), 'git rev-list', 'git log',
- and 'git whatchanged' will force a flush of the output stream
- after each commit-oriented record have been flushed. If this
- variable is set to "0", the output of these commands will be done
- using completely buffered I/O. If this environment variable is
- not set, Git will choose buffered or record-oriented flushing
- based on whether stdout appears to be redirected to a file or not.
+ as 'git blame' (in incremental mode), 'git rev-list', 'git
+ log', 'git check-attr', 'git check-ignore', and 'git
+ whatchanged' will force a flush of the output stream after
+ each commit-oriented record have been flushed. If this
+ variable is set to "0", the output of these commands will be
+ done using completely buffered I/O. If this environment
+ variable is not set, Git will choose buffered or
+ record-oriented flushing based on whether stdout appears to be
+ redirected to a file or not.
'GIT_TRACE'::
If this variable is set to "1", "2" or "true" (comparison
--
1.8.2.1.347.g37e0606
next prev parent reply other threads:[~2013-04-11 1:59 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-08 18:13 RFC: two minor tweaks to check-ignore to help git-annex assistant Adam Spiers
2013-04-08 21:56 ` Junio C Hamano
2013-04-08 22:20 ` Jeff King
2013-04-11 1:59 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Adam Spiers
2013-04-11 1:59 ` [PATCH 2/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11 5:31 ` Jeff King
2013-04-11 10:55 ` Adam Spiers
2013-04-11 11:20 ` Adam Spiers
2013-04-11 18:33 ` Jeff King
2013-04-11 1:59 ` Adam Spiers [this message]
2013-04-11 5:31 ` [PATCH 3/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Jeff King
2013-04-11 1:59 ` [PATCH 4/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11 1:59 ` [PATCH 5/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11 5:25 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() Jeff King
2013-04-11 11:05 ` Adam Spiers
2013-04-11 12:05 ` [PATCH v2 1/5] t0008: remove duplicated test fixture data Adam Spiers
2013-04-11 12:05 ` [PATCH v2 2/5] check-ignore: add -n / --non-matching option Adam Spiers
2013-04-11 12:05 ` [PATCH v2 3/5] check-ignore: move setup into cmd_check_ignore() Adam Spiers
2013-04-11 12:05 ` [PATCH v2 4/5] check-ignore: allow incremental streaming of queries via --stdin Adam Spiers
2013-04-11 19:11 ` Jeff King
2013-04-11 20:31 ` Adam Spiers
2013-04-11 20:40 ` Jeff King
2013-04-22 18:03 ` Junio C Hamano
2013-04-24 8:02 ` Adam Spiers
2013-04-29 22:55 ` [PATCH] t0008: use named pipe (FIFO) to test check-ignore streaming Adam Spiers
2013-04-11 21:04 ` [PATCH v2 4/5] check-ignore: allow incremental streaming of queries via --stdin Aaron Schrab
2013-04-11 22:55 ` Adam Spiers
2013-04-11 12:05 ` [PATCH v2 5/5] Documentation: add caveats about I/O buffering for check-{attr,ignore} Adam Spiers
2013-04-11 18:09 ` Junio C Hamano
2013-04-11 20:12 ` [PATCH v3 " Adam Spiers
2013-04-12 2:12 ` Junio C Hamano
2013-04-12 11:00 ` Adam Spiers
2013-04-11 18:35 ` [PATCH 1/5] check-ignore: move setup into cmd_check_ignore() 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=1365645575-11428-3-git-send-email-git@adamspiers.org \
--to=git@adamspiers.org \
--cc=git@vger.kernel.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 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).