7b13644421
ci/woodpecker/tag/docker Pipeline was successful
## Summary - Virtual engine detects local members and generates indexes in-memory - MemberIndex.RepoType drives correct URL prefix in merged output - PyPI merger rewrites links to /api/v1/local/ or /api/v1/remote/ appropriately - Includes local PyPI support (cherry-picked from #50) ## Test plan - [x] Upload wheel to local PyPI → install from direct local URL - [x] Create virtual with local + remote → install from virtual URL - [x] Both paths produce correct absolute download URLs Reviewed-on: #51 Co-authored-by: Ben Vincent <ben@unkin.net> Co-committed-by: Ben Vincent <ben@unkin.net>
32 lines
602 B
Go
32 lines
602 B
Go
package virtual
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.unkin.net/unkin/artifactapi/pkg/models"
|
|
)
|
|
|
|
type MemberIndex struct {
|
|
RemoteName string
|
|
RepoType models.RepoType
|
|
Body []byte
|
|
}
|
|
|
|
type IndexMerger interface {
|
|
MergeIndexes(members []MemberIndex, proxyBaseURL string) ([]byte, error)
|
|
}
|
|
|
|
var mergers = map[models.PackageType]IndexMerger{}
|
|
|
|
func RegisterMerger(pt models.PackageType, m IndexMerger) {
|
|
mergers[pt] = m
|
|
}
|
|
|
|
func GetMerger(pt models.PackageType) (IndexMerger, error) {
|
|
m, ok := mergers[pt]
|
|
if !ok {
|
|
return nil, fmt.Errorf("no merger registered for package type %q", pt)
|
|
}
|
|
return m, nil
|
|
}
|