+ cmd.cases = make([]bool, len(names))
+ if *cases != "" {
+ log.Infof("reading cases file: %s", *cases)
+ var f io.ReadCloser
+ f, err = open(*cases)
+ if err != nil {
+ return 1
+ }
+ defer f.Close()
+ var buf []byte
+ buf, err = io.ReadAll(f)
+ if err != nil {
+ return 1
+ }
+ for _, pattern := range bytes.Split(buf, []byte("\n")) {
+ if len(pattern) == 0 {
+ continue
+ }
+ pattern := string(pattern)
+ idx := -1
+ for i, name := range names {
+ if !strings.Contains(name, pattern) {
+ continue
+ } else if idx >= 0 {
+ err = fmt.Errorf("pattern %q in cases file matches multiple genome IDs: %q, %q", pattern, names[idx], name)
+ return 1
+ } else {
+ idx = i
+ }
+ }
+ if idx < 0 {
+ log.Warnf("pattern %q in cases file does not match any genome IDs", pattern)
+ continue
+ }
+ cmd.cases[idx] = true
+ }
+ }
+