Fix some tests.
[lightning.git] / diff.go
diff --git a/diff.go b/diff.go
index 1f428082bc7e79c25a9a6212317333cac85ca397..4999643e998e09d0fb9bf387e364c1be494acc6e 100644 (file)
--- a/diff.go
+++ b/diff.go
@@ -1,4 +1,8 @@
-package main
+// Copyright (C) The Lightning Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package lightning
 
 import (
        "bufio"
@@ -8,7 +12,7 @@ import (
        "io"
        "os"
 
-       "git.arvados.org/lightning/hgvs"
+       "github.com/arvados/lightning/hgvs"
 )
 
 type diffFasta struct{}
@@ -24,14 +28,14 @@ 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
                return 0
        } else if err != nil {
                return 2
-       }
-       if len(flags.Args()) != 2 {
+       } else if len(flags.Args()) != 2 {
                err = fmt.Errorf("usage: %s [options] a.fasta b.fasta", prog)
                return 2
        }
@@ -48,6 +52,7 @@ func (cmd *diffFasta) RunCommand(prog string, args []string, stdin io.Reader, st
                        }
                        defer f.Close()
                        scanner := bufio.NewScanner(f)
+                       scanner.Buffer(nil, 64*1024*1024)
                        for scanner.Scan() {
                                buf := scanner.Bytes()
                                if len(buf) > 0 && buf[0] != '>' {
@@ -63,14 +68,14 @@ func (cmd *diffFasta) RunCommand(prog string, args []string, stdin io.Reader, st
                }
        }
 
-       variants := hgvs.Diff(string(fasta[0]), string(fasta[1]))
+       variants, timedOut := hgvs.Diff(string(fasta[0]), string(fasta[1]), *timeout)
        if *offset != 0 {
                for i := range variants {
                        variants[i].Position += *offset
                }
        }
        for _, v := range variants {
-               fmt.Fprintf(stdout, "%s:g.%s\t%s\t%d\t%s\t%s\n", *sequence, v.String(), *sequence, v.Position, v.Ref, v.New)
+               fmt.Fprintf(stdout, "%s:g.%s\t%s\t%d\t%s\t%s\t%v\n", *sequence, v.String(), *sequence, v.Position, v.Ref, v.New, timedOut)
        }
        return 0
 }