diff --git a/lib/services/project-changes-service.ts b/lib/services/project-changes-service.ts index 5fbfa2a892..08c87a3df5 100644 --- a/lib/services/project-changes-service.ts +++ b/lib/services/project-changes-service.ts @@ -68,6 +68,7 @@ export class ProjectChangesService implements IProjectChangesService { path.join(projectData.projectDir, NODE_MODULES_FOLDER_NAME, "tns-ios-inspector"), projectData, this.fileChangeRequiresBuild); + if (this._newFiles > 0) { this._changesInfo.modulesChanged = true; } @@ -218,6 +219,11 @@ export class ProjectChangesService implements IProjectChangesService { } private containsNewerFiles(dir: string, skipDir: string, projectData: IProjectData, processFunc?: (filePath: string, projectData: IProjectData) => boolean): boolean { + const dirFileStat = this.$fs.getFsStats(dir); + if (this.isFileModified(dirFileStat, dir)) { + return true; + } + let files = this.$fs.readDirectory(dir); for (let file of files) { let filePath = path.join(dir, file); @@ -225,13 +231,8 @@ export class ProjectChangesService implements IProjectChangesService { continue; } - let fileStats = this.$fs.getFsStats(filePath); - - let changed = fileStats.mtime.getTime() >= this._outputProjectMtime || fileStats.ctime.getTime() >= this._outputProjectCTime; - if (!changed) { - let lFileStats = this.$fs.getLsStats(filePath); - changed = lFileStats.mtime.getTime() >= this._outputProjectMtime || lFileStats.ctime.getTime() >= this._outputProjectCTime; - } + const fileStats = this.$fs.getFsStats(filePath); + let changed = this.isFileModified(fileStats, filePath); if (changed) { if (processFunc) { @@ -250,10 +251,24 @@ export class ProjectChangesService implements IProjectChangesService { return true; } } + } return false; } + private isFileModified(filePathStat: IFsStats, filePath: string): boolean { + let changed = filePathStat.mtime.getTime() >= this._outputProjectMtime || + filePathStat.ctime.getTime() >= this._outputProjectCTime; + + if (!changed) { + let lFileStats = this.$fs.getLsStats(filePath); + changed = lFileStats.mtime.getTime() >= this._outputProjectMtime || + lFileStats.ctime.getTime() >= this._outputProjectCTime; + } + + return changed; + } + private fileChangeRequiresBuild(file: string, projectData: IProjectData) { if (path.basename(file) === "package.json") { return true; diff --git a/test/project-changes-service.ts b/test/project-changes-service.ts index 3593400340..cc29656ebd 100644 --- a/test/project-changes-service.ts +++ b/test/project-changes-service.ts @@ -26,7 +26,6 @@ class ProjectChangesServiceTest extends BaseServiceTest { this.injector.register("platformsData", PlatformsData); this.injector.register("androidProjectService", {}); this.injector.register("iOSProjectService", {}); - this.injector.register("fs", FileSystem); this.injector.register("devicePlatformsConstants", {}); this.injector.register("devicePlatformsConstants", {});