Example #1
0
        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());
        }
Example #2
0
        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);
        }