Răsfoiți Sursa

fix read order when retrieving diffs

Brian Gough 10 ani în urmă
părinte
comite
4a6374efe8
1 a modificat fișierele cu 8 adăugiri și 2 ștergeri
  1. 8 2
      services/track-changes/app/coffee/DiffManager.coffee

+ 8 - 2
services/track-changes/app/coffee/DiffManager.coffee

@@ -5,9 +5,11 @@ logger = require "logger-sharelatex"
 
 
 module.exports = DiffManager =
 module.exports = DiffManager =
 	getLatestDocAndUpdates: (project_id, doc_id, fromVersion, toVersion, callback = (error, content, version, updates) ->) ->
 	getLatestDocAndUpdates: (project_id, doc_id, fromVersion, toVersion, callback = (error, content, version, updates) ->) ->
-		UpdatesManager.getDocUpdatesWithUserInfo project_id, doc_id, from: fromVersion, to: toVersion, (error, updates) ->
+		# retrieve the document before retreiving the updates,
+		# because updates are written to mongo after the document
+		DocumentUpdaterManager.getDocument project_id, doc_id, (error, content, version) ->
 			return callback(error) if error?
 			return callback(error) if error?
-			DocumentUpdaterManager.getDocument project_id, doc_id, (error, content, version) ->
+			UpdatesManager.getDocUpdatesWithUserInfo project_id, doc_id, from: fromVersion, to: toVersion, (error, updates) ->
 				return callback(error) if error?
 				return callback(error) if error?
 				callback(null, content, version, updates)
 				callback(null, content, version, updates)
 	
 	
@@ -41,6 +43,10 @@ module.exports = DiffManager =
 			for u in updates when u.broken
 			for u in updates when u.broken
 				return callback new Error "broken-history"
 				return callback new Error "broken-history"
 
 
+			# discard any updates which are ahead of this document version
+			while updates[0]?.v >= version
+				updates.shift()
+
 			lastUpdate = updates[0]
 			lastUpdate = updates[0]
 			if lastUpdate? and lastUpdate.v != version - 1
 			if lastUpdate? and lastUpdate.v != version - 1
 				return callback new Error("latest update version, #{lastUpdate.v}, does not match doc version, #{version}")
 				return callback new Error("latest update version, #{lastUpdate.v}, does not match doc version, #{version}")