Skip to content

Commit 2c53c48

Browse files
author
Kelly Selden
committed
reset command
1 parent c5b53a2 commit 2c53c48

File tree

6 files changed

+121
-131
lines changed

6 files changed

+121
-131
lines changed

bin/commands/default.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
const args = require('../../src/args');
44
const emberCliUpdate = require('../../src');
5+
const reset = require('../../src/reset');
56

67
module.exports.command = '$0';
78

89
module.exports.builder = args;
910

1011
module.exports.handler = async function handler(argv) {
1112
try {
12-
let result = await emberCliUpdate({
13-
...argv,
14-
blueprintOptions: argv._.slice(0)
15-
});
13+
let result;
14+
if (argv.reset) {
15+
result = await reset(argv);
16+
} else {
17+
result = await emberCliUpdate({
18+
...argv,
19+
blueprintOptions: argv._.slice(0)
20+
});
21+
}
1622

1723
let ps = result.resolveConflictsProcess;
1824
if (ps) {

src/command.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const emberCliUpdate = require('.');
4+
const reset = require('./reset');
45
const args = require('./args');
56

67
module.exports = {
@@ -82,7 +83,12 @@ module.exports = {
8283
],
8384

8485
async run(options) {
85-
let result = await emberCliUpdate(options);
86+
let result;
87+
if (options.reset) {
88+
result = await reset(options);
89+
} else {
90+
result = await emberCliUpdate(options);
91+
}
8692

8793
let ps = result.resolveConflictsProcess;
8894
if (ps) {

src/index.js

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ module.exports = async function emberCliUpdate({
5555
runCodemods,
5656
codemodsSource,
5757
codemodsJson,
58-
reset,
5958
compareOnly,
6059
statsOnly,
6160
listCodemods,
@@ -104,7 +103,7 @@ module.exports = async function emberCliUpdate({
104103
blueprint.version = from;
105104
}
106105

107-
if (!blueprint.version && !reset) {
106+
if (!blueprint.version) {
108107
throw new Error('A custom blueprint cannot detect --from. You must supply it.');
109108
}
110109
} else {
@@ -120,7 +119,6 @@ module.exports = async function emberCliUpdate({
120119
} = await chooseBlueprintUpdates({
121120
cwd,
122121
emberCliUpdateJson,
123-
reset,
124122
to
125123
});
126124

@@ -129,9 +127,7 @@ module.exports = async function emberCliUpdate({
129127
}
130128

131129
blueprint = _blueprint;
132-
if (!reset) {
133-
to = _to;
134-
}
130+
to = _to;
135131
}
136132
}
137133

@@ -185,10 +181,7 @@ module.exports = async function emberCliUpdate({
185181
throw 'cannot checkout older versions of glimmer blueprint';
186182
}
187183

188-
let startBlueprint;
189-
if (!reset) {
190-
startBlueprint = { ...blueprint };
191-
}
184+
let startBlueprint = { ...blueprint };
192185
endBlueprint = { ...blueprint };
193186
delete endBlueprint.version;
194187

@@ -240,7 +233,6 @@ module.exports = async function emberCliUpdate({
240233
remoteUrl: ({ projectOptions }) => getRemoteUrl(projectOptions),
241234
compareOnly,
242235
resolveConflicts,
243-
reset,
244236
statsOnly,
245237
listCodemods,
246238
runCodemods,
@@ -260,12 +252,10 @@ module.exports = async function emberCliUpdate({
260252
blueprint: endBlueprint
261253
});
262254

263-
if (!reset) {
264-
await stageBlueprintFile({
265-
cwd,
266-
emberCliUpdateJsonPath
267-
});
268-
}
255+
await stageBlueprintFile({
256+
cwd,
257+
emberCliUpdateJsonPath
258+
});
269259
}
270260

271261
return result;

src/reset.js

Lines changed: 53 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ const boilerplateUpdate = require('boilerplate-update');
44
const getStartAndEndCommands = require('./get-start-and-end-commands');
55
const parseBlueprintPackage = require('./parse-blueprint-package');
66
const saveBlueprint = require('./save-blueprint');
7-
const loadDefaultBlueprintFromDisk = require('./load-default-blueprint-from-disk');
8-
const loadSafeBlueprint = require('./load-safe-blueprint');
97
const loadSafeBlueprintFile = require('./load-safe-blueprint-file');
108
const { getBlueprintRelativeFilePath } = require('./get-blueprint-file-path');
119
const findBlueprint = require('./find-blueprint');
1210
const getBaseBlueprint = require('./get-base-blueprint');
1311
const getBlueprintFilePath = require('./get-blueprint-file-path');
1412
const resolvePackage = require('./resolve-package');
1513
const { defaultTo } = require('./constants');
14+
const chooseBlueprintUpdates = require('./choose-blueprint-updates');
1615

1716
module.exports = async function reset({
1817
blueprint: _blueprint,
@@ -25,67 +24,73 @@ module.exports = async function reset({
2524
// We must rely on a lookup before the run.
2625
let emberCliUpdateJsonPath = await getBlueprintFilePath(cwd);
2726

28-
let packageName;
29-
let name;
30-
let location;
31-
let url;
27+
let emberCliUpdateJson = await loadSafeBlueprintFile(emberCliUpdateJsonPath);
28+
29+
let { blueprints } = emberCliUpdateJson;
30+
31+
if (!blueprints.length) {
32+
throw new Error('No blueprints found.');
33+
}
34+
35+
let blueprint;
36+
let packageInfo;
37+
3238
if (_blueprint) {
3339
let parsedPackage = await parseBlueprintPackage({
3440
cwd,
3541
blueprint: _blueprint
3642
});
37-
packageName = parsedPackage.name;
38-
name = parsedPackage.name;
39-
location = parsedPackage.location;
40-
url = parsedPackage.url;
41-
} else {
42-
let defaultBlueprint = await loadDefaultBlueprintFromDisk(cwd);
43-
packageName = defaultBlueprint.packageName;
44-
name = defaultBlueprint.name;
45-
}
46-
47-
let packageInfo = await resolvePackage({
48-
name: packageName,
49-
url,
50-
range: to
51-
});
43+
let url = parsedPackage.url;
5244

53-
packageName = packageInfo.name;
54-
if (!name) {
55-
name = packageInfo.name;
56-
}
57-
let version = packageInfo.version;
58-
let path = packageInfo.path;
45+
packageInfo = await resolvePackage({
46+
name: parsedPackage.name,
47+
url,
48+
range: to
49+
});
5950

60-
let emberCliUpdateJson = await loadSafeBlueprintFile(emberCliUpdateJsonPath);
51+
let packageName = packageInfo.name;
52+
let name = packageInfo.name;
6153

62-
let blueprint;
54+
let existingBlueprint = findBlueprint(emberCliUpdateJson, packageName, name);
55+
if (!existingBlueprint) {
56+
throw new Error('Blueprint not found.');
57+
}
6358

64-
let existingBlueprint = findBlueprint(emberCliUpdateJson, packageName, name);
65-
if (existingBlueprint) {
6659
blueprint = existingBlueprint;
6760
} else {
68-
blueprint = {
69-
packageName,
70-
name,
71-
location
72-
};
73-
}
61+
let {
62+
blueprint: _blueprint
63+
} = await chooseBlueprintUpdates({
64+
cwd,
65+
emberCliUpdateJson,
66+
reset: true
67+
});
68+
69+
blueprint = _blueprint;
7470

75-
blueprint = loadSafeBlueprint(blueprint);
71+
let parsedPackage = await parseBlueprintPackage({
72+
cwd,
73+
blueprint: blueprint.location || blueprint.packageName
74+
});
75+
let url = parsedPackage.url;
7676

77-
blueprint.version = version;
78-
blueprint.path = path;
77+
packageInfo = await resolvePackage({
78+
name: blueprint.packageName,
79+
url,
80+
range: to
81+
});
82+
}
7983

80-
let baseBlueprint = await getBaseBlueprint({
81-
cwd,
82-
blueprints: emberCliUpdateJson.blueprints,
83-
blueprint
84-
});
84+
blueprint.version = packageInfo.version;
85+
blueprint.path = packageInfo.path;
8586

86-
if (!baseBlueprint) {
87-
// for non-existing default blueprints
88-
blueprint.isBaseBlueprint = true;
87+
let baseBlueprint;
88+
if (!blueprint.isBaseBlueprint) {
89+
baseBlueprint = await getBaseBlueprint({
90+
cwd,
91+
blueprints,
92+
blueprint
93+
});
8994
}
9095

9196
let {

test/acceptance/ember-cli-update-test.js

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ describe(function() {
9494
];
9595
}
9696
if (reset) {
97-
args.push('--reset');
97+
args = [
98+
'reset',
99+
...to ? [`--to=${to}`] : []
100+
];
98101
}
99102
if (blueprint) {
100103
args.push(`-b=${blueprint}`);
@@ -350,15 +353,18 @@ describe(function() {
350353

351354
it('can reset from multiple blueprint', async function() {
352355
let {
353-
location,
356+
location
357+
} = (await loadSafeBlueprintFile('test/fixtures/blueprint/app/local-app/reset/local/my-app/config/ember-cli-update.json')).blueprints[1];
358+
359+
let {
354360
version: to
355-
} = (await loadSafeBlueprintFile('test/fixtures/blueprint/app/local-app/local/my-app/config/ember-cli-update.json')).blueprints[1];
361+
} = (await loadSafeBlueprintFile('test/fixtures/blueprint/app/local-app/reset/merge/my-app/config/ember-cli-update.json')).blueprints[1];
356362

357363
let {
358364
ps,
359365
promise
360366
} = await merge({
361-
fixturesPath: 'test/fixtures/blueprint/app/local-app/local',
367+
fixturesPath: 'test/fixtures/blueprint/app/local-app/reset/local',
362368
commitMessage: 'my-app',
363369
reset: true,
364370
to,
@@ -396,15 +402,42 @@ describe(function() {
396402
});
397403

398404
it('can reset the default blueprint', async function() {
405+
let commitMessage = 'my-app';
406+
399407
let {
400-
status
401-
} = await (await merge({
408+
ps,
409+
promise
410+
} = await merge({
402411
fixturesPath: 'test/fixtures/app/local',
403-
commitMessage: 'my-app',
404-
init: true,
412+
commitMessage,
405413
reset: true,
406-
to: '2.11.1'
407-
})).promise;
414+
to: '2.11.1',
415+
async beforeMerge() {
416+
await fs.copy(
417+
path.resolve(__dirname, '../fixtures/ember-cli-update-json/default/config/ember-cli-update.json'),
418+
path.join(tmpPath, 'config/ember-cli-update.json')
419+
);
420+
421+
await commit({ m: commitMessage, cwd: tmpPath });
422+
}
423+
});
424+
425+
let whichBlueprint = new Promise(resolve => {
426+
function whichBlueprint(data) {
427+
let str = data.toString();
428+
if (str.includes('Which blueprint would you like to reset?')) {
429+
ps.stdin.write(`${down}${enter}`);
430+
ps.stdout.removeListener('data', whichBlueprint);
431+
resolve();
432+
}
433+
}
434+
ps.stdout.on('data', whichBlueprint);
435+
});
436+
await whichBlueprint;
437+
438+
let {
439+
status
440+
} = await promise;
408441

409442
fixtureCompare({
410443
mergeFixtures: 'test/fixtures/app/reset/my-app'

0 commit comments

Comments
 (0)