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:
@@ -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([])
|
||||
|
||||
Reference in New Issue
Block a user