From 24c43017d8170d2e7890ab4d6d7d8d5c68c801f5 Mon Sep 17 00:00:00 2001 From: Fatme Havaluova Date: Thu, 27 Aug 2015 19:06:17 +0300 Subject: [PATCH] Fix platform update If the new version of runtime is not cached, tns platform update throws an error Fixes https://github.com/NativeScript/nativescript-cli/issues/772 --- lib/services/platform-service.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/services/platform-service.ts b/lib/services/platform-service.ts index 03f58508e5..8e3bd313ee 100644 --- a/lib/services/platform-service.ts +++ b/lib/services/platform-service.ts @@ -414,6 +414,8 @@ export class PlatformService implements IPlatformService { let currentVersion = data && data.version ? data.version : "0.2.0"; let newVersion = version || this.$npmInstallationManager.getLatestVersion(platformData.frameworkPackageName).wait(); + this.ensurePackageIsCached(platformData.frameworkPackageName, newVersion).wait(); + if(platformData.platformProjectService.canUpdatePlatform(currentVersion, newVersion).wait()) { if(!semver.valid(newVersion)) { @@ -488,7 +490,6 @@ export class PlatformService implements IPlatformService { private getFrameworkFiles(platformData: IPlatformData, version: string): IFuture { return (() => { let cachedPackagePath = this.$npmInstallationManager.getCachedPackagePath(platformData.frameworkPackageName, version); - this.ensurePackageIsCached(cachedPackagePath, platformData.frameworkPackageName, version).wait(); let allFiles = this.$fs.enumerateFilesInDirectorySync(cachedPackagePath); let filteredFiles = _.filter(allFiles, file => _.contains(platformData.frameworkFilesExtensions, path.extname(file))); @@ -504,9 +505,10 @@ export class PlatformService implements IPlatformService { }).future()(); } - private ensurePackageIsCached(cachedPackagePath: string, packageName: string, version: string): IFuture { + private ensurePackageIsCached(packageName: string, version: string): IFuture { return (() => { this.$npmInstallationManager.addToCache(packageName, version).wait(); + let cachedPackagePath = this.$npmInstallationManager.getCachedPackagePath(packageName, version); if(!this.$fs.exists(path.join(cachedPackagePath, constants.PROJECT_FRAMEWORK_FOLDER_NAME)).wait()) { // In some cases the package is not fully downloaded and the framework directory is missing // Try removing the old package and add the real one to cache again