summaryrefslogtreecommitdiff
path: root/t/t7519
diff options
context:
space:
mode:
authorLibravatar Alex Vandiver <alexmv@dropbox.com>2017-10-03 23:27:46 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-10-04 18:58:53 +0900
commit2a387b17c5bc5e0872bed352a41a2b312ea86f9b (patch)
tree28e39bf1dc1bbff4003023509b0222b86b4c6f2c /t/t7519
parentfsmonitor: MINGW support for watchman integration (diff)
downloadtgif-2a387b17c5bc5e0872bed352a41a2b312ea86f9b.tar.xz
fsmonitor: read entirety of watchman output
In Perl, setting $/ sets the string that is used as the "record separator," which sets the boundary that the `<>` construct reads to. Setting `local $/ = 0666;` evaluates the octal, getting 438, and stringifies it. Thus, the later read from `<CHLD_OUT>` stops as soon as it encounters the string "438" in the watchman output, yielding invalid JSON; repositories containing filenames with SHA1 hashes are able to trip this easily. Set `$/` to undefined, thus slurping all output from watchman. Also close STDIN which is provided to watchman, to better guarantee that we cannot deadlock with watchman while both attempting to read. Signed-off-by: Alex Vandiver <alexmv@dropbox.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t7519')
-rwxr-xr-xt/t7519/fsmonitor-watchman6
1 files changed, 2 insertions, 4 deletions
diff --git a/t/t7519/fsmonitor-watchman b/t/t7519/fsmonitor-watchman
index cca3d71e90..51330f8b3d 100755
--- a/t/t7519/fsmonitor-watchman
+++ b/t/t7519/fsmonitor-watchman
@@ -50,9 +50,6 @@ launch_watchman();
sub launch_watchman {
- # Set input record separator
- local $/ = 0666;
-
my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j')
or die "open2() failed: $!\n" .
"Falling back to scanning...\n";
@@ -83,7 +80,8 @@ sub launch_watchman {
close $fh;
print CHLD_IN $query;
- my $response = <CHLD_OUT>;
+ close CHLD_IN;
+ my $response = do {local $/; <CHLD_OUT>};
open ($fh, ">", ".git/watchman-response.json");
print $fh $response;