2017-08-01 09:39:57 -04:00
|
|
|
Settings = require "settings-sharelatex"
|
|
|
|
logger = require "logger-sharelatex"
|
|
|
|
crypto = require "crypto"
|
|
|
|
|
2017-08-03 07:15:27 -04:00
|
|
|
# The "state" of a project is a hash of the relevant attributes in the
|
2017-08-03 05:51:21 -04:00
|
|
|
# project object in this case we only need the rootFolder.
|
|
|
|
#
|
2017-08-03 07:15:27 -04:00
|
|
|
# The idea is that it will change if any doc or file is
|
|
|
|
# created/renamed/deleted, and also if the content of any file (not
|
|
|
|
# doc) changes.
|
|
|
|
#
|
|
|
|
# When the hash changes the full set of files on the CLSI will need to
|
|
|
|
# be updated. If it doesn't change then we can overwrite changed docs
|
|
|
|
# in place on the clsi, getting them from the docupdater.
|
2017-08-03 05:51:21 -04:00
|
|
|
#
|
2017-08-07 09:45:04 -04:00
|
|
|
# The docupdater is responsible for setting the key in redis, and
|
|
|
|
# unsetting it if it removes any documents from the doc updater.
|
2017-08-03 05:51:21 -04:00
|
|
|
|
2017-08-01 09:39:57 -04:00
|
|
|
buildState = (project) ->
|
2017-08-03 05:51:21 -04:00
|
|
|
json = JSON.stringify(project.rootFolder)
|
|
|
|
return crypto.createHash('sha1').update(json, 'utf8').digest('hex')
|
2017-08-01 09:39:57 -04:00
|
|
|
|
|
|
|
module.exports = ClsiStateManager =
|
|
|
|
|
2017-08-07 09:45:04 -04:00
|
|
|
computeHash: (project, callback = (err, hash) ->) ->
|
|
|
|
hash = buildState(project)
|
|
|
|
callback(null, hash)
|