From: Tom Clegg Date: Thu, 9 Jul 2020 18:05:07 +0000 (-0400) Subject: Add diff -timeout flag. X-Git-Url: https://git.arvados.org/lightning.git/commitdiff_plain/701b1d8a25780ae77f6a4d05ef25103b7ea2cbd8?ds=sidebyside Add diff -timeout flag. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/diff.go b/diff.go index 259c870e4b..2740104cf8 100644 --- a/diff.go +++ b/diff.go @@ -24,6 +24,7 @@ func (cmd *diffFasta) RunCommand(prog string, args []string, stdin io.Reader, st flags.SetOutput(stderr) offset := flags.Int("offset", 0, "coordinate offset") sequence := flags.String("sequence", "chr1", "sequence label") + timeout := flags.Duration("timeout", 0, "timeout (examples: \"1s\", \"1ms\")") err = flags.Parse(args) if err == flag.ErrHelp { err = nil @@ -63,7 +64,7 @@ func (cmd *diffFasta) RunCommand(prog string, args []string, stdin io.Reader, st } } - variants := hgvs.Diff(string(fasta[0]), string(fasta[1])) + variants := hgvs.Diff(string(fasta[0]), string(fasta[1]), *timeout) if *offset != 0 { for i := range variants { variants[i].Position += *offset diff --git a/hgvs/diff.go b/hgvs/diff.go index e6e3b33647..7808259869 100644 --- a/hgvs/diff.go +++ b/hgvs/diff.go @@ -30,9 +30,13 @@ func (v *Variant) String() string { } } -func Diff(a, b string) []Variant { +func Diff(a, b string, timeout time.Duration) []Variant { dmp := diffmatchpatch.New() - diffs := cleanup(dmp.DiffCleanupEfficiency(dmp.DiffBisect(a, b, time.Time{}))) + var deadline time.Time + if timeout > 0 { + deadline = time.Now().Add(timeout) + } + diffs := cleanup(dmp.DiffCleanupEfficiency(dmp.DiffBisect(a, b, deadline))) pos := 1 var variants []Variant for i := 0; i < len(diffs); i++ { diff --git a/hgvs/diff_test.go b/hgvs/diff_test.go index 6bad3116b2..9c04ea75b6 100644 --- a/hgvs/diff_test.go +++ b/hgvs/diff_test.go @@ -61,7 +61,7 @@ func (s *diffSuite) TestDiff(c *check.C) { } { c.Log(trial) var vars []string - for _, v := range Diff(trial.a, trial.b) { + for _, v := range Diff(trial.a, trial.b, 0) { vars = append(vars, v.String()) } c.Check(vars, check.DeepEquals, trial.expect)