public static void WriteUnifiedDiff(Algorithm.Diff.Diff diff, TextWriter writer, string fromfile, string tofile, int context) { writer.Write("--- "); writer.WriteLine(fromfile); writer.Write("+++ "); writer.WriteLine(tofile); ArrayList hunks = new ArrayList(); foreach (Algorithm.Diff.Diff.Hunk hunk in diff) { Algorithm.Diff.Diff.Hunk hunk2 = null; if (hunks.Count > 0) { hunk2 = (Algorithm.Diff.Diff.Hunk)hunks[hunks.Count - 1]; } if (hunk.Same) { if (hunk2 == null) { if (hunk.Left.Count > context) { hunks.Add(hunk.Crop(hunk.Left.Count - context, 0)); } else { hunks.Add(hunk); } } else if (hunk.Left.Count <= (context * 2)) { hunks.Add(hunk); } else { hunks.Add(hunk.Crop(0, hunk.Left.Count - context)); WriteUnifiedDiffSection(writer, hunks); hunks.Clear(); if (hunk.Left.Count > context) { hunks.Add(hunk.Crop(hunk.Left.Count - context, 0)); } else { hunks.Add(hunk); } } continue; } hunks.Add(hunk); } if ((hunks.Count > 0) && ((hunks.Count != 1) || !((Algorithm.Diff.Diff.Hunk)hunks[0]).Same)) { WriteUnifiedDiffSection(writer, hunks); } }
private static void WriteUnifiedDiffSection(TextWriter writer, ArrayList hunks) { Algorithm.Diff.Diff.Hunk hunk = (Algorithm.Diff.Diff.Hunk)hunks[0]; Algorithm.Diff.Diff.Hunk hunk2 = (Algorithm.Diff.Diff.Hunk)hunks[hunks.Count - 1]; writer.Write("@@ -"); writer.Write((int)(hunk.Left.Start + 1)); writer.Write(","); writer.Write((int)((hunk2.Left.End - hunk.Left.Start) + 1)); writer.Write(" +"); writer.Write((int)(hunk.Right.Start + 1)); writer.Write(","); writer.Write((int)((hunk2.Right.End - hunk.Right.Start) + 1)); writer.WriteLine(" @@"); foreach (Algorithm.Diff.Diff.Hunk hunk3 in hunks) { if (hunk3.Same) { WriteBlock(writer, ' ', hunk3.Left); continue; } WriteBlock(writer, '-', hunk3.Left); WriteBlock(writer, '+', hunk3.Right); } }
public override bool Equals(object o) { Algorithm.Diff.Diff.Hunk hunk = o as Algorithm.Diff.Diff.Hunk; return((((this.s1start == hunk.s1start) && (this.s1start == hunk.s1end)) && ((this.s1start == hunk.s2start) && (this.s1start == hunk.s2end))) && (this.same == hunk.same)); }