"flag"
"fmt"
"io"
- "io/ioutil"
"net/http"
_ "net/http/pprof"
"os"
return 0
} else if err != nil {
return 2
+ } else if flags.NArg() > 0 {
+ err = fmt.Errorf("errant command line arguments after parsed flags: %v", flags.Args())
+ return 2
}
if *pprof != "" {
position int
deletion []byte
insertion []byte
+ hgvsID []byte
}
allcalls := map[string][]*call{}
var mtx sync.Mutex
filename := *inputDir + "/" + fi.Name()
thr.Go(func() error {
log.Printf("reading %s", filename)
- buf, err := ioutil.ReadFile(filename)
+ f, err := open(filename)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ buf, err := io.ReadAll(f)
if err != nil {
return fmt.Errorf("%s: %s", filename, err)
}
+ f.Close()
lines := bytes.Split(buf, []byte{'\n'})
calls := map[string][]*call{}
for lineIdx, line := range lines {
if len(line) == 0 {
continue
}
- if lineIdx & ^0xfff == 0 && thr.Err() != nil {
+ if lineIdx&0xff == 0 && thr.Err() != nil {
return nil
}
fields := bytes.Split(line, []byte{','})
if len(fields) < 8 {
return fmt.Errorf("%s line %d: wrong number of fields (%d < %d): %q", fi.Name(), lineIdx+1, len(fields), 8, line)
}
+ hgvsID := fields[3]
+ if len(hgvsID) < 2 {
+ // "=" reference or ""
+ // non-diffable tile variant
+ continue
+ }
tile, _ := strconv.ParseInt(string(fields[0]), 10, 64)
variant, _ := strconv.ParseInt(string(fields[2]), 10, 64)
position, _ := strconv.ParseInt(string(fields[5]), 10, 64)
position: int(position),
deletion: del,
insertion: ins,
+ hgvsID: hgvsID,
})
}
mtx.Lock()
if len(insertion) == 0 {
insertion = placeholder
}
- _, err = fmt.Fprintf(bufw, "%s\t%d\t.\t%s\t%s\t.\t.\t%s\n", seq, call.position, deletion, insertion, info)
+ _, err = fmt.Fprintf(bufw, "%s\t%d\t%s\t%s\t%s\t.\t.\t%s\n", seq, call.position, call.hgvsID, deletion, insertion, info)
if err != nil {
return err
}