mirror of
https://github.com/EnumeratedDev/bpm.git
synced 2026-09-16 10:36:12 +00:00
Change to yaml only database format
This commit is contained in:
+1
-1
@@ -218,7 +218,7 @@ func resolveCommand() {
|
|||||||
for i, term := range searchTerms {
|
for i, term := range searchTerms {
|
||||||
nameResults := make([]*bpmlib.PackageInfo, 0)
|
nameResults := make([]*bpmlib.PackageInfo, 0)
|
||||||
descResults := make([]*bpmlib.PackageInfo, 0)
|
descResults := make([]*bpmlib.PackageInfo, 0)
|
||||||
for _, db := range bpmlib.MainBPMConfig.Databases {
|
for _, db := range bpmlib.BPMDatabases {
|
||||||
for _, entry := range db.Entries {
|
for _, entry := range db.Entries {
|
||||||
if strings.Contains(entry.Info.Name, term) {
|
if strings.Contains(entry.Info.Name, term) {
|
||||||
nameResults = append(nameResults, entry.Info)
|
nameResults = append(nameResults, entry.Info)
|
||||||
|
|||||||
@@ -7,9 +7,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MainBPMConfigStruct struct {
|
type MainBPMConfigStruct struct {
|
||||||
IgnorePackages []string `yaml:"ignore_packages"`
|
IgnorePackages []string `yaml:"ignore_packages"`
|
||||||
CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"`
|
CleanupMakeDependencies bool `yaml:"cleanup_make_dependencies"`
|
||||||
Databases []*BPMDatabase `yaml:"databases"`
|
Databases []configDatabase `yaml:"databases"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type configDatabase struct {
|
||||||
|
Name string `yaml:"name"`
|
||||||
|
Source string `yaml:"source"`
|
||||||
|
Disabled *bool `yaml:"disabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CompilationBPMConfigStruct struct {
|
type CompilationBPMConfigStruct struct {
|
||||||
|
|||||||
+45
-65
@@ -14,27 +14,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type BPMDatabase struct {
|
type BPMDatabase struct {
|
||||||
Name string `yaml:"name"`
|
DatabaseVersion int `yaml:"database_version"`
|
||||||
Source string `yaml:"source"`
|
Entries map[string]*BPMDatabaseEntry `yaml:"entries"`
|
||||||
Disabled *bool `yaml:"disabled"`
|
|
||||||
Entries map[string]*BPMDatabaseEntry
|
|
||||||
VirtualPackages map[string][]string
|
VirtualPackages map[string][]string
|
||||||
|
Source string
|
||||||
}
|
}
|
||||||
|
|
||||||
type BPMDatabaseEntry struct {
|
type BPMDatabaseEntry struct {
|
||||||
Info *PackageInfo `yaml:"info"`
|
Info *PackageInfo `yaml:"info"`
|
||||||
Download string `yaml:"download"`
|
Filepath string `yaml:"filepath"`
|
||||||
DownloadSize uint64 `yaml:"download_size"`
|
DownloadSize uint64 `yaml:"download_size"`
|
||||||
InstalledSize uint64 `yaml:"installed_size"`
|
InstalledSize uint64 `yaml:"installed_size"`
|
||||||
Database *BPMDatabase
|
Database *BPMDatabase
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var BPMDatabases = make(map[string]*BPMDatabase)
|
||||||
|
|
||||||
func (db *BPMDatabase) ContainsPackage(pkg string) bool {
|
func (db *BPMDatabase) ContainsPackage(pkg string) bool {
|
||||||
_, ok := db.Entries[pkg]
|
_, ok := db.Entries[pkg]
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *BPMDatabase) ReadLocalDatabase() error {
|
func (db *configDatabase) ReadLocalDatabase() error {
|
||||||
dbFile := "/var/lib/bpm/databases/" + db.Name + ".bpmdb"
|
dbFile := "/var/lib/bpm/databases/" + db.Name + ".bpmdb"
|
||||||
if _, err := os.Stat(dbFile); err != nil {
|
if _, err := os.Stat(dbFile); err != nil {
|
||||||
return nil
|
return nil
|
||||||
@@ -45,37 +46,23 @@ func (db *BPMDatabase) ReadLocalDatabase() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data := string(bytes)
|
// Unmarshal yaml
|
||||||
for _, b := range strings.Split(data, "---") {
|
database := &BPMDatabase{}
|
||||||
entry := BPMDatabaseEntry{
|
err = yaml.Unmarshal(bytes, database)
|
||||||
Info: &PackageInfo{
|
if err != nil {
|
||||||
Name: "",
|
return err
|
||||||
Description: "",
|
}
|
||||||
Version: "",
|
|
||||||
Revision: 1,
|
// Initialize struct values
|
||||||
Url: "",
|
database.VirtualPackages = make(map[string][]string)
|
||||||
License: "",
|
database.Source = db.Source
|
||||||
Arch: "",
|
|
||||||
Type: "",
|
entriesToRemove := make([]string, 0)
|
||||||
Keep: make([]string, 0),
|
for entryName, entry := range database.Entries {
|
||||||
Depends: make([]string, 0),
|
entry.Database = database
|
||||||
MakeDepends: make([]string, 0),
|
|
||||||
OptionalDepends: make([]string, 0),
|
|
||||||
Conflicts: make([]string, 0),
|
|
||||||
Provides: make([]string, 0),
|
|
||||||
},
|
|
||||||
Download: "",
|
|
||||||
DownloadSize: 0,
|
|
||||||
InstalledSize: 0,
|
|
||||||
Database: db,
|
|
||||||
}
|
|
||||||
err := yaml.Unmarshal([]byte(b), &entry)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create database entries
|
|
||||||
if entry.Info.IsSplitPackage() {
|
if entry.Info.IsSplitPackage() {
|
||||||
|
// Handle split packages
|
||||||
for _, splitPkg := range entry.Info.SplitPackages {
|
for _, splitPkg := range entry.Info.SplitPackages {
|
||||||
// Turn split package into json data
|
// Turn split package into json data
|
||||||
splitPkgJson, err := yaml.Marshal(splitPkg)
|
splitPkgJson, err := yaml.Marshal(splitPkg)
|
||||||
@@ -101,35 +88,41 @@ func (db *BPMDatabase) ReadLocalDatabase() error {
|
|||||||
splitPkgClone.Url = entry.Info.Url
|
splitPkgClone.Url = entry.Info.Url
|
||||||
|
|
||||||
// Create entry for split package
|
// Create entry for split package
|
||||||
db.Entries[splitPkg.Name] = &BPMDatabaseEntry{
|
database.Entries[splitPkg.Name] = &BPMDatabaseEntry{
|
||||||
Info: &splitPkgClone,
|
Info: &splitPkgClone,
|
||||||
Download: entry.Download,
|
Filepath: entry.Filepath,
|
||||||
DownloadSize: entry.DownloadSize,
|
DownloadSize: entry.DownloadSize,
|
||||||
InstalledSize: 0,
|
InstalledSize: 0,
|
||||||
Database: db,
|
Database: database,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add virtual packages to database
|
// Add virtual packages to database
|
||||||
for _, p := range splitPkg.Provides {
|
for _, p := range splitPkg.Provides {
|
||||||
db.VirtualPackages[p] = append(db.VirtualPackages[p], splitPkg.Name)
|
database.VirtualPackages[p] = append(database.VirtualPackages[p], splitPkg.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add current entry to list for removal
|
||||||
|
entriesToRemove = append(entriesToRemove, entryName)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Create entry for package
|
|
||||||
db.Entries[entry.Info.Name] = &entry
|
|
||||||
|
|
||||||
// Add virtual packages to database
|
// Add virtual packages to database
|
||||||
for _, p := range entry.Info.Provides {
|
for _, p := range entry.Info.Provides {
|
||||||
db.VirtualPackages[p] = append(db.VirtualPackages[p], entry.Info.Name)
|
database.VirtualPackages[p] = append(database.VirtualPackages[p], entry.Info.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove entries
|
||||||
|
for _, entryName := range entriesToRemove {
|
||||||
|
delete(database.Entries, entryName)
|
||||||
|
}
|
||||||
|
|
||||||
|
BPMDatabases[db.Name] = database
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *BPMDatabase) SyncLocalDatabaseFile() error {
|
func (db *configDatabase) SyncLocalDatabaseFile() error {
|
||||||
dbFile := "/var/lib/bpm/databases/" + db.Name + ".bpmdb"
|
dbFile := "/var/lib/bpm/databases/" + db.Name + ".bpmdb"
|
||||||
|
|
||||||
// Get URL to database
|
// Get URL to database
|
||||||
@@ -174,10 +167,6 @@ func (db *BPMDatabase) SyncLocalDatabaseFile() error {
|
|||||||
|
|
||||||
func ReadLocalDatabaseFiles() (err error) {
|
func ReadLocalDatabaseFiles() (err error) {
|
||||||
for _, db := range MainBPMConfig.Databases {
|
for _, db := range MainBPMConfig.Databases {
|
||||||
// Initialize struct values
|
|
||||||
db.Entries = make(map[string]*BPMDatabaseEntry)
|
|
||||||
db.VirtualPackages = make(map[string][]string)
|
|
||||||
|
|
||||||
// Read database
|
// Read database
|
||||||
err = db.ReadLocalDatabase()
|
err = db.ReadLocalDatabase()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -188,15 +177,6 @@ func ReadLocalDatabaseFiles() (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDatabase(name string) *BPMDatabase {
|
|
||||||
for _, db := range MainBPMConfig.Databases {
|
|
||||||
if db.Name == name {
|
|
||||||
return db
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
|
func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
|
||||||
split := strings.Split(str, "/")
|
split := strings.Split(str, "/")
|
||||||
if len(split) == 1 {
|
if len(split) == 1 {
|
||||||
@@ -204,7 +184,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
|
|||||||
if pkgName == "" {
|
if pkgName == "" {
|
||||||
return nil, nil, errors.New("could not find database entry for this package")
|
return nil, nil, errors.New("could not find database entry for this package")
|
||||||
}
|
}
|
||||||
for _, db := range MainBPMConfig.Databases {
|
for _, db := range BPMDatabases {
|
||||||
if db.ContainsPackage(pkgName) {
|
if db.ContainsPackage(pkgName) {
|
||||||
return db.Entries[pkgName], db, nil
|
return db.Entries[pkgName], db, nil
|
||||||
}
|
}
|
||||||
@@ -216,7 +196,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
|
|||||||
if dbName == "" || pkgName == "" {
|
if dbName == "" || pkgName == "" {
|
||||||
return nil, nil, errors.New("could not find database entry for this package")
|
return nil, nil, errors.New("could not find database entry for this package")
|
||||||
}
|
}
|
||||||
db := GetDatabase(dbName)
|
db := BPMDatabases[dbName]
|
||||||
if db == nil || !db.ContainsPackage(pkgName) {
|
if db == nil || !db.ContainsPackage(pkgName) {
|
||||||
return nil, nil, errors.New("could not find database entry for this package")
|
return nil, nil, errors.New("could not find database entry for this package")
|
||||||
}
|
}
|
||||||
@@ -227,7 +207,7 @@ func GetDatabaseEntry(str string) (*BPMDatabaseEntry, *BPMDatabase, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func FindReplacement(pkg string) *BPMDatabaseEntry {
|
func FindReplacement(pkg string) *BPMDatabaseEntry {
|
||||||
for _, db := range MainBPMConfig.Databases {
|
for _, db := range BPMDatabases {
|
||||||
for _, entry := range db.Entries {
|
for _, entry := range db.Entries {
|
||||||
for _, replaced := range entry.Info.Replaces {
|
for _, replaced := range entry.Info.Replaces {
|
||||||
if replaced == pkg {
|
if replaced == pkg {
|
||||||
@@ -241,7 +221,7 @@ func FindReplacement(pkg string) *BPMDatabaseEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry {
|
func ResolveVirtualPackage(vpkg string) *BPMDatabaseEntry {
|
||||||
for _, db := range MainBPMConfig.Databases {
|
for _, db := range BPMDatabases {
|
||||||
if v, ok := db.VirtualPackages[vpkg]; ok {
|
if v, ok := db.VirtualPackages[vpkg]; ok {
|
||||||
for _, pkg := range v {
|
for _, pkg := range v {
|
||||||
return db.Entries[pkg]
|
return db.Entries[pkg]
|
||||||
@@ -257,7 +237,7 @@ func (db *BPMDatabase) FetchPackage(pkg string) (string, error) {
|
|||||||
return "", errors.New("could not fetch package '" + pkg + "'")
|
return "", errors.New("could not fetch package '" + pkg + "'")
|
||||||
}
|
}
|
||||||
entry := db.Entries[pkg]
|
entry := db.Entries[pkg]
|
||||||
URL, err := url.JoinPath(db.Source, entry.Download)
|
URL, err := url.JoinPath(db.Source, entry.Filepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -271,12 +251,12 @@ func (db *BPMDatabase) FetchPackage(pkg string) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
out, err := os.Create("/var/cache/bpm/fetched/" + path.Base(entry.Download))
|
out, err := os.Create("/var/cache/bpm/fetched/" + path.Base(entry.Filepath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
defer out.Close()
|
defer out.Close()
|
||||||
|
|
||||||
_, err = io.Copy(out, resp.Body)
|
_, err = io.Copy(out, resp.Body)
|
||||||
return "/var/cache/bpm/fetched/" + path.Base(entry.Download), nil
|
return "/var/cache/bpm/fetched/" + path.Base(entry.Filepath), nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -448,7 +448,7 @@ func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
|||||||
var bpmpkg *BPMPackage
|
var bpmpkg *BPMPackage
|
||||||
|
|
||||||
// Check if package has already been fetched from download link
|
// Check if package has already been fetched from download link
|
||||||
if _, ok := fetchedPackages[entry.Download]; !ok {
|
if _, ok := fetchedPackages[entry.Filepath]; !ok {
|
||||||
// Fetch package from database
|
// Fetch package from database
|
||||||
fetchedPackage, err := entry.Database.FetchPackage(entry.Info.Name)
|
fetchedPackage, err := entry.Database.FetchPackage(entry.Info.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -462,12 +462,12 @@ func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add fetched package to map
|
// Add fetched package to map
|
||||||
fetchedPackages[entry.Download] = fetchedPackage
|
fetchedPackages[entry.Filepath] = fetchedPackage
|
||||||
|
|
||||||
fmt.Printf("Package (%s) was successfully fetched!\n", entry.Info.Name)
|
fmt.Printf("Package (%s) was successfully fetched!\n", entry.Info.Name)
|
||||||
} else {
|
} else {
|
||||||
// Read fetched package
|
// Read fetched package
|
||||||
bpmpkg, err = ReadPackage(fetchedPackages[entry.Download])
|
bpmpkg, err = ReadPackage(fetchedPackages[entry.Filepath])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not read package (%s): %s\n", entry.Info.Name, err)
|
return fmt.Errorf("could not read package (%s): %s\n", entry.Info.Name, err)
|
||||||
}
|
}
|
||||||
@@ -477,14 +477,14 @@ func (operation *BPMOperation) Execute(verbose, force bool) (err error) {
|
|||||||
|
|
||||||
if bpmpkg.PkgInfo.IsSplitPackage() {
|
if bpmpkg.PkgInfo.IsSplitPackage() {
|
||||||
operation.Actions[i] = &InstallPackageAction{
|
operation.Actions[i] = &InstallPackageAction{
|
||||||
File: fetchedPackages[entry.Download],
|
File: fetchedPackages[entry.Filepath],
|
||||||
InstallationReason: action.(*FetchPackageAction).InstallationReason,
|
InstallationReason: action.(*FetchPackageAction).InstallationReason,
|
||||||
BpmPackage: bpmpkg,
|
BpmPackage: bpmpkg,
|
||||||
SplitPackageToInstall: entry.Info.Name,
|
SplitPackageToInstall: entry.Info.Name,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
operation.Actions[i] = &InstallPackageAction{
|
operation.Actions[i] = &InstallPackageAction{
|
||||||
File: fetchedPackages[entry.Download],
|
File: fetchedPackages[entry.Filepath],
|
||||||
InstallationReason: action.(*FetchPackageAction).InstallationReason,
|
InstallationReason: action.(*FetchPackageAction).InstallationReason,
|
||||||
BpmPackage: bpmpkg,
|
BpmPackage: bpmpkg,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user