Skip to content

Commit 01644c7

Browse files
author
Brian Muenzenmeyer
authored
Merge pull request #367 from pattern-lab/starterkitload-clean
support a clean option when loading starterkits
2 parents 4bbf0b8 + c99d913 commit 01644c7

File tree

3 files changed

+54
-15
lines changed

3 files changed

+54
-15
lines changed

core/lib/patternlab.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,16 @@ var patternlab_engine = function (config) {
121121
console.log('');
122122

123123
plutils.logGreen(' patternlab:loadstarterkit');
124-
console.log(' > Load a starterkit into config.paths.soource/*');
125-
console.log(' > NOTE: This does overwrite any existing contents, and does not clean the directory first.');
124+
console.log(' > Load a starterkit into config.paths.source/*');
125+
console.log(' > NOTE: Overwrites existing content, and only cleans out existing directory if --clean=true argument is passed.');
126126
console.log(' > NOTE: In most cases, `npm install starterkit-name` will precede this call.');
127127
console.log(' > arguments:');
128128
console.log(' -- kit ');
129129
console.log(' > the name of the starter kit to load');
130+
console.log(' -- clean ');
131+
console.log(' > removes all files from config.paths.source/ prior to load');
130132
console.log(' > example (gulp):');
131-
console.log(' `gulp patternlab:starterkit-load --kit=starterkit-mustache-demo`');
133+
console.log(' `gulp patternlab:loadstarterkit --kit=starterkit-mustache-demo`');
132134
console.log('');
133135

134136
console.log('===============================');
@@ -175,9 +177,9 @@ var patternlab_engine = function (config) {
175177
return starterkit_manager.list_starterkits();
176178
}
177179

178-
function loadStarterKit(starterkitName) {
180+
function loadStarterKit(starterkitName, clean) {
179181
var starterkit_manager = new sm(patternlab);
180-
starterkit_manager.load_starterkit(starterkitName);
182+
starterkit_manager.load_starterkit(starterkitName, clean);
181183
}
182184

183185
function buildPatterns(deletePatternDir) {
@@ -369,8 +371,8 @@ var patternlab_engine = function (config) {
369371
liststarterkits: function () {
370372
return listStarterkits();
371373
},
372-
loadstarterkit: function (starterkitName) {
373-
loadStarterKit(starterkitName);
374+
loadstarterkit: function (starterkitName, clean) {
375+
loadStarterKit(starterkitName, clean);
374376
}
375377
};
376378
};

core/lib/starterkit_manager.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,41 @@
33
var starterkit_manager = function (pl) {
44
var path = require('path'),
55
fs = require('fs-extra'),
6+
util = require('./utilities'),
67
paths = pl.config.paths;
78

8-
function loadStarterKit(starterkitName) {
9+
function loadStarterKit(starterkitName, clean) {
910
try {
1011
var kitPath = path.resolve(
1112
path.join(process.cwd(), 'node_modules', starterkitName, pl.config.starterkitSubDir)
1213
);
13-
var kitPathDirExists = fs.statSync(kitPath).isDirectory();
14+
console.log('Attempting to load starterkit from', kitPath);
15+
try {
16+
var kitDirStats = fs.statSync(kitPath);
17+
} catch (ex) {
18+
util.logRed(starterkitName + ' not found, please use npm to install it first.');
19+
util.logRed(starterkitName + ' not loaded.');
20+
return;
21+
}
22+
var kitPathDirExists = kitDirStats.isDirectory();
1423
if (kitPathDirExists) {
1524

16-
//todo check and prompt user is paths().source is not empty
25+
if (clean) {
26+
console.log('Deleting contents of', paths.source.root, 'prior to starterkit load.');
27+
util.emptyDirectory(paths.source.root);
28+
} else {
29+
console.log('Overwriting contents of', paths.source.root, 'during starterkit load.');
30+
}
1731

1832
fs.copy(kitPath, paths.source.root, function (ex) {
1933
if (ex) {
2034
console.error(ex);
2135
}
22-
console.log('starterkit ' + starterkitName + ' loaded successfully.');
36+
util.logGreen('starterkit ' + starterkitName + ' loaded successfully.');
2337
});
24-
2538
}
2639
} catch (ex) {
2740
console.log(ex);
28-
console.log(starterkitName + ' not found, please use npm to install it first');
2941
}
3042
}
3143

@@ -38,8 +50,8 @@ var starterkit_manager = function (pl) {
3850
}
3951

4052
return {
41-
load_starterkit: function (starterkitName) {
42-
loadStarterKit(starterkitName);
53+
load_starterkit: function (starterkitName, clean) {
54+
loadStarterKit(starterkitName, clean);
4355
},
4456
list_starterkits: function () {
4557
listStarterkits();

core/lib/utilities.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
"use strict";
22

3+
var fs = require('fs-extra'),
4+
path = require('path');
5+
36
var util = {
47
// http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
58
shuffle: function (o) {
@@ -58,6 +61,28 @@ var util = {
5861
if (obj.hasOwnProperty(prop)) { return false; }
5962
}
6063
return true;
64+
},
65+
66+
// recursively delete the contents of directory
67+
// adapted from https://gist.github.com/tkihira/2367067
68+
emptyDirectory: function (dir, cleanDir) {
69+
var list = fs.readdirSync(dir);
70+
for (var i = 0; i < list.length; i++) {
71+
var filename = path.join(dir, list[i]);
72+
var stat = fs.statSync(filename);
73+
74+
if (filename === "." || filename === "..") {
75+
// pass these files
76+
} else if (stat.isDirectory()) {
77+
this.emptyDirectory(filename);
78+
} else {
79+
// rm fiilename
80+
fs.unlinkSync(filename);
81+
}
82+
}
83+
if (cleanDir) {
84+
fs.rmdirSync(dir);
85+
}
6186
}
6287
};
6388

0 commit comments

Comments
 (0)