0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

fix(cli/js/process): Always return a code in ProcessStatus (#5244)

This commit is contained in:
Nayeem Rahman 2020-06-10 16:10:08 +01:00 committed by GitHub
parent 4b7d3b060e
commit 8f050355ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 14 deletions

View file

@ -21,10 +21,11 @@ async function runStatus(rid: number): Promise<ProcessStatus> {
if (res.gotSignal) {
const signal = res.exitSignal;
return { signal, success: false };
return { success: false, code: 128 + signal, signal };
} else if (res.exitCode != 0) {
return { success: false, code: res.exitCode };
} else {
const code = res.exitCode;
return { code, success: code === 0 };
return { success: true, code: 0 };
}
}
@ -92,11 +93,17 @@ export class Process<T extends RunOptions = RunOptions> {
}
}
export interface ProcessStatus {
success: boolean;
code?: number;
signal?: number; // TODO: Make this a string, e.g. 'SIGTERM'.
}
export type ProcessStatus =
| {
success: true;
code: 0;
signal?: undefined;
}
| {
success: false;
code: number;
signal?: number;
};
function isRid(arg: unknown): arg is number {
return !isNaN(arg as number);

View file

@ -66,7 +66,7 @@ unitTest(
});
const status = await p.status();
assertEquals(status.success, false);
assertEquals(status.code, undefined);
assertEquals(status.code, 128 + 9);
assertEquals(status.signal, 9);
p.close();
}
@ -358,11 +358,15 @@ unitTest({ perms: { run: true } }, async function killSuccess(): Promise<void> {
const status = await p.status();
assertEquals(status.success, false);
// TODO(ry) On Linux, status.code is sometimes undefined and sometimes 1.
// The following assert is causing this test to be flaky. Investigate and
// re-enable when it can be made deterministic.
// assertEquals(status.code, 1);
// assertEquals(status.signal, Deno.Signal.SIGINT);
try {
assertEquals(status.code, 128 + Deno.Signal.SIGINT);
assertEquals(status.signal, Deno.Signal.SIGINT);
} catch {
// TODO(nayeemrmn): On Windows sometimes the following values are given
// instead. Investigate and remove this catch when fixed.
assertEquals(status.code, 1);
assertEquals(status.signal, undefined);
}
p.close();
});