Skip to content

Commit 74c0018

Browse files
committed
Attempt to single-thread pattern lab builds and clean up between them
closes #450
1 parent 7442724 commit 74c0018

File tree

4 files changed

+54
-19
lines changed

4 files changed

+54
-19
lines changed

core/lib/patternlab.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/*
2-
* patternlab-node - v2.4.3 - 2016
2+
* patternlab-node - v2.4.4 - 2016
33
*
44
* Brian Muenzenmeyer, Geoff Pursell, and the web community.
5-
* Licensed under the MIT license.
6-
*
7-
* Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
5+
* Licensed under the MIT license.
6+
*
7+
* Many thanks to Brad Frost and Dave Olsen for inspiration, encouragement, and advice.
88
*
99
*/
1010

@@ -375,17 +375,29 @@ var patternlab_engine = function (config) {
375375
return getVersion();
376376
},
377377
build: function (callback, deletePatternDir) {
378+
if (patternlab && patternlab.isBusy) {
379+
console.log('Pattern Lab is busy building a previous run - returning early.');
380+
return;
381+
}
382+
patternlab.isBusy = true;
378383
buildPatterns(deletePatternDir);
379384
new ui().buildFrontend(patternlab);
380385
printDebug();
386+
patternlab.isBusy = false;
381387
callback();
382388
},
383389
help: function () {
384390
help();
385391
},
386392
patternsonly: function (callback, deletePatternDir) {
393+
if (patternlab && patternlab.isBusy) {
394+
console.log('Pattern Lab is busy building a previous run - returning early.');
395+
return;
396+
}
397+
patternlab.isBusy = true;
387398
buildPatterns(deletePatternDir);
388399
printDebug();
400+
patternlab.isBusy = false;
389401
callback();
390402
},
391403
liststarterkits: function () {

core/lib/ui_builder.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ var ui_builder = function () {
2020
* @param pattern - the pattern to add
2121
*/
2222
function addToPatternPaths(patternlab, pattern) {
23-
if (!patternlab.patternPaths) {
24-
patternlab.patternPaths = {};
25-
}
26-
2723
if (!patternlab.patternPaths[pattern.patternGroup]) {
2824
patternlab.patternPaths[pattern.patternGroup] = {};
2925
}
@@ -40,10 +36,6 @@ var ui_builder = function () {
4036
* @param pattern - the pattern to add
4137
*/
4238
function addToViewAllPaths(patternlab, pattern) {
43-
if (!patternlab.viewAllPaths) {
44-
patternlab.viewAllPaths = {};
45-
}
46-
4739
if (!patternlab.viewAllPaths[pattern.patternGroup]) {
4840
patternlab.viewAllPaths[pattern.patternGroup] = {};
4941
}
@@ -342,12 +334,6 @@ var ui_builder = function () {
342334
patternGroups: {}
343335
};
344336

345-
//if (!patternlab.patternTypes) {
346-
patternlab.counter = (patternlab.counter ? patternlab.counter + 1: 1);
347-
console.log('build counts:', patternlab.counter);
348-
patternlab.patternTypes = [];
349-
//}
350-
351337
_.forEach(sortPatterns(patternlab.patterns), function (pattern) {
352338

353339
//ignore patterns we can omit from rendering directly
@@ -562,12 +548,23 @@ var ui_builder = function () {
562548
writeFile(path.resolve(paths.public.annotations, 'annotations.js'), annotations);
563549
}
564550

551+
/**
552+
* Reset any global data we use between builds to guard against double adding things
553+
*/
554+
function resetUIBuilderState(patternlab) {
555+
patternlab.patternPaths = {};
556+
patternlab.viewAllPaths = {};
557+
patternlab.patternTypes = [];
558+
}
559+
565560
/**
566561
* The main entry point for ui_builder
567562
* @param patternlab - global data store
568563
*/
569564
function buildFrontend(patternlab) {
570565

566+
resetUIBuilderState(patternlab);
567+
571568
var paths = patternlab.config.paths;
572569

573570
//determine which patterns should be included in the front-end rendering
@@ -628,6 +625,9 @@ var ui_builder = function () {
628625
},
629626
groupPatterns: function (patternlab) {
630627
return groupPatterns(patternlab);
628+
},
629+
resetUIBuilderState: function (patternlab) {
630+
resetUIBuilderState(patternlab);
631631
}
632632
};
633633

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "patternlab-node",
33
"description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).",
4-
"version": "2.4.3",
4+
"version": "2.4.4",
55
"main": "./core/lib/patternlab.js",
66
"dependencies": {
77
"diveSync": "^0.3.0",

test/ui_builder_tests.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ exports['ui_builder'] = {
112112
new Pattern('patternType1/patternSubType2/grey.mustache'),
113113
new Pattern('patternType1/patternSubType2/white.mustache')
114114
);
115+
ui.resetUIBuilderState(patternlab);
115116

116117
//act
117118
var result = ui.groupPatterns(patternlab);
@@ -150,6 +151,7 @@ exports['ui_builder'] = {
150151
new Pattern('patternType1/patternSubType2/grey.mustache'),
151152
new Pattern('patternType1/patternSubType2/white.mustache')
152153
);
154+
ui.resetUIBuilderState(patternlab);
153155

154156
//act
155157
var result = ui.groupPatterns(patternlab);
@@ -179,6 +181,7 @@ exports['ui_builder'] = {
179181
new Pattern('patternType1/patternSubType2/grey.mustache'),
180182
new Pattern('patternType1/patternSubType2/white.mustache')
181183
);
184+
ui.resetUIBuilderState(patternlab);
182185

183186
//act
184187
var result = ui.groupPatterns(patternlab);
@@ -214,13 +217,33 @@ exports['ui_builder'] = {
214217
new Pattern('patternType1/patternSubType2/grey.mustache'),
215218
new Pattern('patternType1/patternSubType2/white.mustache')
216219
);
220+
ui.resetUIBuilderState(patternlab);
217221

218222
//act
219223
var result = ui.groupPatterns(patternlab);
220224

221225
//assert
222226
test.equals('todo', 'todo');
223227

228+
test.done();
229+
},
230+
231+
'resetUIBuilderState - reset global objects' : function (test) {
232+
//arrange
233+
var patternlab = createFakePatternLab({
234+
patternPaths: { foo: 1},
235+
viewAllPaths: { bar: 2},
236+
patternTypes: ['baz']
237+
});
238+
239+
//act
240+
ui.resetUIBuilderState(patternlab);
241+
242+
//assert
243+
test.equals(patternlab.patternPaths.foo, undefined);
244+
test.equals(patternlab.viewAllPaths.bar, undefined);
245+
test.equals(patternlab.patternTypes.length, 0);
246+
224247
test.done();
225248
}
226249

0 commit comments

Comments
 (0)