Esempio n. 1
0
        public static List <Diff> GenerateDiffCache(string textA, string textB)
        {
            diff_match_patch dmp = new diff_match_patch();

            (string chars1, string chars2, List <string> lines)a = dmp.diff_linesToChars(textA, textB);

            List <Diff> diffs = dmp.diff_main(a.chars1, a.chars2, true);

            // Convert the diff back to original text.
            dmp.diff_charsToLines(diffs, a.lines);

            // Eliminate freak matches (e.g. blank lines)
            // dmp.diff_cleanupSemantic(diffs);

            return(diffs);
        }
Esempio n. 2
0
        public static string GetDiffMessage(object currentSnapshot, object newSnapshot)
        {
            var currentSnapshotJObject = JObjectHelper.FromObject(currentSnapshot);
            var newSnapshotJObject     = JObjectHelper.FromObject(newSnapshot);

            var dmp       = new diff_match_patch();
            var a         = dmp.diff_linesToChars(currentSnapshotJObject.ToString(), newSnapshotJObject.ToString());
            var lineText1 = (string)a[0];
            var lineText2 = (string)a[1];
            var lineArray = (List <string>)a[2];
            var diffs     = dmp.diff_main(lineText1, lineText2, false);

            dmp.diff_charsToLines(diffs, lineArray);
            dmp.diff_cleanupEfficiency(diffs);

            var builder = new StringBuilder(Environment.NewLine);

            builder.AppendLine("Snapshots do not match");
            builder.AppendLine(RemovedLegendString);
            builder.AppendLine(AddedLegendString);
            builder.AppendLine(Environment.NewLine);

            for (var i = 0; i < diffs.Count; i++)
            {
                var diff = diffs[i];

                var lines = GetLines(diff.text);

                switch (diff.operation)
                {
                case Operation.DELETE:
                    lines.ForEach(l => builder.AppendLine($"-  {l}"));
                    break;

                case Operation.INSERT:
                    lines.ForEach(l => builder.AppendLine($"+  {l}"));
                    break;

                case Operation.EQUAL:
                    GetEqualLines(lines, i == 0, i == diffs.Count - 1).ForEach(l => builder.AppendLine(l));
                    break;
                }
            }

            return(builder.ToString());
        }
Esempio n. 3
0
        private void ShowDifferencesInBrowser(string build1Text, string build2Text)
        {
            var diff        = new diff_match_patch();
            var linesResult = diff.diff_linesToChars(build1Text, build2Text);
            var lineText1   = linesResult[0];
            var lineText2   = linesResult[1];
            var lineArray   = linesResult[2] as List <string>;
            var diffs       = diff.diff_main(lineText1.ToString(), lineText2.ToString(), true);

            diff.diff_charsToLines(diffs, lineArray);

            var diffPrettyHtml = diff.diff_prettyHtmlSidebySide(diffs);

            var mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            using (var outputFile = new StreamWriter(mydocpath + @"\CompareBuilds.html")) { outputFile.WriteLine(diffPrettyHtml); }

            Process.Start("IExplore.exe", mydocpath + @"\CompareBuilds.html");
        }
Esempio n. 4
0
        private void GenerateDiff(MarkdownPage page, string newPage)
        {
            var diffEngine = new diff_match_patch();

            var a         = diffEngine.diff_linesToChars(page.Content, newPage);
            var text1     = (string)a[0];
            var text2     = (string)a[1];
            var lineArray = (List <string>)a[2];


            var diff = diffEngine.diff_main(text1, text2, false);

            diffEngine.diff_charsToLines(diff, lineArray);

            diffEngine.diff_cleanupSemantic(diff);

            var htmlDiff = diffEngine.diff_prettyHtml(diff);

            Frame.Navigate(typeof(ImportDiffPage), Tuple.Create(diff, Page.Id));
        }
Esempio n. 5
0
        private static string GetDiffMessage(JToken old, JToken @new)
        {
            var dmp       = new diff_match_patch();
            var a         = dmp.diff_linesToChars(old.ToString(), @new.ToString());
            var lineText1 = (string)a[0];
            var lineText2 = (string)a[1];
            var lineArray = (List <string>)a[2];
            var diffs     = dmp.diff_main(lineText1, lineText2, false);

            dmp.diff_charsToLines(diffs, lineArray);
            dmp.diff_cleanupEfficiency(diffs);

            var builder = new StringBuilder("\n");

            builder.AppendLine("- Snapshot");
            builder.AppendLine("+ Receieved\n\n");

            for (var i = 0; i < diffs.Count; i++)
            {
                var diff = diffs[i];

                var lines = GetLines(diff.text);

                switch (diff.operation)
                {
                case Operation.DELETE:
                    lines.ForEach(l => builder.AppendLine($"-  {l}"));
                    break;

                case Operation.INSERT:
                    lines.ForEach(l => builder.AppendLine($"+  {l}"));
                    break;

                case Operation.EQUAL:
                    GetEqualLines(lines, i == 0, i == diffs.Count - 1).ForEach(l => builder.AppendLine(l));
                    break;
                }
            }

            return(builder.ToString());
        }