cmd/dbdiff: support byID directory

Change-Id: If1573f8b86adeb58be56c787b5e79607e146460a
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/354390
Trust: Roland Shoemaker <roland@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Julie Qiu <julie@golang.org>
diff --git a/cmd/dbdiff/main.go b/cmd/dbdiff/main.go
index 6a39aef..759522d 100644
--- a/cmd/dbdiff/main.go
+++ b/cmd/dbdiff/main.go
@@ -29,7 +29,9 @@
 		for _, f := range dir {
 			fpath := filepath.Join(path, f.Name())
 			if f.IsDir() {
-				loadDir(fpath)
+				if err := loadDir(fpath); err != nil {
+					return err
+				}
 				continue
 			}
 			content, err := ioutil.ReadFile(fpath)
@@ -40,12 +42,19 @@
 				if err := json.Unmarshal(content, &index); err != nil {
 					return fmt.Errorf("unable to parse %q: %s", fpath, err)
 				}
+			} else if path == filepath.Join(dbPath, "byID") {
+				var entry osv.Entry
+				if err := json.Unmarshal(content, &entry); err != nil {
+					return fmt.Errorf("unable to parse %q: %s", fpath, err)
+				}
+				fname := strings.TrimPrefix(fpath, dbPath)
+				dbMap[fname] = []osv.Entry{entry}
 			} else {
 				var entries []osv.Entry
 				if err := json.Unmarshal(content, &entries); err != nil {
 					return fmt.Errorf("unable to parse %q: %s", fpath, err)
 				}
-				module := strings.TrimSuffix(strings.TrimPrefix(fpath, dbPath), filepath.Ext(fpath))
+				module := strings.TrimPrefix(fpath, dbPath)
 				dbMap[module] = entries
 			}
 		}