Skip to content

Commit 6433f7d

Browse files
committed
feat(kudari): use nobori.RegPkg
1 parent 69f1212 commit 6433f7d

File tree

4 files changed

+60
-44
lines changed

4 files changed

+60
-44
lines changed

kudari/rpm.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import (
1717
"github.com/google/uuid"
1818
"github.com/klauspost/compress/zstd"
1919
"github.com/terrapkg/gura/db"
20-
"github.com/terrapkg/gura/util"
20+
"github.com/terrapkg/gura/nobori"
2121
. "github.com/terrapkg/gura/repomd"
22+
"github.com/terrapkg/gura/util"
2223
"go.uber.org/zap"
2324
)
2425

@@ -188,7 +189,7 @@ func rpmFetch(repo db.Repo) {
188189
pkgs[n].FullVer = fullver
189190
pkgs[n].Ver = p.Version.Ver
190191
util.MaybeSuicide(l, "Meta.UnmarshalJSON", pkgs[n].Meta.UnmarshalJSON(rpm2MetaJSON(p)))
191-
tx.Save(&pkgs[n])
192+
nobori.RegPkg(tx, &pkgs[n])
192193
updated++
193194
} else {
194195
newpkgs = append(newpkgs, &db.Pkg{

nobori/TRACE.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// nobori: upstream metadata fetching from various streams
2+
//
3+
// `TRACE.go`: Obtain traces from packages.
4+
// Traces are currently just URLs that potentially point to upstream.
5+
//
6+
// Named after #TRACE_pr.
7+
8+
package nobori
9+
10+
import (
11+
"encoding/json"
12+
13+
"github.com/terrapkg/gura/db"
14+
"github.com/terrapkg/gura/repomd"
15+
"github.com/terrapkg/gura/util"
16+
"go.uber.org/zap"
17+
)
18+
19+
func UpTrace(p db.Pkg, url_ch chan string) {
20+
switch p.Repo.Type {
21+
case db.Rpm:
22+
rpmTrace(p, url_ch)
23+
default:
24+
l.DPanic("unreachable in uptrace")
25+
}
26+
}
27+
28+
func rpmTrace(p db.Pkg, url_ch chan string) {
29+
bs, err := p.Meta.MarshalJSON()
30+
if util.Yeet(l, "error marshaling package metadata", err, zap.String("id", p.ID.String())) {
31+
l.DPanic("DPanic")
32+
return
33+
}
34+
35+
var meta repomd.RPMMeta
36+
json.Unmarshal(bs, &meta)
37+
url_ch <- meta.Url
38+
}

nobori/github.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ func ghRtRelease(stream *db.Stream, remain string, token *GHToken) {
296296
// Fetch the latest tag from a GitHub repository using the GraphQL API
297297
//
298298
// Update the stream's version if a new tag is found.
299-
func ghQlTagCall(prefix, owner, name string, len int, token *GHToken, qlcli ql.Client) ([]string, http.Header) {
299+
func ghQlTagCall(prefix, owner, name string, len int, qlcli ql.Client) ([]string, http.Header) {
300300
var q struct {
301301
Repository struct {
302302
Refs struct {
@@ -330,7 +330,7 @@ func ghQlTagCall(prefix, owner, name string, len int, token *GHToken, qlcli ql.C
330330
func ghQlTag(stream *db.Stream, remain string, token *GHToken, qlcli ql.Client) {
331331
prefix, remain := util.SplitOnce(remain, ' ')
332332
owner, name := util.SplitOnce(remain, '/')
333-
tags, headers := ghQlTagCall(prefix, owner, name, 1, token, qlcli)
333+
tags, headers := ghQlTagCall(prefix, owner, name, 1, qlcli)
334334
if len(tags) == 0 {
335335
return
336336
}
@@ -376,7 +376,7 @@ func GhStrmHdlr(pkg db.Pkg, url string) *db.Stream {
376376

377377
// GHFetchType: TAG
378378
owner, name := util.SplitOnce(repo, '/')
379-
tags, _ := ghQlTagCall("", owner, name, GH_STRM_HDLR_TEST_QL_MAX, tokenql, *qlcli)
379+
tags, _ := ghQlTagCall("", owner, name, GH_STRM_HDLR_TEST_QL_MAX, *qlcli)
380380
if len(tags) > 0 {
381381
for _, tag := range tags {
382382
if prefix, found := strings.CutSuffix(tag, pkg.Ver); found {

nobori/strm.go

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package nobori
55

66
import (
7-
"encoding/json"
87
"errors"
98
"maps"
109
"regexp"
@@ -13,20 +12,19 @@ import (
1312

1413
"github.com/mdobak/go-xerrors"
1514
"github.com/terrapkg/gura/db"
16-
"github.com/terrapkg/gura/repomd"
17-
"github.com/terrapkg/gura/util"
1815
"go.uber.org/zap"
1916
"gorm.io/gorm"
2017
)
2118

22-
var newStrmHdlrs = []func(p db.Pkg, url string, urls []string) bool{
23-
func(p db.Pkg, url string, urls []string) bool {
19+
var newStrmHdlrs = []func(db *gorm.DB, p *db.Pkg, url string, urls []string) bool{
20+
func(dbx *gorm.DB, p *db.Pkg, url string, urls []string) bool {
2421
if !strings.HasPrefix(url, "github.com/") {
2522
return false
2623
}
27-
strm := GhStrmHdlr(p, url)
24+
strm := GhStrmHdlr(*p, url)
2825
strm.Mirrors = strings.Join(urls, ",")
29-
db.DB.Save(strm)
26+
dbx.Save(strm)
27+
p.StreamID = &strm.ID
3028
return true
3129
},
3230
}
@@ -42,24 +40,24 @@ func mangleUrl(url string) (new string) {
4240
}
4341

4442
// Register package in db
45-
func RegPkg(p db.Pkg) error {
43+
func RegPkg(dbx *gorm.DB, p *db.Pkg) error {
4644
if p.StreamID != nil {
47-
return db.DB.Save(p).Error
45+
return dbx.Save(p).Error
4846
}
4947
url_ch := make(chan string)
50-
UpTrace(p, url_ch)
48+
UpTrace(*p, url_ch)
5149
close(url_ch)
5250
urls := map[string]struct{}{}
5351
var strm *db.Stream
5452
recv:
5553
url, ok := <-url_ch
5654
if !ok {
57-
db.DB.Save(p)
58-
return handleNewStrm(p, slices.Collect(maps.Keys(urls)))
55+
dbx.Save(p)
56+
return handleNewStrm(dbx, p, slices.Collect(maps.Keys(urls)))
5957
}
6058
url = mangleUrl(url)
6159
urls[url] = struct{}{}
62-
if e := db.DB.Find(&strm, "? IN STRING_TO_ARRAY(mirrors)", url).Error; e != nil {
60+
if e := dbx.Find(&strm, "? IN STRING_TO_ARRAY(mirrors)", url).Error; e != nil {
6361
if errors.Is(e, gorm.ErrRecordNotFound) {
6462
goto recv
6563
}
@@ -75,44 +73,23 @@ recv:
7573

7674
strm.Mirrors = strings.Join(slices.Collect(maps.Keys(urls)), ",")
7775
p.StreamID = &strm.ID
78-
if err := db.DB.Save(p).Error; err != nil {
76+
if err := dbx.Save(p).Error; err != nil {
7977
return xerrors.Newf("can't save package in db (pkgid %s): %w", p.ID.String(), err)
8078
}
81-
if err := db.DB.Save(strm).Error; err != nil {
79+
if err := dbx.Save(strm).Error; err != nil {
8280
return xerrors.Newf("can't save stream in db (strmid %s): %w", strm.ID.String(), err)
8381
}
8482
return nil
8583
}
8684

87-
func handleNewStrm(p db.Pkg, urls []string) error {
85+
func handleNewStrm(dbx *gorm.DB, p *db.Pkg, urls []string) error {
8886
for _, hdlr := range newStrmHdlrs {
8987
for _, url := range urls {
90-
if hdlr(p, url, urls) {
88+
if hdlr(dbx, p, url, urls) {
9189
return nil
9290
}
9391
}
9492
}
9593
l.Debug("didn't find any existing strm, and no strm supported", zap.String("pkgid", p.ID.String()))
96-
return db.DB.Save(p).Error
97-
}
98-
99-
func UpTrace(p db.Pkg, url_ch chan string) {
100-
switch p.Repo.Type {
101-
case db.Rpm:
102-
rpmTrace(p, url_ch)
103-
default:
104-
l.DPanic("unreachable in uptrace")
105-
}
106-
}
107-
108-
func rpmTrace(p db.Pkg, url_ch chan string) {
109-
bs, err := p.Meta.MarshalJSON()
110-
if util.Yeet(l, "error marshaling package metadata", err, zap.String("id", p.ID.String())) {
111-
l.DPanic("DPanic")
112-
return
113-
}
114-
115-
var meta repomd.RPMMeta
116-
json.Unmarshal(bs, &meta)
117-
url_ch <- meta.Url
94+
return dbx.Save(p).Error
11895
}

0 commit comments

Comments
 (0)