public static bool IsDirectChildOfCurrent(NameValueCollection destinationMetadata, NameValueCollection sourceMetadata) { var destVersion = long.Parse(destinationMetadata[SynchronizationConstants.RavenSynchronizationVersion]); var destServerId = destinationMetadata[SynchronizationConstants.RavenSynchronizationSource]; var version = new HistoryItem { ServerId = destServerId, Version = destVersion }; var history = DeserializeHistory(sourceMetadata) ?? new List<HistoryItem>(); var sourceVersion = long.Parse(sourceMetadata[SynchronizationConstants.RavenSynchronizationVersion]); var sourceServerId = sourceMetadata[SynchronizationConstants.RavenSynchronizationSource]; history.Add(new HistoryItem { ServerId = sourceServerId, Version = sourceVersion }); return history.Contains(version); }
public async Task<HttpResponseMessage> ApplyConflict(string filename, long remoteVersion, string remoteServerId, string remoteServerUrl) { var localMetadata = GetLocalMetadata(filename); if (localMetadata == null) throw new HttpResponseException(HttpStatusCode.NotFound); var contentStream = await Request.Content.ReadAsStreamAsync(); var current = new HistoryItem { ServerId = Storage.Id.ToString(), Version = long.Parse(localMetadata[SynchronizationConstants.RavenSynchronizationVersion]) }; var currentConflictHistory = Historian.DeserializeHistory(localMetadata); currentConflictHistory.Add(current); var remote = new HistoryItem { ServerId = remoteServerId, Version = remoteVersion }; var remoteConflictHistory = new JsonSerializer().Deserialize<IList<HistoryItem>>(new JsonTextReader(new StreamReader(contentStream))); remoteConflictHistory.Add(remote); var conflict = new ConflictItem { CurrentHistory = currentConflictHistory, RemoteHistory = remoteConflictHistory, FileName = filename, RemoteServerUrl = Uri.UnescapeDataString(remoteServerUrl) }; ConflictArtifactManager.Create(filename, conflict); Publisher.Publish(new ConflictDetected { FileName = filename, SourceServerUrl = remoteServerUrl }); Log.Debug( "Conflict applied for a file '{0}' (remote version: {1}, remote server id: {2}).", filename, remoteVersion, remoteServerId); return new HttpResponseMessage(HttpStatusCode.NoContent); }
public static bool IsDirectChildOfCurrent(RavenJObject destinationMetadata, RavenJObject sourceMetadata) { long destVersion = destinationMetadata.Value<long>(SynchronizationConstants.RavenSynchronizationVersion); var destServerId = destinationMetadata.Value<string>(SynchronizationConstants.RavenSynchronizationSource); var version = new HistoryItem { ServerId = destServerId, Version = destVersion }; var history = DeserializeHistory(sourceMetadata); long sourceVersion = sourceMetadata.Value<long>(SynchronizationConstants.RavenSynchronizationVersion); var sourceServerId = sourceMetadata.Value<string>(SynchronizationConstants.RavenSynchronizationSource); history.Add(new HistoryItem { ServerId = sourceServerId, Version = sourceVersion }); return history.Contains(version); }