Skip to content

Commit 56590ef

Browse files
authored
Merge pull request facebookarchive#1031 from Daniel15/fix-web
Fix race condition in website builder script
2 parents 8ec47de + 5354334 commit 56590ef

1 file changed

Lines changed: 66 additions & 69 deletions

File tree

website/server/convert.js

Lines changed: 66 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -29,86 +29,83 @@ function backtickify(str) {
2929
function execute() {
3030
var MD_DIR = '../docs/';
3131

32-
glob('src/docs/*.*', function(er, files) {
33-
files.forEach(function(file) {
34-
try {
35-
fs.unlinkSync(file);
36-
} catch(e) {
37-
/* seriously, unlink throws when the file doesn't exist :( */
38-
}
39-
});
32+
glob.sync('src/docs/*.*').forEach(function(file) {
33+
try {
34+
fs.unlinkSync(file);
35+
} catch(e) {
36+
/* seriously, unlink throws when the file doesn't exist :( */
37+
}
4038
});
4139

4240
var metadatas = {
4341
files: [],
4442
};
4543

46-
glob(MD_DIR + '**/*.*', function (er, files) {
47-
files.forEach(function(file) {
48-
var extension = path.extname(file);
49-
if (extension === '.md' || extension === '.markdown') {
50-
var content = fs.readFileSync(file, {encoding: 'utf8'});
51-
var metadata = {};
52-
53-
// Extract markdown metadata header
54-
var both = splitHeader(content);
55-
var lines = both.header.split(os.EOL);
56-
for (var i = 0; i < lines.length - 1; ++i) {
57-
var keyvalue = lines[i].split(':');
58-
var key = keyvalue[0].trim();
59-
var value = keyvalue.slice(1).join(':').trim();
60-
// Handle the case where you have "Community #10"
61-
try { value = JSON.parse(value); } catch(e) { }
62-
metadata[key] = value;
63-
}
64-
metadatas.files.push(metadata);
65-
66-
if (metadata.permalink.match(/^https?:/)) {
67-
return;
68-
}
69-
70-
// Create a dummy .js version that just calls the associated layout
71-
var layout = metadata.layout[0].toUpperCase() + metadata.layout.substr(1) + 'Layout';
72-
73-
var content = (
74-
'/**\n' +
75-
' * @generated\n' +
76-
' */\n' +
77-
'var React = require("React");\n' +
78-
'var Layout = require("' + layout + '");\n' +
79-
'var content = ' + backtickify(both.content) + '\n' +
80-
'var Post = React.createClass({\n' +
81-
' statics: {\n' +
82-
' content: content\n' +
83-
' },\n' +
84-
' render: function() {\n' +
85-
' return <Layout metadata={' + JSON.stringify(metadata) + '}>{content}</Layout>;\n' +
86-
' }\n' +
87-
'});\n' +
88-
'module.exports = Post;\n'
89-
);
90-
91-
var targetFile = 'src/' + metadata.permalink.replace(/\.html$/, '.js');
92-
mkdirp.sync(targetFile.replace(new RegExp('/[^/]*$'), ''));
93-
fs.writeFileSync(targetFile, content);
44+
var files = glob.sync(MD_DIR + '**/*.*');
45+
files.forEach(function(file) {
46+
var extension = path.extname(file);
47+
if (extension === '.md' || extension === '.markdown') {
48+
var content = fs.readFileSync(file, {encoding: 'utf8'});
49+
var metadata = {};
50+
51+
// Extract markdown metadata header
52+
var both = splitHeader(content);
53+
var lines = both.header.split(os.EOL);
54+
for (var i = 0; i < lines.length - 1; ++i) {
55+
var keyvalue = lines[i].split(':');
56+
var key = keyvalue[0].trim();
57+
var value = keyvalue.slice(1).join(':').trim();
58+
// Handle the case where you have "Community #10"
59+
try { value = JSON.parse(value); } catch(e) { }
60+
metadata[key] = value;
9461
}
62+
metadatas.files.push(metadata);
9563

96-
if (extension === '.json') {
97-
var content = fs.readFileSync(file, {encoding: 'utf8'});
98-
metadatas[path.basename(file, '.json')] = JSON.parse(content);
64+
if (metadata.permalink.match(/^https?:/)) {
65+
return;
9966
}
100-
});
101-
102-
fs.writeFileSync(
103-
'core/metadata.js',
104-
'/**\n' +
105-
' * @generated\n' +
106-
' * @providesModule Metadata\n' +
107-
' */\n' +
108-
'module.exports = ' + JSON.stringify(metadatas, null, 2) + ';'
109-
);
67+
68+
// Create a dummy .js version that just calls the associated layout
69+
var layout = metadata.layout[0].toUpperCase() + metadata.layout.substr(1) + 'Layout';
70+
71+
var content = (
72+
'/**\n' +
73+
' * @generated\n' +
74+
' */\n' +
75+
'var React = require("React");\n' +
76+
'var Layout = require("' + layout + '");\n' +
77+
'var content = ' + backtickify(both.content) + '\n' +
78+
'var Post = React.createClass({\n' +
79+
' statics: {\n' +
80+
' content: content\n' +
81+
' },\n' +
82+
' render: function() {\n' +
83+
' return <Layout metadata={' + JSON.stringify(metadata) + '}>{content}</Layout>;\n' +
84+
' }\n' +
85+
'});\n' +
86+
'module.exports = Post;\n'
87+
);
88+
89+
var targetFile = 'src/' + metadata.permalink.replace(/\.html$/, '.js');
90+
mkdirp.sync(targetFile.replace(new RegExp('/[^/]*$'), ''));
91+
fs.writeFileSync(targetFile, content);
92+
}
93+
94+
if (extension === '.json') {
95+
var content = fs.readFileSync(file, {encoding: 'utf8'});
96+
metadatas[path.basename(file, '.json')] = JSON.parse(content);
97+
}
11098
});
11199

100+
fs.writeFileSync(
101+
'core/metadata.js',
102+
'/**\n' +
103+
' * @generated\n' +
104+
' * @providesModule Metadata\n' +
105+
' */\n' +
106+
'module.exports = ' + JSON.stringify(metadatas, null, 2) + ';'
107+
);
108+
112109
fs.writeFileSync('src/lib/Draft.css', fs.readFileSync('../dist/Draft.css'));
113110
fs.writeFileSync('src/lib/Draft.js', fs.readFileSync('../dist/Draft.js'));
114111
fs.writeFileSync('src/lib/RichEditor.css', fs.readFileSync('../examples/draft-0-9-1/rich/RichEditor.css'));

0 commit comments

Comments
 (0)