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(
|
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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user