mirror of
https://github.com/Squibid/rph.git
synced 2025-10-19 19:34:04 +00:00
- Add vendordep add - Add vendordep remove - Add vendordep list - Refactor downloading
130 lines
3.1 KiB
Go
130 lines
3.1 KiB
Go
package vendordep
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"io"
|
|
"io/fs"
|
|
"log/slog"
|
|
"rph/utils"
|
|
)
|
|
|
|
type JavaDepedency struct {
|
|
GroupId string `json:"groupId"`
|
|
ArtifactId string `json:"artifactId"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
type JniDependency struct {
|
|
GroupId string `json:"groupId"`
|
|
ArtifactId string `json:"artifactId"`
|
|
Version string `json:"version"`
|
|
IsJar bool `json:"isJar"`
|
|
SkipInvalidPlatforms bool `json:"skipInvalidPlatforms"`
|
|
ValidPlatforms []string `json:"validPlatforms"`
|
|
SimMode string `json:"simMode"`
|
|
}
|
|
|
|
type CppDependency struct {
|
|
GroupId string `json:"groupId"`
|
|
ArtifactId string `json:"artifactId"`
|
|
Version string `json:"version"`
|
|
LibName string `json:"libName"`
|
|
HeaderClassifier string `json:"headerClassifier"`
|
|
SharedLibrary bool `json:"sharedLibrary"`
|
|
SkipInvalidPlatforms bool `json:"skipInvalidPlatforms"`
|
|
BinaryPlatforms []string `json:"binaryPlatforms"`
|
|
SimMode string `json:"simMode"`
|
|
}
|
|
|
|
type Vendordep struct {
|
|
FileName string `json:"filename"`
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
FrcYear utils.StringOrNumber `json:"frcYear"`
|
|
UUID string `json:"uuid"`
|
|
MavenUrls []string `json:"mavenUrls"`
|
|
JsonUrl string `json:"jsonUrl"`
|
|
JavaDependencies []JavaDepedency `json:"javaDependencies"`
|
|
JniDependencies []JniDependency `json:"jniDependencies"`
|
|
CppDependencies []CppDependency `json:"cppDependencies"`
|
|
}
|
|
|
|
// Matches check if one vendor dep matches another in any real useful way
|
|
func (v *Vendordep) Matches(other Vendordep, strict bool) bool {
|
|
if other.Name != "" && v.Name == other.Name {
|
|
if other.Version != "" && v.Version == other.Version {
|
|
return true
|
|
}
|
|
}
|
|
if other.UUID != "" && v.UUID == other.UUID { return true }
|
|
if !strict {
|
|
if other.JsonUrl != "" && v.JsonUrl == other.JsonUrl { return true }
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func Parse(vendordepFile io.Reader) (*Vendordep, error) {
|
|
var vendordep Vendordep
|
|
|
|
if err := json.NewDecoder(vendordepFile).Decode(&vendordep); err != nil {
|
|
slog.Error("Invalid vendor dependency Error decoding JSON", "error", err)
|
|
return nil, err
|
|
}
|
|
|
|
return &vendordep, nil
|
|
}
|
|
|
|
func ListVendorDeps(projectFs fs.FS) ([]Vendordep, error) {
|
|
var out []Vendordep
|
|
|
|
err := fs.WalkDir(projectFs, "vendordeps", func(path string, d fs.DirEntry,
|
|
err error) error {
|
|
if err != nil { return err }
|
|
if d.IsDir() { return nil }
|
|
|
|
file, err := projectFs.Open(path)
|
|
if err != nil {
|
|
slog.Error("unable to open vendor directory", "error", err)
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
dep, err := Parse(file)
|
|
if err != nil {
|
|
slog.Error("Unable to parse vendordep file", "file", d.Name, "error", err)
|
|
return err
|
|
}
|
|
|
|
out = append(out, *dep)
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
slog.Error("Unable to read vendordep fs", "error", err)
|
|
return nil, err
|
|
}
|
|
|
|
return out, nil
|
|
}
|
|
|
|
func FindVendorDepFromName(name string, fs fs.FS) (*Vendordep, error) {
|
|
deps, err := ListVendorDeps(fs);
|
|
if err != nil {
|
|
slog.Error("Unable to find vendor deps", "error", err)
|
|
return nil, err
|
|
}
|
|
|
|
for _, dep := range deps {
|
|
if dep.Name == name {
|
|
return &dep, nil
|
|
}
|
|
}
|
|
|
|
return nil, errors.New("Vendordep not found")
|
|
}
|
|
|
|
func ShowInfo(Vendordep) {
|
|
}
|