Improving packets with better dependencie resolution, adding a function to auto resolve dependencies.

This commit is contained in:
2025-10-01 18:11:53 -03:00
parent cfb11cf6e6
commit cadf5fedcb
2 changed files with 59 additions and 17 deletions

View File

@@ -21,10 +21,14 @@ CREATE TABLE packages (
CREATE TABLE package_dependencies( CREATE TABLE package_dependencies(
package_id TEXT NOT NULL, package_id TEXT NOT NULL,
dependencie_id TEXT NOT NULL, dependency_id TEXT NOT NULL,
version_constraint TEXT NOT NULL version_constraint TEXT NOT NULL,
PRIMARY KEY (package_id, dependencie_id)
); );
CREATE INDEX index_dependency_id ON package_dependencies(dependency_id);
CREATE TABLE IF NOT EXISTS packages ( CREATE TABLE IF NOT EXISTS packages (
query_name TEXT NOT NULL, query_name TEXT NOT NULL,

View File

@@ -37,7 +37,7 @@ type Package struct {
Arch string Arch string
Filename string Filename string
Size int64 Size int64
Dependencies string Dependencies map[string]string
Signature []byte Signature []byte
PublicKey ed25519.PublicKey PublicKey ed25519.PublicKey
@@ -213,20 +213,19 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
if !success { if !success {
_, err := db.Exec("DELETE FROM packages WHERE id = ?", p.Manifest.Info.Id) _, err := db.Exec("DELETE FROM packages WHERE id = ?", p.Manifest.Info.Id)
if err != nil { if err != nil {
log.Println("Failed to rollback package addition:", err) log.Println("failed to rollback package addition:", err)
} }
} }
}() }()
_, err = db.Exec(` _, err = db.Exec(`
INSERT INTO packages ( INSERT INTO packages (
query_name, id, version, dependencies, description, query_name, id, version, description,
family, serial, package_d, filename, os, arch, in_cache family, serial, package_d, filename, os, arch, in_cache
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
p.QueryName, p.QueryName,
p.Manifest.Info.Id, p.Manifest.Info.Id,
p.Version, p.Version,
p.Dependencies,
p.Description, p.Description,
p.Family, p.Family,
p.Serial, p.Serial,
@@ -239,6 +238,11 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
if err != nil { if err != nil {
return err return err
} }
for depnId, versionConstraint := range p.Dependencies {
_, err = db.Exec("INSERT INTO package_dependencies (package_id, dependencie_id, version_constraint) VALUES (?, ?, ?)", p.Manifest.Info.Id, depnId, versionConstraint)
}
success = true success = true
return err return err
} }
@@ -259,20 +263,40 @@ func CheckIfPackageInstalled(name string) (bool, error) {
return exists, nil return exists, nil
} }
func GetDependencies(name string) ([]string, error) { func GetDependencies(id string) (map[string]string, error) {
db, err := sql.Open("sqlite", consts.IndexDB) db, err := sql.Open("sqlite", consts.IndexDB)
if err != nil { if err != nil {
return []string{}, err return map[string]string{}, err
} }
defer db.Close() defer db.Close()
var dependenciesRaw string rows, err := db.Query("SELECT dependency_id, version_constraint FROM package_dependencies WHERE package_id = ?", id)
if err != nil {
return map[string]string{}, err
}
defer rows.Close()
if err := db.QueryRow("SELECT dependencies FROM packages WHERE id = ?", name).Scan(&dependenciesRaw); err != nil { dependencies := make(map[string]string)
return []string{}, err
for rows.Next() {
var a, versionConstraint string
if err := rows.Scan(&a, &versionConstraint); err != nil {
return map[string]string{}, err
}
dependencies[a] = versionConstraint
} }
return strings.Fields(dependenciesRaw), nil return dependencies, nil
}
func ResolvDependencies(depnList map[string]string) ([]Package, error) {
db, err := sql.Open("sqlite", consts.IndexDB)
if err != nil {
return map[string]string{}, err
}
return []Package{}, nil
} }
func ManifestFileRead(file io.Reader) (configs.Manifest, error) { func ManifestFileRead(file io.Reader) (configs.Manifest, error) {
@@ -287,13 +311,13 @@ func ManifestFileRead(file io.Reader) (configs.Manifest, error) {
return manifest, nil return manifest, nil
} }
func RemoveFromInstalledDB(name string) error { func RemoveFromInstalledDB(id string) error {
db, err := sql.Open("sqlite", consts.InstalledDB) db, err := sql.Open("sqlite", consts.InstalledDB)
if err != nil { if err != nil {
return err return err
} }
if _, err = db.Exec("DELETE FROM packages WHERE id = ?", name); err != nil { if _, err = db.Exec("DELETE FROM packages WHERE id = ?", id); err != nil {
return err return err
} }
@@ -301,7 +325,7 @@ func RemoveFromInstalledDB(name string) error {
} }
// GetPackage retrieves package information from the index database and downloads the package file // GetPackage retrieves package information from the index database and downloads the package file
func GetPackage(name string) (Package, error) { func GetPackage(id string) (Package, error) {
var this Package var this Package
var peers []Peer var peers []Peer
@@ -313,7 +337,7 @@ func GetPackage(name string) (Package, error) {
defer db.Close() defer db.Close()
var packageUrl string var packageUrl string
err = db.QueryRow("SELECT query_name, version, package_url, image_url, description, author, author_verified, os, arch, signature, public_key, family, serial, size, dependencies FROM packages WHERE id = ?", name). err = db.QueryRow("SELECT query_name, version, package_url, image_url, description, author, author_verified, os, arch, signature, public_key, family, serial, size FROM packages WHERE id = ?", id).
Scan( Scan(
&this.QueryName, &this.QueryName,
&this.Version, &this.Version,
@@ -329,12 +353,26 @@ func GetPackage(name string) (Package, error) {
&this.Family, &this.Family,
&this.Serial, &this.Serial,
&this.Size, &this.Size,
&this.Dependencies,
) )
if err != nil { if err != nil {
return Package{}, err return Package{}, err
} }
rows, err := db.Query("SELECT dependency_id, version_constraint FROM package_dependencies WHERE package_id = ?", id)
if err != nil {
return Package{}, err
}
defer rows.Close()
for rows.Next() {
var a, vConstraint string
if err := rows.Scan(&a, &vConstraint); err != nil {
return Package{}, err
}
this.Dependencies[a] = vConstraint
}
filename := path.Base(packageUrl) filename := path.Base(packageUrl)
this.Filename = filename this.Filename = filename