Skip to content

Commit 07469fb

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

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

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

+32-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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";
@@ -22,6 +22,25 @@ export class AndroidResourcesMigrationService implements IAndroidResourcesMigrat
2222
public async migrate(appResourcesDir: string): Promise<void> {
2323
const originalAppResources = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR);
2424
const appResourcesDestination = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_TEMP);
25+
const appResourcesBackup = path.join(appResourcesDir, AndroidResourcesMigrationService.ANDROID_DIR_OLD);
26+
27+
try {
28+
await this.tryMigrate(originalAppResources, appResourcesDestination, appResourcesBackup);
29+
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}'`);
30+
} catch (error) {
31+
try {
32+
this.recover(originalAppResources, appResourcesDestination, appResourcesBackup);
33+
this.$logger.out("Failed to update resources. They should be in their initial state.");
34+
} catch (err) {
35+
this.$logger.trace(err);
36+
this.$logger.out(`Failed to update resources.${EOL} Backup of original content is inside "${appResourcesBackup}".${EOL}If "${originalAppResources} is missing copy from backup folder."`);
37+
} finally {
38+
throw error;
39+
}
40+
}
41+
}
42+
43+
private async tryMigrate(originalAppResources: string, appResourcesDestination: string, appResourcesBackup: string): Promise<void> {
2544
const appMainSourceSet = path.join(appResourcesDestination, constants.SRC_DIR, constants.MAIN_DIR);
2645
const appResourcesMainSourceSetResourcesDestination = path.join(appMainSourceSet, constants.RESOURCES_DIR);
2746

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

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

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}'`);
97+
if (this.$fs.exists(appResourcesDestination)) {
98+
this.$fs.deleteDirectory(appResourcesDestination);
99+
}
72100
}
73101
}
74102

0 commit comments

Comments
 (0)