Skip to content

Commit

Permalink
Restore backup files before changing to new dependency set
Browse files Browse the repository at this point in the history
  • Loading branch information
huyphamily committed Feb 10, 2020
1 parent bff5859 commit c2d042f
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 38 deletions.
44 changes: 23 additions & 21 deletions lib/dependency-manager-adapters/npm.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,22 @@ module.exports = CoreObject.extend({
changeToDependencySet(depSet) {
let adapter = this;

adapter.applyDependencySet(depSet);

return adapter._install(depSet).then(() => {
let deps = extend({}, depSet.dependencies || {}, depSet.devDependencies || {});
let currentDeps = Object.keys(deps).map((dep) => {
return {
name: dep,
versionExpected: deps[dep],
versionSeen: adapter._findCurrentVersionOf(dep),
packageManager: adapter.useYarnCommand ? 'yarn' : 'npm',
};
return adapter.applyDependencySet(depSet).then(() => {
return adapter._install(depSet).then(() => {
let deps = extend({}, depSet.dependencies || {}, depSet.devDependencies || {});
let currentDeps = Object.keys(deps).map((dep) => {
return {
name: dep,
versionExpected: deps[dep],
versionSeen: adapter._findCurrentVersionOf(dep),
packageManager: adapter.useYarnCommand ? 'yarn' : 'npm',
};
});

debug('Switched to dependencies: \n', currentDeps);

return RSVP.Promise.resolve(currentDeps);
});

debug('Switched to dependencies: \n', currentDeps);

return RSVP.Promise.resolve(currentDeps);
});
},
cleanup() {
Expand Down Expand Up @@ -147,14 +147,16 @@ module.exports = CoreObject.extend({
debug('Changing to dependency set: %s', JSON.stringify(depSet));

if (!depSet) { return RSVP.resolve([]); }
let backupPackageJSON = path.join(this.cwd, this.packageJSONBackupFileName);
let packageJSONFile = path.join(this.cwd, this.packageJSON);
let packageJSON = JSON.parse(fs.readFileSync(backupPackageJSON));
let newPackageJSON = this._packageJSONForDependencySet(packageJSON, depSet);

debug('Write package.json with: \n', JSON.stringify(newPackageJSON));
return this._restoreOriginalDependencies().then(() => {
let packageJSONFile = path.join(this.cwd, this.packageJSON);
let packageJSON = JSON.parse(fs.readFileSync(packageJSONFile));
let newPackageJSON = this._packageJSONForDependencySet(packageJSON, depSet);

fs.writeFileSync(packageJSONFile, JSON.stringify(newPackageJSON, null, 2));
debug('Write package.json with: \n', JSON.stringify(newPackageJSON));

fs.writeFileSync(packageJSONFile, JSON.stringify(newPackageJSON, null, 2));
});
},
_packageJSONForDependencySet(packageJSON, depSet) {

Expand Down
36 changes: 19 additions & 17 deletions lib/dependency-manager-adapters/workspace.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,24 +56,26 @@ module.exports = CoreObject.extend({

changeToDependencySet(depSet) {
// TODO: What should this do for tables? Nesting? Needs different output
this._packageAdapters.forEach(adapter => {
adapter.applyDependencySet(depSet);
});

return this._install(depSet).then(() => {
let deps = extend({}, depSet.dependencies || {}, depSet.devDependencies || {});
let currentDeps = Object.keys(deps).map((dep) => {
return {
name: dep,
versionExpected: deps[dep],
versionSeen: this._findCurrentVersionOf(dep),
packageManager: 'yarn',
};
let appliedDependencies = this._packageAdapters.map(adapter =>
adapter.applyDependencySet(depSet)
);

return RSVP.all(appliedDependencies).then(() => {
return this._install(depSet).then(() => {
let deps = extend({}, depSet.dependencies || {}, depSet.devDependencies || {});
let currentDeps = Object.keys(deps).map((dep) => {
return {
name: dep,
versionExpected: deps[dep],
versionSeen: this._findCurrentVersionOf(dep),
packageManager: 'yarn',
};
});

debug('Switched to dependencies: \n', currentDeps);

return RSVP.Promise.resolve(currentDeps);
});

debug('Switched to dependencies: \n', currentDeps);

return RSVP.Promise.resolve(currentDeps);
});
},

Expand Down
37 changes: 37 additions & 0 deletions test/dependency-manager-adapters/npm-adapter-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,43 @@ describe('npmAdapter', () => {
});
});

describe('#changeToDependencySet', () => {
it('restores the backup before changing to the new dependency set', () => {
fs.mkdirSync('node_modules');
writeJSONFile('package.json', {
devDependencies: { 'ember-feature-flags': '1.0.0' },
dependencies: { 'ember-cli-babel': '5.0.0' },
peerDependencies: { 'ember-cli-sass': '1.2.3' },
resolutions: { 'ember-data': '3.0.0' },
originalPackageJSON: true,
});

let npmAdapter = new NpmAdapter({
cwd: tmpdir,
run: () => Promise.resolve(),
useYarnCommand: true,
});

return npmAdapter.setup().then(() => {
writeJSONFile('package.json', {
originalPackageJSON: false,
});

return npmAdapter.changeToDependencySet({
dependencies: { 'ember-cli-babel': '6.0.0' },
}).then(() => {
assertFileContainsJSON(path.join(tmpdir, 'package.json'), {
devDependencies: { 'ember-feature-flags': '1.0.0' },
dependencies: { 'ember-cli-babel': '6.0.0' },
peerDependencies: { 'ember-cli-sass': '1.2.3' },
resolutions: { 'ember-data': '3.0.0' },
originalPackageJSON: true,
});
});
});
});
});

describe('#_install', () => {
describe('without yarn', () => {
it('only runs npm install with npm 5', () => {
Expand Down
34 changes: 34 additions & 0 deletions test/dependency-manager-adapters/workspace-adapter-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -348,5 +348,39 @@ describe('workspaceAdapter', () => {
expect(runCount).to.equal(1, 'yarn install should run with correct options from buildManagerOptions');
});
});

it('restores the backup before changing to the new dependency set', () => {
writeJSONFile('packages/test/package.json', {
devDependencies: { 'ember-feature-flags': '1.0.0' },
dependencies: { 'ember-cli-babel': '5.0.0' },
peerDependencies: { 'ember-cli-sass': '1.2.3' },
resolutions: { 'ember-data': '3.0.0' },
originalPackageJSON: true,
});

workspaceAdapter = new WorkspaceAdapter({
cwd: tmpdir,
useYarnCommand: true,
run: () => Promise.resolve(),
});

return workspaceAdapter.setup().then(() => {
writeJSONFile('packages/test/package.json', {
originalPackageJSON: false,
});

return workspaceAdapter.changeToDependencySet({
dependencies: { 'ember-cli-babel': '6.0.0' },
}).then(() => {
assertFileContainsJSON(path.join(tmpdir, 'packages/test/package.json'), {
devDependencies: { 'ember-feature-flags': '1.0.0' },
dependencies: { 'ember-cli-babel': '6.0.0' },
peerDependencies: { 'ember-cli-sass': '1.2.3' },
resolutions: { 'ember-data': '3.0.0' },
originalPackageJSON: true,
});
});
});
});
});
});

0 comments on commit c2d042f

Please sign in to comment.