Example #1
0
        private void AssertConflictDetection(string fileName, RavenJObject localMetadata, RavenJObject sourceMetadata, ServerInfo sourceServer, out bool isConflictResolved)
        {
            var conflict = ConflictDetector.Check(fileName, localMetadata, sourceMetadata, sourceServer.FileSystemUrl);

            isConflictResolved = ConflictResolver.IsResolved(localMetadata, conflict);

            if (conflict != null && !isConflictResolved)
            {
                ConflictArtifactManager.Create(fileName, conflict);

                Publisher.Publish(new ConflictNotification
                {
                    FileName         = fileName,
                    SourceServerUrl  = sourceServer.FileSystemUrl,
                    Status           = ConflictStatus.Detected,
                    RemoteFileHeader = new FileHeader(fileName, localMetadata)
                });

                Log.Debug(
                    "File '{0}' is in conflict with synchronized version from {1} ({2}). File marked as conflicted, conflict configuration item created",
                    fileName, sourceServer.FileSystemUrl, sourceServer.Id);

                throw new SynchronizationException(string.Format("File {0} is conflicted", fileName));
            }
        }
Example #2
0
        private void AssertConflictDetection(string fileName, RavenJObject localMetadata, RavenJObject sourceMetadata, ServerInfo sourceServer, out bool isConflictResolved)
        {
            var conflict = ConflictDetector.Check(fileName, localMetadata, sourceMetadata, sourceServer.FileSystemUrl);

            if (conflict == null)
            {
                isConflictResolved = false;
                return;
            }

            isConflictResolved = ConflictResolver.CheckIfResolvedByRemoteStrategy(localMetadata, conflict);

            if (isConflictResolved)
            {
                return;
            }

            ConflictResolutionStrategy strategy;

            if (ConflictResolver.TryResolveConflict(fileName, conflict, localMetadata, sourceMetadata, out strategy))
            {
                switch (strategy)
                {
                case ConflictResolutionStrategy.RemoteVersion:
                    Log.Debug("Conflict automatically resolved by choosing remote version of the file {0}", fileName);
                    return;

                case ConflictResolutionStrategy.CurrentVersion:

                    Storage.Batch(accessor =>
                    {
                        accessor.UpdateFileMetadata(fileName, localMetadata);

                        ConflictArtifactManager.Delete(fileName, accessor);
                    });

                    Log.Debug("Conflict automatically resolved by choosing current version of the file {0}", fileName);

                    throw new ConflictResolvedInFavourOfCurrentVersionException();
                }
            }

            ConflictArtifactManager.Create(fileName, conflict);

            Publisher.Publish(new ConflictNotification
            {
                FileName         = fileName,
                SourceServerUrl  = sourceServer.FileSystemUrl,
                Status           = ConflictStatus.Detected,
                RemoteFileHeader = new FileHeader(fileName, localMetadata)
            });

            Log.Debug(
                "File '{0}' is in conflict with synchronized version from {1} ({2}). File marked as conflicted, conflict configuration item created",
                fileName, sourceServer.FileSystemUrl, sourceServer.Id);

            throw new SynchronizationException(string.Format("File {0} is conflicted", fileName));
        }