Mwalker has uploaded a new change for review.
https://gerrit.wikimedia.org/r/148970
Change subject: Allow unzipped bundle
......................................................................
Allow unzipped bundle
Allow the renderer to consume a unzipped bundle file and to accept
a working directory. This saves CPU cycles when the bundle was
created on the same machine. A manually specified working directory
allows the caller to define a better working space than /tmp -- e.g.
a RAM disk.
Change-Id: If2be196ca29a4b1d93cda1b818491d64746e44a0
---
M bin/mw-ocg-latexer
M lib/index.js
M package.json
3 files changed, 42 insertions(+), 15 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
refs/changes/70/148970/1
diff --git a/bin/mw-ocg-latexer b/bin/mw-ocg-latexer
index 7e57a1c..5d4ba3c 100755
--- a/bin/mw-ocg-latexer
+++ b/bin/mw-ocg-latexer
@@ -13,7 +13,7 @@
program
.version(latexer.version)
- .usage('[options] <bundle.zip>')
+ .usage('[options] <bundle>')
.option('-o, --output <filename>',
'Save PDF to the given <filename>', null)
.option('-s, --size <letter|a4>',
@@ -31,7 +31,10 @@
.option('-D, --debug',
'Turn on debugging features (eg, full stack traces on
exceptions)')
.option('--syslog',
- 'Log errors using syslog (for production deployments)');
+ 'Log errors using syslog (for production deployments)')
+ .option('--builddir <path>',
+ 'Manually specify a working directory to place
temporary files. ' +
+ 'If specificed, this directory is not removed on
failure.');
program.parse(process.argv);
@@ -73,6 +76,7 @@
latex: !!program.latex,
debug: !!program.debug,
output: program.output,
+ builddir: program.builddir,
lang: program.lang,
onecolumn: program.oneColumn,
log: log
diff --git a/lib/index.js b/lib/index.js
index 49b9ba9..0b81bff 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -11,6 +11,7 @@
var fs = require('fs');
var gammalatex = require('gammalatex');
var path = require('path');
+var rimraf = require('rimraf');
var stream = require('stream');
var tmp = require('tmp');
var ubidi = require('icu-bidi');
@@ -1117,22 +1118,41 @@
status.createStage(0, 'Unpacking content bundle');
// first create a temporary directory
- return P.call(tmp.dir, tmp, {
- prefix: json.name,
- unsafeCleanup: !(options.debug || options.latex)
+ return Promise.resolve().then(function() {
+ // Either take the directory at face value or create one
+ // Note: we do not get automatic clean up when we take the
directory
+ if (options.builddir) {
+ return P.call(fs.mkdir, fs,
options.builddir).then(function() {
+ return options.builddir;
+ });
+ } else {
+ return P.call(tmp.dir, tmp, {
+ prefix: json.name,
+ unsafeCleanup: !(options.debug || options.latex)
+ });
+ }
}).then(function(_builddir) {
builddir = _builddir;
- // make bundle and latex subdirs
+
+ // deal with the bundle and latex dirs. latex dir is easy,
bundle..
+ // we will hardlink if the given bundle is a directory,
otherwise
+ // we will extract it
+ var dealWithBundle = function() {
+ return P.call(fs.stat, fs,
options.bundle).then(function(stat) {
+ if (stat.isDirectory()) {
+ return P.call(fs.symlink, fs,
options.bundle, path.join(builddir, 'bundle'))
+ } else {
+ return P.spawn('unzip', [ path.resolve(
options.bundle ) ], {
+ cwd: path.join(builddir,
'bundle')
+ });
+ }
+ })
+ };
+
return Promise.join(
- P.call(fs.mkdir, fs, path.join(builddir, 'bundle')),
+ dealWithBundle(),
P.call(fs.mkdir, fs, path.join(builddir, 'latex'))
);
- }).then(function() {
- // now unpack the zip archive
- var bundledir = path.join(builddir, 'bundle');
- return P.spawn('unzip', [ path.resolve( options.bundle ) ], {
- cwd: bundledir
- });
}).then(function() {
// now read in the main metabook.json file
return P.call(
@@ -1597,10 +1617,12 @@
// compile it to PDF
return compileLatex(builddir, options);
}).then(function() {
+ // Only delete things on success, if fail keep them around
+ return P.promisify(rimraf)(builddir);
+ }).then(function() {
status.createStage(0, 'Done');
return 0; // success!
}, function(err) {
- // xxx clean up?
if (options.debug) {
throw err;
}
diff --git a/package.json b/package.json
index f2495d7..813c6f5 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,8 @@
"prfun": "~1.0.0",
"readable-stream": "~1.0.0",
"sqlite3": "~2.2.3",
- "tmp": "~0.0.24"
+ "tmp": "~0.0.24",
+ "rimraf": "~2.2.2"
},
"devDependencies": {
"mocha": "~1.20.1"
--
To view, visit https://gerrit.wikimedia.org/r/148970
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If2be196ca29a4b1d93cda1b818491d64746e44a0
Gerrit-PatchSet: 1
Gerrit-Project:
mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
Gerrit-Branch: master
Gerrit-Owner: Mwalker <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits