Skip to content

Commit 22c15a2

Browse files
authored
Merge pull request #34365 from elibarzilay/fix-exit-code-on-bogus-build-file
Fix exit code on bogus build file
2 parents ab56cc0 + 730a52b commit 22c15a2

File tree

8 files changed

+35
-16
lines changed

8 files changed

+35
-16
lines changed

src/compiler/tsbuild.ts

+9-15
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_OutputsSkupped :
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) {
@@ -1821,7 +1815,7 @@ namespace ts {
18211815

18221816
if (isCircularBuildOrder(buildOrder)) {
18231817
reportErrors(state, buildOrder.circularDiagnostics);
1824-
return ExitStatus.ProjectReferenceCycle_OutputsSkupped;
1818+
return ExitStatus.ProjectReferenceCycle_OutputsSkipped;
18251819
}
18261820

18271821
const { options, host } = state;

src/compiler/types.ts

+3
Original file line numberDiff line numberDiff line change
@@ -3261,6 +3261,9 @@ namespace ts {
32613261
InvalidProject_OutputsSkipped = 3,
32623262

32633263
// When build is skipped because project references form cycle
3264+
ProjectReferenceCycle_OutputsSkipped = 4,
3265+
3266+
/** @deprecated Use ProjectReferenceCycle_OutputsSkipped instead. */
32643267
ProjectReferenceCycle_OutputsSkupped = 4,
32653268
}
32663269

src/testRunner/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
"unittests/tsbuild/demo.ts",
100100
"unittests/tsbuild/emitDeclarationOnly.ts",
101101
"unittests/tsbuild/emptyFiles.ts",
102+
"unittests/tsbuild/exitCodeOnBogusFile.ts",
102103
"unittests/tsbuild/graphOrdering.ts",
103104
"unittests/tsbuild/inferredTypeFromTransitiveModule.ts",
104105
"unittests/tsbuild/javascriptProjectEmit.ts",

src/testRunner/unittests/tsbuild/demo.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ namespace ts {
8888
}
8989
]`
9090
),
91-
expectedExitStatus: ExitStatus.ProjectReferenceCycle_OutputsSkupped,
91+
expectedExitStatus: ExitStatus.ProjectReferenceCycle_OutputsSkipped,
9292
expectedDiagnostics: () => [
9393
getExpectedDiagnosticForProjectsInBuild("src/animals/tsconfig.json", "src/zoo/tsconfig.json", "src/core/tsconfig.json", "src/tsconfig.json"),
9494
errorDiagnostic([
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace ts {
2+
// https://github.com/microsoft/TypeScript/issues/33849
3+
describe("unittests:: tsbuild:: exitCodeOnBogusFile:: test exit code", () => {
4+
verifyTsc({
5+
scenario: "exitCodeOnBogusFile",
6+
subScenario: `test exit code`,
7+
fs: () => loadProjectFromFiles({}, symbolLibContent),
8+
commandLineArgs: ["-b", "bogus.json"]
9+
});
10+
});
11+
}

tests/baselines/reference/api/tsserverlibrary.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1964,6 +1964,8 @@ declare namespace ts {
19641964
DiagnosticsPresent_OutputsSkipped = 1,
19651965
DiagnosticsPresent_OutputsGenerated = 2,
19661966
InvalidProject_OutputsSkipped = 3,
1967+
ProjectReferenceCycle_OutputsSkipped = 4,
1968+
/** @deprecated Use ProjectReferenceCycle_OutputsSkipped instead. */
19671969
ProjectReferenceCycle_OutputsSkupped = 4
19681970
}
19691971
export interface EmitResult {

tests/baselines/reference/api/typescript.d.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1964,6 +1964,8 @@ declare namespace ts {
19641964
DiagnosticsPresent_OutputsSkipped = 1,
19651965
DiagnosticsPresent_OutputsGenerated = 2,
19661966
InvalidProject_OutputsSkipped = 3,
1967+
ProjectReferenceCycle_OutputsSkipped = 4,
1968+
/** @deprecated Use ProjectReferenceCycle_OutputsSkipped instead. */
19671969
ProjectReferenceCycle_OutputsSkupped = 4
19681970
}
19691971
export interface EmitResult {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [/lib/initial-buildOutput.txt]
2+
/lib/tsc -b bogus.json
3+
error TS6053: File '/bogus.json' not found.
4+
exitCode:: 1
5+
6+

0 commit comments

Comments
 (0)