Improving packets with better dependencie resolution, adding a function to auto resolve dependencies.
This commit is contained in:
@@ -21,10 +21,14 @@ CREATE TABLE packages (
|
||||
|
||||
CREATE TABLE package_dependencies(
|
||||
package_id TEXT NOT NULL,
|
||||
dependencie_id TEXT NOT NULL,
|
||||
version_constraint TEXT NOT NULL
|
||||
dependency_id 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 (
|
||||
query_name TEXT NOT NULL,
|
||||
|
||||
@@ -37,7 +37,7 @@ type Package struct {
|
||||
Arch string
|
||||
Filename string
|
||||
Size int64
|
||||
Dependencies string
|
||||
Dependencies map[string]string
|
||||
|
||||
Signature []byte
|
||||
PublicKey ed25519.PublicKey
|
||||
@@ -213,20 +213,19 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
|
||||
if !success {
|
||||
_, err := db.Exec("DELETE FROM packages WHERE id = ?", p.Manifest.Info.Id)
|
||||
if err != nil {
|
||||
log.Println("Failed to rollback package addition:", err)
|
||||
log.Println("failed to rollback package addition:", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = db.Exec(`
|
||||
INSERT INTO packages (
|
||||
query_name, id, version, dependencies, description,
|
||||
query_name, id, version, description,
|
||||
family, serial, package_d, filename, os, arch, in_cache
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
p.QueryName,
|
||||
p.Manifest.Info.Id,
|
||||
p.Version,
|
||||
p.Dependencies,
|
||||
p.Description,
|
||||
p.Family,
|
||||
p.Serial,
|
||||
@@ -239,6 +238,11 @@ func (p *Package) AddToInstalledDB(inCache int, packagePath string) error {
|
||||
if err != nil {
|
||||
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
|
||||
return err
|
||||
}
|
||||
@@ -259,20 +263,40 @@ func CheckIfPackageInstalled(name string) (bool, error) {
|
||||
return exists, nil
|
||||
}
|
||||
|
||||
func GetDependencies(name string) ([]string, error) {
|
||||
func GetDependencies(id string) (map[string]string, error) {
|
||||
db, err := sql.Open("sqlite", consts.IndexDB)
|
||||
if err != nil {
|
||||
return []string{}, err
|
||||
return map[string]string{}, err
|
||||
}
|
||||
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 {
|
||||
return []string{}, err
|
||||
dependencies := make(map[string]string)
|
||||
|
||||
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) {
|
||||
@@ -287,13 +311,13 @@ func ManifestFileRead(file io.Reader) (configs.Manifest, error) {
|
||||
return manifest, nil
|
||||
}
|
||||
|
||||
func RemoveFromInstalledDB(name string) error {
|
||||
func RemoveFromInstalledDB(id string) error {
|
||||
db, err := sql.Open("sqlite", consts.InstalledDB)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -301,7 +325,7 @@ func RemoveFromInstalledDB(name string) error {
|
||||
}
|
||||
|
||||
// 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 peers []Peer
|
||||
@@ -313,7 +337,7 @@ func GetPackage(name string) (Package, error) {
|
||||
defer db.Close()
|
||||
|
||||
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(
|
||||
&this.QueryName,
|
||||
&this.Version,
|
||||
@@ -329,12 +353,26 @@ func GetPackage(name string) (Package, error) {
|
||||
&this.Family,
|
||||
&this.Serial,
|
||||
&this.Size,
|
||||
&this.Dependencies,
|
||||
)
|
||||
if err != nil {
|
||||
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)
|
||||
this.Filename = filename
|
||||
|
||||
|
||||
Reference in New Issue
Block a user