private string WritePatchResult(string dir, Results.PatchResult result, bool ignoreUnchanged) { var buffer = new StringBuilder(); buffer.AppendLine(dir); var lines = new List <Results.Line>(); // Flatten the results foreach (var action in result) { var operation = action.Key; if (operation == Results.ReconcileOperation.UNCHANGED && ignoreUnchanged) { continue; } foreach (var entry in action.Value) { lines.Add(new Results.Line(operation, entry)); } } // Sort by filename lines.Sort((x, y) => { return(string.CompareOrdinal(x.Item2.FilePath, y.Item2.FilePath)); }); foreach (var line in lines) { buffer.AppendLine($"{(char)line.Item1} {line.Item2}"); } return(buffer.ToString()); }
private Results.PatchResult GeneratePatch( Results.ScanResult src, Results.ScanResult target, HashSet <string> srcPaths, HashSet <string> targetPaths, HashSet <string> unchanged, HashSet <string> conflicts) { var retVal = new Results.PatchResult(); var additions = new HashSet <string>(srcPaths); int addCount = additions.RemoveWhere(entry => targetPaths.Contains(entry)); retVal[Results.ReconcileOperation.ADD] = new List <FileResult>(addCount); foreach (var entry in additions) { retVal[Results.ReconcileOperation.ADD].Add(src[entry]); } retVal[Results.ReconcileOperation.UNCHANGED] = new List <FileResult>(unchanged.Count); foreach (var entry in unchanged) { retVal[Results.ReconcileOperation.UNCHANGED].Add(src[entry]); } retVal[Results.ReconcileOperation.CONFLICT] = new List <FileResult>(conflicts.Count); foreach (var entry in conflicts) { retVal[Results.ReconcileOperation.CONFLICT].Add(target[entry]); } return(retVal); }