@@ -14,44 +14,60 @@ package main
1414import (
1515 "log"
1616 "os"
17+ "path/filepath"
1718 "sort"
1819 "strings"
1920
2021 "github.com/blevesearch/vellum"
2122)
2223
2324func main () {
24- data , _ := os .ReadFile ("cmd/data/purls.txt" )
25- lines := strings .FieldsFunc (string (data ), func (r rune ) bool {
26- return r == '\n'
27- })
28- sort .Strings (lines )
29- output := strings .Join (lines , "\n " )
30-
31- // #nosec G306
32- err := os .WriteFile ("cmd/data/purls.txt" , []byte (output ), 0644 )
25+ f , err := os .Create ("purls.fst" )
26+ var purlCount int
3327 if err != nil {
34- panic (err )
28+ log . Fatal (err )
3529 }
3630
37- f , err := os .Create ("purls.fst" )
31+ dirname := "cmd/data/"
32+ entries , err := os .ReadDir (dirname )
3833 if err != nil {
3934 log .Fatal (err )
4035 }
36+
4137 builder , err := vellum .New (f , nil )
4238 if err != nil {
4339 log .Fatal (err )
4440 }
4541
46- for _ , line := range lines {
47- err = builder . Insert ([] byte ( line ), 0 )
48- if err != nil {
49- log . Fatal ( err )
42+ for _ , entry := range entries {
43+ if ! entry . IsDir () && strings . HasSuffix ( strings . ToLower ( entry . Name ()), ".txt" ) {
44+ fullPath := filepath . Join ( dirname , entry . Name ())
45+ purlCount += insert_purls ( builder , fullPath )
5046 }
5147 }
5248
5349 err = builder .Close ()
5450 if err != nil {
5551 log .Fatal (err )
5652 }
53+ log .Printf ("FST generated with %d base PackageURLs" , purlCount )
54+ log .Printf ("FST generated at %s" , f .Name ())
55+ }
56+
57+ func insert_purls (builder * vellum.Builder , file string ) int {
58+ var err error
59+ data , _ := os .ReadFile (file )
60+ lines := strings .FieldsFunc (string (data ), func (r rune ) bool {
61+ return r == '\n'
62+ })
63+ sort .Strings (lines )
64+
65+ log .Printf ("Insert PURLs from %s in FST" , file )
66+ for _ , line := range lines {
67+ err = builder .Insert ([]byte (line ), 0 )
68+ if err != nil {
69+ log .Fatal (err )
70+ }
71+ }
72+ return len (lines )
5773}
0 commit comments