Skip to content

Commit 30c7a7a

Browse files
authored
Emit end event on streams when process fails (#518)
1 parent 1f7677c commit 30c7a7a

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

lib/stream.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ export const makeAllStream = (spawned, {all}) => {
3636

3737
// On failure, `result.stdout|stderr|all` should contain the currently buffered stream
3838
const getBufferedData = async (stream, streamPromise) => {
39-
if (!stream) {
39+
// When `buffer` is `false`, `streamPromise` is `undefined` and there is no buffered data to retrieve
40+
if (!stream || streamPromise === undefined) {
4041
return;
4142
}
4243

test/stream.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import fs from 'node:fs';
44
import Stream from 'node:stream';
55
import test from 'ava';
66
import getStream from 'get-stream';
7+
import {pEvent} from 'p-event';
78
import tempfile from 'tempfile';
89
import {execa, execaSync} from '../index.js';
910
import {setFixtureDir} from './helpers/fixtures-dir.js';
@@ -173,6 +174,11 @@ test('buffer: false > promise rejects when process returns non-zero', async t =>
173174
t.is(exitCode, 2);
174175
});
175176

177+
test('buffer: false > emits end event when promise is rejected', async t => {
178+
const subprocess = execa('wrong command', {buffer: false, reject: false});
179+
await t.notThrowsAsync(Promise.all([subprocess, pEvent(subprocess.stdout, 'end')]));
180+
});
181+
176182
test('can use all: true with stdout: ignore', async t => {
177183
await t.notThrowsAsync(execa('max-buffer.js', {buffer: false, stdout: 'ignore', all: true}));
178184
});

0 commit comments

Comments
 (0)