Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Spiers <git@adamspiers.org>2013-04-11 16:05:12 +0400
committerJunio C Hamano <gitster@pobox.com>2013-04-11 22:01:59 +0400
commit0c8e8c080b08632d6dbee33d093b5df648196b49 (patch)
treededeba2b537d31c760c9eb28e6071c4b70870f8b /t/t0008-ignores.sh
parent0006d85c3a2fcbd803ed46cf283fab4e4fae3a7f (diff)
check-ignore: allow incremental streaming of queries via --stdin
Some callers, such as the git-annex web assistant, find it useful to invoke git check-ignore as a persistent background process, which can then have queries fed to its STDIN at any point, and the corresponding response consumed from its STDOUT. For this we need to invoke check_ignore() once per line of standard input, and flush standard output after each result. The above use case suggests that empty STDIN is actually a reasonable scenario (e.g. when the caller doesn't know in advance whether any queries need to be fed to the background process until after it's already started), so we make the minor behavioural change that "no pathspec given." is no longer emitted in when STDIN is empty. Even though check_ignore() could now be changed to operate on a single pathspec, we keep it operating on an array of pathspecs since that is a more convenient way of consuming the existing pathspec API. Signed-off-by: Adam Spiers <git@adamspiers.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t0008-ignores.sh')
-rwxr-xr-xt/t0008-ignores.sh28
1 files changed, 23 insertions, 5 deletions
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index 7af93ba928..fbf12ae4e2 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -216,11 +216,7 @@ test_expect_success_multi 'empty command line' '' '
test_expect_success_multi '--stdin with empty STDIN' '' '
test_check_ignore "--stdin" 1 </dev/null &&
- if test -n "$quiet_opt"; then
- test_stderr ""
- else
- test_stderr "no pathspec given."
- fi
+ test_stderr ""
'
test_expect_success '-q with multiple args' '
@@ -692,5 +688,27 @@ do
'
done
+test_expect_success 'setup: have stdbuf?' '
+ if which stdbuf >/dev/null 2>&1
+ then
+ test_set_prereq STDBUF
+ fi
+'
+
+test_expect_success STDBUF 'streaming support for --stdin' '
+ (
+ echo one
+ sleep 2
+ echo two
+ ) | stdbuf -oL git check-ignore -v -n --stdin >out &
+ pid=$! &&
+ sleep 1 &&
+ grep "^\.gitignore:1:one one" out &&
+ test $( wc -l <out ) = 1 &&
+ sleep 2 &&
+ grep "^:: two" out &&
+ test $( wc -l <out ) = 2 &&
+ ( wait $pid || kill $pid || : ) 2>/dev/null
+'
test_done