Skip to content

Commit 5cf5883

Browse files
committed
Generate FST using all available ecosystems
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent b828cb2 commit 5cf5883

2 files changed

Lines changed: 31 additions & 19 deletions

File tree

cmd/data/testpurls.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

cmd/main.go

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,44 +14,60 @@ package main
1414
import (
1515
"log"
1616
"os"
17+
"path/filepath"
1718
"sort"
1819
"strings"
1920

2021
"github.com/blevesearch/vellum"
2122
)
2223

2324
func 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

Comments
 (0)