Skip to content

Commit cd34808

Browse files
committed
Fixes missing error exit code when a bogus input file is specified
Fixes microsoft#33849.
1 parent f25575e commit cd34808

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

src/compiler/tsbuild.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,31 +1788,25 @@ namespace ts {
17881788

17891789
let reportQueue = true;
17901790
let successfulProjects = 0;
1791-
let errorProjects = 0;
17921791
while (true) {
17931792
const invalidatedProject = getNextInvalidatedProject(state, buildOrder, reportQueue);
17941793
if (!invalidatedProject) break;
17951794
reportQueue = false;
17961795
invalidatedProject.done(cancellationToken);
1797-
if (state.diagnostics.has(invalidatedProject.projectPath)) {
1798-
errorProjects++;
1799-
}
1800-
else {
1801-
successfulProjects++;
1802-
}
1796+
if (!state.diagnostics.has(invalidatedProject.projectPath)) successfulProjects++;
18031797
}
18041798

18051799
disableCache(state);
18061800
reportErrorSummary(state, buildOrder);
18071801
startWatching(state, buildOrder);
18081802

1809-
return isCircularBuildOrder(buildOrder) ?
1810-
ExitStatus.ProjectReferenceCycle_OutputsSkipped :
1811-
errorProjects ?
1812-
successfulProjects ?
1813-
ExitStatus.DiagnosticsPresent_OutputsGenerated :
1814-
ExitStatus.DiagnosticsPresent_OutputsSkipped :
1815-
ExitStatus.Success;
1803+
return isCircularBuildOrder(buildOrder)
1804+
? ExitStatus.ProjectReferenceCycle_OutputsSkipped
1805+
: !buildOrder.some(p => state.diagnostics.has(toResolvedConfigFilePath(state, p)))
1806+
? ExitStatus.Success
1807+
: successfulProjects
1808+
? ExitStatus.DiagnosticsPresent_OutputsGenerated
1809+
: ExitStatus.DiagnosticsPresent_OutputsSkipped;
18161810
}
18171811

18181812
function clean(state: SolutionBuilderState, project?: string, onlyReferences?: boolean) {

src/testRunner/unittests/tsbuild/demo.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,19 @@ namespace ts {
3939

4040
interface VerifyBuild {
4141
modifyDiskLayout: (fs: vfs.FileSystem) => void;
42+
tsconfigs?: readonly string[];
4243
expectedExitStatus: ExitStatus;
4344
expectedDiagnostics: (fs: vfs.FileSystem) => fakes.ExpectedDiagnostic[];
4445
expectedOutputs: readonly string[];
4546
notExpectedOutputs: readonly string[];
4647
}
4748

48-
function verifyBuild({ modifyDiskLayout, expectedExitStatus, expectedDiagnostics, expectedOutputs, notExpectedOutputs }: VerifyBuild) {
49+
function verifyBuild({ modifyDiskLayout, tsconfigs = ["/src/tsconfig.json"],
50+
expectedExitStatus, expectedDiagnostics, expectedOutputs, notExpectedOutputs }: VerifyBuild) {
4951
const fs = projFs.shadow();
5052
const host = fakes.SolutionBuilderHost.create(fs);
5153
modifyDiskLayout(fs);
52-
const builder = createSolutionBuilder(host, ["/src/tsconfig.json"], { verbose: true });
54+
const builder = createSolutionBuilder(host, tsconfigs, { verbose: true });
5355
const exitStatus = builder.build();
5456
assert.equal(exitStatus, expectedExitStatus);
5557
host.assertDiagnosticMessages(...expectedDiagnostics(fs));
@@ -156,5 +158,19 @@ namespace ts {
156158
notExpectedOutputs: [...coreOutputs(), ...animalOutputs(), ...zooOutputs()]
157159
});
158160
});
161+
162+
it("returns an error exit in case of a bogus file", () => {
163+
verifyBuild({
164+
modifyDiskLayout: noop,
165+
tsconfigs: ["bogus.json"],
166+
expectedExitStatus: ExitStatus.DiagnosticsPresent_OutputsSkipped,
167+
expectedDiagnostics: _ => [
168+
getExpectedDiagnosticForProjectsInBuild("bogus.json"),
169+
errorDiagnostic([Diagnostics.File_0_not_found, "/bogus.json"]),
170+
],
171+
expectedOutputs: emptyArray,
172+
notExpectedOutputs: [...coreOutputs(), ...animalOutputs(), ...zooOutputs()]
173+
});
174+
});
159175
});
160176
}

0 commit comments

Comments
 (0)