فهرست منبع

always create project directory when syncing resources to disk

avoids errors when project is empty
Brian Gough 10 سال پیش
والد
کامیت
26e94f2549
2فایلهای تغییر یافته به همراه19 افزوده شده و 6 حذف شده
  1. 18 5
      services/clsi/app/coffee/ResourceWriter.coffee
  2. 1 1
      services/clsi/test/unit/coffee/ResourceWriterTests.coffee

+ 18 - 5
services/clsi/app/coffee/ResourceWriter.coffee

@@ -9,12 +9,25 @@ logger = require "logger-sharelatex"
 
 
 module.exports = ResourceWriter =
 module.exports = ResourceWriter =
 	syncResourcesToDisk: (project_id, resources, basePath, callback = (error) ->) ->
 	syncResourcesToDisk: (project_id, resources, basePath, callback = (error) ->) ->
-		@_removeExtraneousFiles resources, basePath, (error) =>
+		@_createDirectory basePath, (error) =>
 			return callback(error) if 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) ->) ->
 	_removeExtraneousFiles: (resources, basePath, _callback = (error) ->) ->
 		timer = new Metrics.Timer("unlink-output-files")
 		timer = new Metrics.Timer("unlink-output-files")

+ 1 - 1
services/clsi/test/unit/coffee/ResourceWriterTests.coffee

@@ -7,7 +7,7 @@ path = require "path"
 describe "ResourceWriter", ->
 describe "ResourceWriter", ->
 	beforeEach ->
 	beforeEach ->
 		@ResourceWriter = SandboxedModule.require modulePath, requires:
 		@ResourceWriter = SandboxedModule.require modulePath, requires:
-			"fs": @fs = {}
+			"fs": @fs = { mkdir: sinon.stub().callsArg(1) }
 			"wrench": @wrench = {}
 			"wrench": @wrench = {}
 			"./UrlCache" : @UrlCache = {}
 			"./UrlCache" : @UrlCache = {}
 			"mkdirp" : @mkdirp = sinon.stub().callsArg(1)
 			"mkdirp" : @mkdirp = sinon.stub().callsArg(1)