Skip to content

Commit 23b06df

Browse files
committed
fix(AppResources): try recover if resources update fails
1 parent 4948f83 commit 23b06df

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

lib/services/android-resources-migration-service.ts

+33-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import * as path from "path";
2-
import * as shell from "shelljs";
32
import * as constants from "../constants";
3+
import { EOL } from "os";
44

55
export class AndroidResourcesMigrationService implements IAndroidResourcesMigrationService {
66
private static ANDROID_DIR = "Android";
77
private static ANDROID_DIR_TEMP = "Android-Updated";
88
private static ANDROID_DIR_OLD = "Android-Pre-v4";
99

1010
constructor(private $fs: IFileSystem,
11+
private $errors: IErrors,
1112
private $logger: ILogger,
1213
private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants) { }
1314

@@ -22,6 +23,25 @@ export class AndroidResourcesMigrationService implements IAndroidResourcesMigrat
2223
public async migrate(appResourcesDir: string): Promise<void> {
2324
const originalAppResources = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR);
2425
const appResourcesDestination = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_TEMP);
26+
const appResourcesBackup = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD);
27+
28+
try {
29+
await this.tryMigrate(originalAppResources, appResourcesDestination, appResourcesBackup);
30+
this.$logger.out(`Successfully updated your project's application resources '/Android' directory structure.${EOL}The previous version of your Android application resources has been renamed to '/${AndroidResourcesMigrationService.ANDROID_DIR_OLD}'`);
31+
} catch (error) {
32+
try {
33+
this.recover(originalAppResources, appResourcesDestination, appResourcesBackup);
34+
this.$logger.out("Failed to update resources. They should be in their initial state.");
35+
} catch (err) {
36+
this.$logger.trace(err);
37+
this.$logger.out(`Failed to update resources.${EOL} Backup of original content is inside "${appResourcesBackup}".${EOL}If "${originalAppResources} is missing copy from backup folder."`);
38+
} finally {
39+
this.$errors.failWithoutHelp(error.message)
40+
}
41+
}
42+
}
43+
44+
private async tryMigrate(originalAppResources: string, appResourcesDestination: string, appResourcesBackup: string): Promise<void> {
2545
const appMainSourceSet = path.join(appResourcesDestination, constants.SRC_DIR, constants.MAIN_DIR);
2646
const appResourcesMainSourceSetResourcesDestination = path.join(appMainSourceSet, constants.RESOURCES_DIR);
2747

@@ -64,11 +84,20 @@ export class AndroidResourcesMigrationService implements IAndroidResourcesMigrat
6484
this.$fs.copyFile(path.join(originalAppResources, constants.MANIFEST_FILE_NAME), path.join(appMainSourceSet, constants.MANIFEST_FILE_NAME));
6585

6686
// rename the legacy app_resources to ANDROID_DIR_OLD
67-
shell.mv(originalAppResources, path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD));
87+
this.$fs.rename(originalAppResources, appResourcesBackup);
88+
6889
// move the new, updated app_resources to App_Resources/Android, as the de facto resources
69-
shell.mv(appResourcesDestination, originalAppResources);
90+
this.$fs.rename(appResourcesDestination, originalAppResources);
91+
}
92+
93+
private recover(originalAppResources: string, appResourcesDestination: string, appResourcesBackup: string): void {
94+
if (!this.$fs.exists(originalAppResources)) {
95+
this.$fs.rename(appResourcesBackup, originalAppResources);
96+
}
7097

71-
this.$logger.out(`Successfully updated your project's application resources '/Android' directory structure.\nThe previous version of your Android application resources has been renamed to '/${AndroidResourcesMigrationService.ANDROID_DIR_OLD}'`);
98+
if (this.$fs.exists(appResourcesDestination)) {
99+
this.$fs.deleteDirectory(appResourcesDestination);
100+
}
72101
}
73102
}
74103

0 commit comments

Comments
 (0)