Add diff -timeout flag.
authorTom Clegg <tom@tomclegg.ca>
Thu, 9 Jul 2020 18:05:07 +0000 (14:05 -0400)
committerTom Clegg <tom@tomclegg.ca>
Thu, 9 Jul 2020 18:05:07 +0000 (14:05 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

diff.go
hgvs/diff.go
hgvs/diff_test.go

diff --git a/diff.go b/diff.go
index 259c870e4be05d2efd4642983b256435872b7b9a..2740104cf8b0a500248608a9ea1d00da2dee4200 100644 (file)
--- 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
index e6e3b33647420c8ce90dad7354bbe35a7fb51db5..78082598690324a1c5badf1491d6c274afc0fc30 100644 (file)
@@ -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++ {
index 6bad3116b2e6a8dd5ee589a5360c6a6e05f806b3..9c04ea75b657c4c21f70a90fcc3e3ea07d6f43ca 100644 (file)
@@ -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)