diff --git a/app/coffee/ResourceWriter.coffee b/app/coffee/ResourceWriter.coffee index a8b0106..22c8b9f 100644 --- a/app/coffee/ResourceWriter.coffee +++ b/app/coffee/ResourceWriter.coffee @@ -9,12 +9,25 @@ logger = require "logger-sharelatex" module.exports = ResourceWriter = syncResourcesToDisk: (project_id, resources, basePath, callback = (error) ->) -> - @_removeExtraneousFiles resources, basePath, (error) => + @_createDirectory basePath, (error) => return callback(error) if error? - jobs = for resource in resources - do (resource) => - (callback) => @_writeResourceToDisk(project_id, resource, basePath, callback) - async.parallelLimit jobs, 5, callback + @_removeExtraneousFiles resources, basePath, (error) => + return callback(error) if error? + jobs = for resource in resources + do (resource) => + (callback) => @_writeResourceToDisk(project_id, resource, basePath, callback) + async.parallelLimit jobs, 5, callback + + _createDirectory: (basePath, callback = (error) ->) -> + fs.mkdir basePath, (err) -> + if err? + if err.code is 'EEXIST' + return callback() + else + logger.log {err: err, dir:basePath}, "error creating directory" + return callback(err) + else + return callback() _removeExtraneousFiles: (resources, basePath, _callback = (error) ->) -> timer = new Metrics.Timer("unlink-output-files") diff --git a/test/unit/coffee/ResourceWriterTests.coffee b/test/unit/coffee/ResourceWriterTests.coffee index 3e87b5c..5480bd6 100644 --- a/test/unit/coffee/ResourceWriterTests.coffee +++ b/test/unit/coffee/ResourceWriterTests.coffee @@ -7,7 +7,7 @@ path = require "path" describe "ResourceWriter", -> beforeEach -> @ResourceWriter = SandboxedModule.require modulePath, requires: - "fs": @fs = {} + "fs": @fs = { mkdir: sinon.stub().callsArg(1) } "wrench": @wrench = {} "./UrlCache" : @UrlCache = {} "mkdirp" : @mkdirp = sinon.stub().callsArg(1)