// Package diff implements line oriented diffs, similar to the ancient // Unix diff command. // // The current implementation is just a wrapper around Sergi's // go-diff/diffmatchpatch library, which is a go port of Neil // Fraser's google-diff-match-patch code package diff import ( "bytes" "github.com/sergi/go-diff/diffmatchpatch" ) // Do computes the (line oriented) modifications needed to turn the src // string into the dst string. func Do(src, dst string) (diffs []diffmatchpatch.Diff) { dmp := diffmatchpatch.New() wSrc, wDst, warray := dmp.DiffLinesToRunes(src, dst) diffs = dmp.DiffMainRunes(wSrc, wDst, false) diffs = dmp.DiffCharsToLines(diffs, warray) return diffs } // Dst computes and returns the destination text. func Dst(diffs []diffmatchpatch.Diff) string { var text bytes.Buffer for _, d := range diffs { if d.Type != diffmatchpatch.DiffDelete { text.WriteString(d.Text) } } return text.String() } // Src computes and returns the source text func Src(diffs []diffmatchpatch.Diff) string { var text bytes.Buffer for _, d := range diffs { if d.Type != diffmatchpatch.DiffInsert { text.WriteString(d.Text) } } return text.String() }