diff --git a/services/track-changes/app/js/DocstoreManager.js b/services/track-changes/app/js/DocstoreManager.js index 0577939342..e388799907 100644 --- a/services/track-changes/app/js/DocstoreManager.js +++ b/services/track-changes/app/js/DocstoreManager.js @@ -1,6 +1,7 @@ const request = require('request') const logger = require('logger-sharelatex') const Settings = require('@overleaf/settings') +const Errors = require('./Errors') function peekDocument(projectId, docId, callback) { const url = `${Settings.apis.docstore.url}/project/${projectId}/doc/${docId}/peek` @@ -15,8 +16,7 @@ function peekDocument(projectId, docId, callback) { if (res.statusCode >= 200 && res.statusCode < 300) { try { body = JSON.parse(body) - } catch (error1) { - error = error1 + } catch (error) { return callback(error) } logger.log( @@ -24,6 +24,10 @@ function peekDocument(projectId, docId, callback) { 'got doc from docstore' ) return callback(null, body.lines.join('\n'), body.version) + } else if (res.statusCode === 404) { + return callback( + new Errors.NotFoundError('doc not found', { projectId, docId }) + ) } else { return callback( new Error( diff --git a/services/track-changes/app/js/Errors.js b/services/track-changes/app/js/Errors.js new file mode 100644 index 0000000000..a59bb1a707 --- /dev/null +++ b/services/track-changes/app/js/Errors.js @@ -0,0 +1,5 @@ +const OError = require('@overleaf/o-error') + +class NotFoundError extends OError {} + +module.exports = { NotFoundError } diff --git a/services/track-changes/app/js/ZipManager.js b/services/track-changes/app/js/ZipManager.js index 7a306a1cad..45c0efa551 100644 --- a/services/track-changes/app/js/ZipManager.js +++ b/services/track-changes/app/js/ZipManager.js @@ -3,6 +3,7 @@ const UpdatesManager = require('./UpdatesManager') const DiffGenerator = require('./DiffGenerator') const DocumentUpdaterManager = require('./DocumentUpdaterManager') const DocstoreManager = require('./DocstoreManager') +const Errors = require('./Errors') const PackManager = require('./PackManager') const yazl = require('yazl') const util = require('util') @@ -47,11 +48,22 @@ async function rewindDoc(projectId, docId, zipfile) { const lastUpdateVersion = lastUpdate.v - const [latestContent, version] = await getLatestContent( - projectId, - docId, - lastUpdateVersion - ) + let latestContent + let version + try { + ;[latestContent, version] = await getLatestContent( + projectId, + docId, + lastUpdateVersion + ) + } catch (err) { + if (err instanceof Errors.NotFoundError) { + // Doc not found in docstore. We can't build its history + return null + } else { + throw err + } + } const id = docId.toString()