fallback check for missing files

dot files are not examined by OutputFileFinder, so do an extra check to
make sure those exist

also check for any relative paths in the resources
This commit is contained in:
Brian Gough 2017-09-15 13:41:56 +01:00
parent 0d613a6480
commit 81e8243827

View file

@ -4,6 +4,7 @@ logger = require "logger-sharelatex"
settings = require("settings-sharelatex")
Errors = require "./Errors"
SafeReader = require "./SafeReader"
async = require "async"
module.exports = ResourceStateManager =
@ -50,14 +51,31 @@ module.exports = ResourceStateManager =
resources = ({path: path} for path in resourceList)
callback(null, resources)
checkResourceFiles: (resources, allFiles, directory, callback = (error) ->) ->
checkResourceFiles: (resources, allFiles, basePath, callback = (error) ->) ->
# check the paths are all relative to current directory
for file in resources or []
for dir in file?.path?.split('/')
if dir == '..'
return callback new Error("relative path in resource file list")
# check if any of the input files are not present in list of files
seenFile = {}
for file in allFiles
seenFile[file] = true
missingFiles = (resource.path for resource in resources when not seenFile[resource.path])
if missingFiles.length > 0
logger.err missingFiles:missingFiles, dir:directory, allFiles:allFiles, resources:resources, "missing input files for project"
return callback new Errors.FilesOutOfSyncError("resource files missing in incremental update")
missingFileCandidates = (resource.path for resource in resources when not seenFile[resource.path])
# now check if they are really missing
ResourceStateManager._checkMissingFiles missingFileCandidates, basePath, (missingFiles) ->
if missingFiles?.length > 0
logger.err missingFiles:missingFiles, basePath:basePath, allFiles:allFiles, resources:resources, "missing input files for project"
return callback new Errors.FilesOutOfSyncError("resource files missing in incremental update")
else
callback()
_checkMissingFiles: (missingFileCandidates, basePath, callback = (missingFiles) ->) ->
if missingFileCandidates.length > 0
fileDoesNotExist = (file, cb) ->
fs.stat Path.join(basePath, file), (err) ->
logger.log file:file, err:err, result: err?, "stating potential missing file"
cb(err?)
async.filterSeries missingFileCandidates, fileDoesNotExist, callback
else
callback()
callback([])