From ce490e1c778999d5030599a9984bfea6e1f6d752 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 15 Mar 2019 15:43:04 -0700 Subject: [PATCH] Check oldest output time with tsconfig time to see if its out of date Fixes #26503 --- src/compiler/tsbuild.ts | 11 +++++++++++ src/testRunner/unittests/tsbuild/sample.ts | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/compiler/tsbuild.ts b/src/compiler/tsbuild.ts index c649665cf72..cc27aa2c975 100644 --- a/src/compiler/tsbuild.ts +++ b/src/compiler/tsbuild.ts @@ -792,6 +792,17 @@ namespace ts { newerInputFileName: newestInputFileName }; } + else { + // Check tsconfig time + const tsconfigTime = host.getModifiedTime(project.options.configFilePath!) || missingFileModifiedTime; + if (oldestOutputFileTime < tsconfigTime) { + return { + type: UpToDateStatusType.OutOfDateWithSelf, + outOfDateOutputFileName: oldestOutputFileName, + newerInputFileName: project.options.configFilePath! + }; + } + } if (!buildInfoChecked.hasKey(project.options.configFilePath as ResolvedConfigFileName)) { buildInfoChecked.setValue(project.options.configFilePath as ResolvedConfigFileName, true); diff --git a/src/testRunner/unittests/tsbuild/sample.ts b/src/testRunner/unittests/tsbuild/sample.ts index c225840a564..49f9f7aa7e0 100644 --- a/src/testRunner/unittests/tsbuild/sample.ts +++ b/src/testRunner/unittests/tsbuild/sample.ts @@ -254,6 +254,20 @@ namespace ts { [Diagnostics.Building_project_0, "/src/tests/tsconfig.json"], ); }); + + it("rebuilds when tsconfig changes", () => { + const { fs, host, builder } = initializeWithBuild(); + replaceText(fs, "/src/tests/tsconfig.json", `"composite": true`, `"composite": true, "target": "es3"`); + builder.buildAllProjects(); + host.assertDiagnosticMessages( + getExpectedDiagnosticForProjectsInBuild("src/core/tsconfig.json", "src/logic/tsconfig.json", "src/tests/tsconfig.json"), + [Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2, "src/core/tsconfig.json", "src/core/anotherModule.ts", "src/core/anotherModule.js"], + [Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2, "src/logic/tsconfig.json", "src/logic/index.ts", "src/logic/index.js"], + [Diagnostics.Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2, "src/tests/tsconfig.json", "src/tests/index.js", "src/tests/tsconfig.json"], + [Diagnostics.Building_project_0, "/src/tests/tsconfig.json"], + [Diagnostics.Updating_unchanged_output_timestamps_of_project_0, "/src/tests/tsconfig.json"] + ); + }); }); describe("downstream-blocked compilations", () => {