private static bool ImportVersions(Area ws, ClientStateInfo clientInfo) { lock (ws) { var versionsToImport = clientInfo.SharedInfo.PushedVersions.OrderBy(x => x.Version.Timestamp).ToArray(); Dictionary<Guid, bool> importList = new Dictionary<Guid, bool>(); foreach (var x in versionsToImport) importList[x.Version.ID] = false; int importCount = versionsToImport.Length; var orderedImports = versionsToImport.OrderBy(x => x.Version.Revision).ToList(); while (importCount > 0) { foreach (var x in orderedImports) { if (importList[x.Version.ID] != true) { bool accept; if (!x.Version.Parent.HasValue || !importList.TryGetValue(x.Version.Parent.Value, out accept)) accept = true; if (accept) { ws.ImportVersionNoCommit(clientInfo.SharedInfo, x, true); importList[x.Version.ID] = true; importCount--; } } } } foreach (var x in clientInfo.MergeVersions) ws.ImportVersionNoCommit(clientInfo.SharedInfo, x, false); foreach (var x in clientInfo.UpdatedHeads) ws.ImportHeadNoCommit(x); return true; } }