Fix crash; fs event received /w langauge file empty
It was common, at least for me, to experience a crash produced when running the `matrix-react-sdk/scripts/gen-i18n.js` script because when writing en_EN.json (via the script or otherwise) choikdar would receive an event and cause the file to be read, but the file would be empty when clearly it wasn't. This would happen even when doing an atomic write in gen-i18n. The fix adds a debounce as a workaround.
This commit is contained in:
parent
e1e8d9777b
commit
075f568f61
|
@ -134,8 +134,19 @@ function next(i, err) {
|
||||||
const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + source + '.json';
|
const reactSdkFile = 'node_modules/matrix-react-sdk/src/i18n/strings/' + source + '.json';
|
||||||
const riotWebFile = 'src/i18n/strings/' + source + '.json';
|
const riotWebFile = 'src/i18n/strings/' + source + '.json';
|
||||||
|
|
||||||
const translations = {};
|
// XXX: Use a debounce because for some reason if we read the language
|
||||||
const makeLang = () => { genLangFile(source, dest) };
|
// file immediately after the FS event is received, the file contents
|
||||||
|
// appears empty. Possibly https://github.com/nodejs/node/issues/6112
|
||||||
|
let makeLangDebouncer;
|
||||||
|
const makeLang = () => {
|
||||||
|
if (makeLangDebouncer) {
|
||||||
|
clearTimeout(makeLangDebouncer);
|
||||||
|
}
|
||||||
|
makeLangDebouncer = setTimeout(() => {
|
||||||
|
genLangFile(source, dest);
|
||||||
|
}, 500);
|
||||||
|
};
|
||||||
|
|
||||||
[reactSdkFile, riotWebFile].forEach(function(f) {
|
[reactSdkFile, riotWebFile].forEach(function(f) {
|
||||||
chokidar.watch(f)
|
chokidar.watch(f)
|
||||||
.on('add', makeLang)
|
.on('add', makeLang)
|
||||||
|
@ -170,13 +181,13 @@ function genLangFile(lang, dest) {
|
||||||
JSON.parse(fs.readFileSync(f).toString())
|
JSON.parse(fs.readFileSync(f).toString())
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Failed: "+f, e);
|
console.error("Failed: " + f, e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
translations = weblateToCounterpart(translations)
|
translations = weblateToCounterpart(translations);
|
||||||
|
|
||||||
fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4));
|
fs.writeFileSync(dest + lang + '.json', JSON.stringify(translations, null, 4));
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
|
|
Loading…
Reference in New Issue