private static void ReportEditVsDeleteConflicts(MergeOrder mergeOrder, IMergeStrategy mergeStrategy, IDictionary<string, XmlNode> fluffedUpWinnerNodes, IDictionary<string, string> allWinnerData, string winnerId, IEnumerable<string> allDeletedByLoserButEditedByWinnerIds, IDictionary<string, string> allCommonAncestorData, IDictionary<string, XmlNode> fluffedUpAncestorNodes, string pathToWinner) { foreach (var allDeletedByLoserButEditedByWinnerId in allDeletedByLoserButEditedByWinnerIds) { // Report winner edited vs loser deleted XmlNode commonNode; if (!fluffedUpAncestorNodes.TryGetValue(allDeletedByLoserButEditedByWinnerId, out commonNode)) { commonNode = XmlUtilities.GetDocumentNodeFromRawXml(allCommonAncestorData[allDeletedByLoserButEditedByWinnerId], new XmlDocument()); fluffedUpAncestorNodes.Add(allDeletedByLoserButEditedByWinnerId, commonNode); } XmlNode winnerNode; if (!fluffedUpWinnerNodes.TryGetValue(allDeletedByLoserButEditedByWinnerId, out winnerNode)) { winnerNode = XmlUtilities.GetDocumentNodeFromRawXml(allWinnerData[allDeletedByLoserButEditedByWinnerId], new XmlDocument()); fluffedUpWinnerNodes.Add(allDeletedByLoserButEditedByWinnerId, winnerNode); } var elementStrategy = mergeStrategy.GetElementStrategy(winnerNode); var generator = elementStrategy.ContextDescriptorGenerator; if (generator != null) { mergeOrder.EventListener.EnteringContext(generator.GenerateContextDescriptor(allWinnerData[allDeletedByLoserButEditedByWinnerId], pathToWinner)); } AddConflictToListener( mergeOrder.EventListener, new EditedVsRemovedElementConflict(commonNode.Name, winnerNode, null, commonNode, mergeOrder.MergeSituation, mergeStrategy.GetElementStrategy(commonNode), winnerId), winnerNode, null, commonNode, generator as IGenerateHtmlContext ?? new SimpleHtmlGenerator()); } }
private static void ReportEditConflictsForBothAddedNewObjectsWithDifferentContent( MergeOrder mergeOrder, IMergeStrategy mergeStrategy, string pathToWinner, IDictionary<string, string> allLoserData, IDictionary<string, XmlNode> fluffedUpLoserNodes, IEnumerable<string> allNewIdsFromBothWithSameData, IEnumerable<string> allNewIdsFromBoth, IDictionary<string, string> allWinnerData, IDictionary<string, XmlNode> fluffedUpWinnerNodes) { foreach (var identifier in allNewIdsFromBoth.Except(allNewIdsFromBothWithSameData)) { //// These were added by both, but they do not have the same content. XmlNode winnerNode; if (!fluffedUpWinnerNodes.TryGetValue(identifier, out winnerNode)) { winnerNode = XmlUtilities.GetDocumentNodeFromRawXml(allWinnerData[identifier], new XmlDocument()); fluffedUpWinnerNodes.Add(identifier, winnerNode); } XmlNode loserNode; if (!fluffedUpLoserNodes.TryGetValue(identifier, out loserNode)) { loserNode = XmlUtilities.GetDocumentNodeFromRawXml(allLoserData[identifier], new XmlDocument()); fluffedUpLoserNodes.Add(identifier, loserNode); } var elementStrategy = mergeStrategy.GetElementStrategy(winnerNode); var generator = elementStrategy.ContextDescriptorGenerator; if (generator != null) { mergeOrder.EventListener.EnteringContext(generator.GenerateContextDescriptor(allWinnerData[identifier], pathToWinner)); } var mergedResult = mergeStrategy.MakeMergedEntry( mergeOrder.EventListener, mergeOrder.MergeSituation.ConflictHandlingMode == MergeOrder.ConflictHandlingModeChoices.WeWin ? winnerNode : loserNode, mergeOrder.MergeSituation.ConflictHandlingMode == MergeOrder.ConflictHandlingModeChoices.WeWin ? loserNode : winnerNode, null); allWinnerData[identifier] = mergedResult; fluffedUpWinnerNodes.Remove(identifier); allLoserData[identifier] = mergedResult; // They really are the same now, but is it a good idea to make them the same? fluffedUpLoserNodes.Remove(identifier); } }