|
|
@@ -6,11 +6,16 @@ Settings = require('settings-sharelatex')
|
|
|
FileTypeManager = require('../Uploads/FileTypeManager')
|
|
|
uuid = require('uuid')
|
|
|
fs = require('fs')
|
|
|
+LockManager = require("../../infrastructure/LockManager")
|
|
|
|
|
|
-module.exports =
|
|
|
+module.exports = UpdateMerger =
|
|
|
mergeUpdate: (user_id, project_id, path, updateRequest, source, callback = (error) ->)->
|
|
|
- self = @
|
|
|
logger.log project_id:project_id, path:path, "merging update from tpds"
|
|
|
+ LockManager.runWithLock project_id,
|
|
|
+ (cb) => UpdateMerger.mergeUpdateWithoutLock(user_id, project_id, path, updateRequest, source, cb)
|
|
|
+ callback
|
|
|
+
|
|
|
+ mergeUpdateWithoutLock: (user_id, project_id, path, updateRequest, source, callback = (error) ->)->
|
|
|
projectLocator.findElementByPath project_id, path, (err, element)=>
|
|
|
# Returns an error if the element is not found
|
|
|
#return callback(err) if err?
|
|
|
@@ -18,7 +23,7 @@ module.exports =
|
|
|
elementId = undefined
|
|
|
if element?
|
|
|
elementId = element._id
|
|
|
- self.p.writeStreamToDisk project_id, elementId, updateRequest, (err, fsPath)->
|
|
|
+ UpdateMerger.p.writeStreamToDisk project_id, elementId, updateRequest, (err, fsPath)->
|
|
|
callback = _.wrap callback, (cb, arg) ->
|
|
|
fs.unlink fsPath, (err) ->
|
|
|
if err?
|
|
|
@@ -28,19 +33,24 @@ module.exports =
|
|
|
FileTypeManager.isBinary path, fsPath, (err, isFile)->
|
|
|
return callback(err) if err?
|
|
|
if isFile
|
|
|
- self.p.processFile project_id, elementId, fsPath, path, source, user_id, callback
|
|
|
+ UpdateMerger.p.processFile project_id, elementId, fsPath, path, source, user_id, callback
|
|
|
else
|
|
|
- self.p.processDoc project_id, elementId, user_id, fsPath, path, source, callback
|
|
|
+ UpdateMerger.p.processDoc project_id, elementId, user_id, fsPath, path, source, callback
|
|
|
|
|
|
deleteUpdate: (user_id, project_id, path, source, callback)->
|
|
|
+ LockManager.runWithLock project_id,
|
|
|
+ (cb) => UpdateMerger.deleteUpdateWithoutLock(user_id, project_id, path, source, cb)
|
|
|
+ (err, doc) ->
|
|
|
+ logger.log project_id:project_id, path:path, "finished processing update to delete entity from tpds"
|
|
|
+ callback()
|
|
|
+
|
|
|
+ deleteUpdateWithoutLock: (user_id, project_id, path, source, callback)->
|
|
|
projectLocator.findElementByPath project_id, path, (err, element, type)->
|
|
|
if err? || !element?
|
|
|
logger.log element:element, project_id:project_id, path:path, "could not find entity for deleting, assuming it was already deleted"
|
|
|
return callback()
|
|
|
logger.log project_id:project_id, path:path, type:type, element:element, "processing update to delete entity from tpds"
|
|
|
- editorController.deleteEntity project_id, element._id, type, source, user_id, (err)->
|
|
|
- logger.log project_id:project_id, path:path, "finished processing update to delete entity from tpds"
|
|
|
- callback()
|
|
|
+ editorController.deleteEntityWithoutLock project_id, element._id, type, source, user_id, callback
|
|
|
|
|
|
p:
|
|
|
|
|
|
@@ -57,7 +67,7 @@ module.exports =
|
|
|
if err?
|
|
|
logger.err err:err, project_id:project_id, doc_id:doc_id, path:path, "error processing file"
|
|
|
return callback(err)
|
|
|
- editorController.addDoc project_id, folder._id, fileName, docLines, source, user_id, callback
|
|
|
+ editorController.addDocWithoutLock project_id, folder._id, fileName, docLines, source, user_id, callback
|
|
|
|
|
|
processFile: (project_id, file_id, fsPath, path, source, user_id, callback)->
|
|
|
finish = (err)->
|
|
|
@@ -71,7 +81,7 @@ module.exports =
|
|
|
else if file_id?
|
|
|
editorController.replaceFileWithoutLock project_id, file_id, fsPath, source, user_id, finish
|
|
|
else
|
|
|
- editorController.addFile project_id, folder?._id, fileName, fsPath, source, user_id, finish
|
|
|
+ editorController.addFileWithoutLock project_id, folder?._id, fileName, fsPath, source, user_id, finish
|
|
|
|
|
|
writeStreamToDisk: (project_id, file_id, stream, callback = (err, fsPath)->)->
|
|
|
if !file_id?
|
|
|
@@ -107,5 +117,5 @@ setupNewEntity = (project_id, path, callback)->
|
|
|
lastIndexOfSlash = path.lastIndexOf("/")
|
|
|
fileName = path[lastIndexOfSlash+1 .. -1]
|
|
|
folderPath = path[0 .. lastIndexOfSlash]
|
|
|
- editorController.mkdirp project_id, folderPath, (err, newFolders, lastFolder)->
|
|
|
+ editorController.mkdirpWithoutLock project_id, folderPath, (err, newFolders, lastFolder)->
|
|
|
callback err, lastFolder, fileName
|