44package nobori
55
66import (
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
5452recv:
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