2014-02-12 12:27:43 -05:00
|
|
|
ResourceWriter = require "./ResourceWriter"
|
|
|
|
LatexRunner = require "./LatexRunner"
|
|
|
|
OutputFileFinder = require "./OutputFileFinder"
|
|
|
|
Settings = require("settings-sharelatex")
|
|
|
|
Path = require "path"
|
|
|
|
logger = require "logger-sharelatex"
|
|
|
|
Metrics = require "./Metrics"
|
2014-04-02 07:53:02 -04:00
|
|
|
child_process = require "child_process"
|
2014-02-12 12:27:43 -05:00
|
|
|
|
|
|
|
module.exports = CompileManager =
|
|
|
|
doCompile: (request, callback = (error, outputFiles) ->) ->
|
|
|
|
compileDir = Path.join(Settings.path.compilesDir, request.project_id)
|
|
|
|
|
|
|
|
timer = new Metrics.Timer("write-to-disk")
|
|
|
|
logger.log project_id: request.project_id, "starting compile"
|
|
|
|
ResourceWriter.syncResourcesToDisk request.project_id, request.resources, compileDir, (error) ->
|
|
|
|
return callback(error) if error?
|
|
|
|
logger.log project_id: request.project_id, time_taken: Date.now() - timer.start, "written files to disk"
|
|
|
|
timer.done()
|
|
|
|
|
|
|
|
timer = new Metrics.Timer("run-compile")
|
|
|
|
Metrics.inc("compiles")
|
|
|
|
LatexRunner.runLatex request.project_id, {
|
|
|
|
directory: compileDir
|
|
|
|
mainFile: request.rootResourcePath
|
|
|
|
compiler: request.compiler
|
|
|
|
timeout: request.timeout
|
|
|
|
}, (error) ->
|
|
|
|
return callback(error) if error?
|
|
|
|
logger.log project_id: request.project_id, time_taken: Date.now() - timer.start, "done compile"
|
|
|
|
timer.done()
|
|
|
|
|
|
|
|
OutputFileFinder.findOutputFiles request.resources, compileDir, (error, outputFiles) ->
|
|
|
|
return callback(error) if error?
|
|
|
|
callback null, outputFiles
|
|
|
|
|
2014-04-02 07:53:02 -04:00
|
|
|
clearProject: (project_id, _callback = (error) ->) ->
|
|
|
|
callback = (error) ->
|
|
|
|
_callback(error)
|
|
|
|
_callback = () ->
|
|
|
|
|
2014-02-13 06:08:40 -05:00
|
|
|
compileDir = Path.join(Settings.path.compilesDir, project_id)
|
2014-04-02 07:53:02 -04:00
|
|
|
proc = child_process.spawn "rm", ["-r", compileDir]
|
|
|
|
|
|
|
|
proc.on "error", callback
|
|
|
|
|
|
|
|
stderr = ""
|
|
|
|
proc.stderr.on "data", (chunk) -> stderr += chunk.toString()
|
|
|
|
|
|
|
|
proc.on "close", (code) ->
|
|
|
|
if code == 0
|
|
|
|
return callback(null)
|
|
|
|
else
|
|
|
|
return callback(new Error("rm -r #{compileDir} failed: #{stderr}"))
|