Skip to content

Commit 3682480

Browse files
committed
implement rollback of package.json contents of project if platform/plugin installation fails
1 parent 97cf288 commit 3682480

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

lib/npm-installation-manager.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import * as semver from "semver";
33
import * as constants from "./constants";
44

55
export class NpmInstallationManager implements INpmInstallationManager {
6-
private static NPM_LOAD_FAILED = "Failed to retrieve data from npm. Please try again a little bit later.";
7-
86
constructor(private $npm: INodePackageManager,
97
private $childProcess: IChildProcess,
108
private $logger: ILogger,
@@ -35,7 +33,8 @@ export class NpmInstallationManager implements INpmInstallationManager {
3533
}
3634

3735
public async install(packageName: string, projectDir: string, opts?: INpmInstallOptions): Promise<any> {
38-
36+
let packageJsonPath = path.join(projectDir, "package.json");
37+
let packageJsonContent = this.$fs.readJson(packageJsonPath);
3938
try {
4039
let packageToInstall = this.$options.frameworkPath || packageName;
4140
let pathToSave = projectDir;
@@ -44,8 +43,9 @@ export class NpmInstallationManager implements INpmInstallationManager {
4443

4544
return await this.installCore(packageToInstall, pathToSave, version, dependencyType);
4645
} catch (error) {
46+
this.$fs.writeJson(packageJsonPath, packageJsonContent);
4747
this.$logger.debug(error);
48-
this.$errors.fail("%s. Error: %s", NpmInstallationManager.NPM_LOAD_FAILED, error);
48+
this.$errors.fail("%s", error);
4949
}
5050
}
5151

lib/services/platform-service.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@ export class PlatformService implements IPlatformService {
9191
}
9292

9393
let spinner = new clui.Spinner("Installing " + packageToInstall);
94+
let projectDir = this.$projectData.projectDir;
9495
try {
9596
spinner.start();
96-
let downloadedPackagePath = await this.$npmInstallationManager.install(packageToInstall, this.$projectData.projectDir, npmOptions);
97+
let downloadedPackagePath = await this.$npmInstallationManager.install(packageToInstall, projectDir, npmOptions);
9798
let frameworkDir = path.join(downloadedPackagePath, constants.PROJECT_FRAMEWORK_FOLDER_NAME);
9899
frameworkDir = path.resolve(frameworkDir);
99100

0 commit comments

Comments
 (0)