From e34f51445b6036d08f5ff0e6c6bb527481fb5d79 Mon Sep 17 00:00:00 2001 From: Geoffrey Goh Date: Fri, 5 Feb 2016 16:54:15 -0800 Subject: [PATCH] fix ios install to overwrite pending --- CodePush.h | 1 + CodePush.m | 1 + CodePushPackage.m | 34 ++++++++++++++++++++++++---------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/CodePush.h b/CodePush.h index 34e191c..57e0770 100644 --- a/CodePush.h +++ b/CodePush.h @@ -69,6 +69,7 @@ failCallback:(void (^)(NSError *err))failCallback; @interface CodePushPackage : NSObject + (void)installPackage:(NSDictionary *)updatePackage + removePendingUpdate:(BOOL)removePendingUpdate error:(NSError **)error; + (NSDictionary *)getCurrentPackage:(NSError **)error; diff --git a/CodePush.m b/CodePush.m index 317e310..193fdbb 100644 --- a/CodePush.m +++ b/CodePush.m @@ -446,6 +446,7 @@ RCT_EXPORT_METHOD(installUpdate:(NSDictionary*)updatePackage dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError *error; [CodePushPackage installPackage:updatePackage + removePendingUpdate:[self isPendingUpdate:nil] error:&error]; if (error) { diff --git a/CodePushPackage.m b/CodePushPackage.m index 20ed64a..ae0b973 100644 --- a/CodePushPackage.m +++ b/CodePushPackage.m @@ -449,6 +449,7 @@ NSString * const UnzippedFolderName = @"unzipped"; } + (void)installPackage:(NSDictionary *)updatePackage + removePendingUpdate:(BOOL)removePendingUpdate error:(NSError **)error { NSString *packageHash = updatePackage[@"packageHash"]; @@ -458,19 +459,32 @@ NSString * const UnzippedFolderName = @"unzipped"; return; } - NSString *previousPackageHash = [self getPreviousPackageHash:error]; - if (!*error && previousPackageHash && ![previousPackageHash isEqualToString:packageHash]) { - NSString *previousPackageFolderPath = [self getPackageFolderPath:previousPackageHash]; - // Error in deleting old package will not cause the entire operation to fail. - NSError *deleteError; - [[NSFileManager defaultManager] removeItemAtPath:previousPackageFolderPath - error:&deleteError]; - if (deleteError) { - NSLog(@"Error deleting old package: %@", deleteError); + if (!removePendingUpdate) { + NSString *currentPackageFolderPath = [self getCurrentPackageFolderPath:error]; + if (!*error && currentPackageFolderPath) { + // Error in deleting pending package will not cause the entire operation to fail. + NSError *deleteError; + [[NSFileManager defaultManager] removeItemAtPath:currentPackageFolderPath + error:&deleteError]; + if (deleteError) { + NSLog(@"Error deleting pending package: %@", deleteError); + } } + } else { + NSString *previousPackageHash = [self getPreviousPackageHash:error]; + if (!*error && previousPackageHash && ![previousPackageHash isEqualToString:packageHash]) { + NSString *previousPackageFolderPath = [self getPackageFolderPath:previousPackageHash]; + // Error in deleting old package will not cause the entire operation to fail. + NSError *deleteError; + [[NSFileManager defaultManager] removeItemAtPath:previousPackageFolderPath + error:&deleteError]; + if (deleteError) { + NSLog(@"Error deleting old package: %@", deleteError); + } + } + [info setValue:info[@"currentPackage"] forKey:@"previousPackage"]; } - [info setValue:info[@"currentPackage"] forKey:@"previousPackage"]; [info setValue:packageHash forKey:@"currentPackage"]; [self updateCurrentPackageInfo:info