Skip to content

Commit

Permalink
Merge pull request src-d#1084 from vmarkovtsev/master
Browse files Browse the repository at this point in the history
Increase diffmatchcpatch timeout
  • Loading branch information
mcuadros authored Mar 20, 2019
2 parents 948b0c9 + a80a9e5 commit e704ed5
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion utils/diff/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,30 @@ package diff

import (
"bytes"
"time"

"github.com/sergi/go-diff/diffmatchpatch"
)

// Do computes the (line oriented) modifications needed to turn the src
// string into the dst string.
// string into the dst string. The underlying algorithm is Meyers,
// its complexity is O(N*d) where N is min(lines(src), lines(dst)) and d
// is the size of the diff.
func Do(src, dst string) (diffs []diffmatchpatch.Diff) {
// the default timeout is time.Second which may be too small under heavy load
return DoWithTimeout(src, dst, time.Hour)
}

// DoWithTimeout computes the (line oriented) modifications needed to turn the src
// string into the dst string. The `timeout` argument specifies the maximum
// amount of time it is allowed to spend in this function. If the timeout
// is exceeded, the parts of the strings which were not considered are turned into
// a bulk delete+insert and the half-baked suboptimal result is returned at once.
// The underlying algorithm is Meyers, its complexity is O(N*d) where N is
// min(lines(src), lines(dst)) and d is the size of the diff.
func DoWithTimeout (src, dst string, timeout time.Duration) (diffs []diffmatchpatch.Diff) {
dmp := diffmatchpatch.New()
dmp.DiffTimeout = timeout
wSrc, wDst, warray := dmp.DiffLinesToRunes(src, dst)
diffs = dmp.DiffMainRunes(wSrc, wDst, false)
diffs = dmp.DiffCharsToLines(diffs, warray)
Expand Down

0 comments on commit e704ed5

Please sign in to comment.