Refactor database schema and update dependency handling in code

This commit is contained in:
2025-10-03 17:03:23 -03:00
parent f25366d40c
commit 4b54a9c74b
3 changed files with 74 additions and 60 deletions

View File

@@ -2,7 +2,6 @@ package main
import ( import (
"bufio" "bufio"
"crypto/ed25519"
"database/sql" "database/sql"
_ "embed" _ "embed"
"fmt" "fmt"
@@ -21,9 +20,6 @@ import (
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
) )
//go:embed ed25519public_key.pem
var publicKey []byte
// init is doing some verifications // init is doing some verifications
func init() { func init() {
log.SetPrefix("error: ") log.SetPrefix("error: ")
@@ -61,7 +57,7 @@ func init() {
log.Fatal(db) log.Fatal(db)
} }
defer db.Close() defer db.Close()
if _, err := db.Exec("CREATE TABLE IF NOT EXISTS packages (query_name TEXT NOT NULL,id TEXT NOT NULL UNIQUE PRIMARY KEY, version TEXT NOT NULL, description TEXT NOT NULL, family TEXT NOT NULL, package_d TEXT NOT NULL, filename TEXT NOT NULL, os TEXT NOT NULL, arch TEXT NOT NULL, in_cache INTEGER NOT NULL DEFAULT 1, serial INTEGER NOT NULL); CREATE TABLE IF NOT EXISTS package_dependencies( package_id TEXT NOT NULL, dependency_name TEXT NOT NULL, version_constraint TEXT NOT NULL, PRIMARY KEY (package_id, dependency_name)); CREATE INDEX index_dependency_name ON package_dependencies(dependency_name);"); err != nil { if _, err := db.Exec(consts.InstalledDatabaseSchema); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} else { } else {
@@ -120,21 +116,6 @@ var syncCmd = &cobra.Command{
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
databaseSig, err := utils.GetFileHTTP(syncUrl + ".sig")
if err != nil {
log.Fatal(err)
}
if syncUrl == consts.DefaultSyncUrl {
if !ed25519.Verify(publicKey, DBB, databaseSig) {
log.Printf("Signature verification failed for the **MAIN** respository [ %s ], the index.db file may be compromised, do wish to continue? (y/N)\n", syncUrl)
fmt.Print(">> ")
var a string
fmt.Scanf("%s", &a)
if a != "y" && a != "Y" {
log.Fatalf("aborting, try googling to know about [ %s ]\n", syncUrl)
}
}
}
if err := os.WriteFile(consts.IndexDB, DBB, 0774); err != nil { if err := os.WriteFile(consts.IndexDB, DBB, 0774); err != nil {
log.Fatal(err) log.Fatal(err)
@@ -197,7 +178,12 @@ var installCmd = &cobra.Command{
continue continue
} }
fmt.Printf("Checking dependencies of (%s)\n", inputName) fmt.Printf("Checking dependencies of (%s)\n", inputName)
dependencies, err := utils.GetDependencies(db, inputName) dependenciesRaw, err := utils.GetDependencies(db, inputName)
if err != nil {
log.Fatal(err)
}
dependencies, err := utils.ResolvDependencies(dependenciesRaw)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -285,7 +271,12 @@ var installCmd = &cobra.Command{
} }
fmt.Printf("Checking dependencies of (%s)\n", pkgs[0].Name) fmt.Printf("Checking dependencies of (%s)\n", pkgs[0].Name)
dependencies, err := utils.GetDependencies(db, pkgs[0].Name) dependenciesRaw, err := utils.GetDependencies(db, inputName)
if err != nil {
log.Fatal(err)
}
dependencies, err := utils.ResolvDependencies(dependenciesRaw)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -369,7 +360,12 @@ var installCmd = &cobra.Command{
} }
fmt.Printf("Checking dependencies of (%s)\n", pkgs[choice].Name) fmt.Printf("Checking dependencies of (%s)\n", pkgs[choice].Name)
dependencies, err := utils.GetDependencies(db, pkgs[choice].Name) dependenciesRaw, err := utils.GetDependencies(db, inputName)
if err != nil {
log.Fatal(err)
}
dependencies, err := utils.ResolvDependencies(dependenciesRaw)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -461,7 +457,7 @@ var removeCmd = &cobra.Command{
log.Fatal(err) log.Fatal(err)
} }
var packageDir string var packageDir string
if err := db.QueryRow("SELECT package_d FROM packages WHERE name = ?", pkgName).Scan(&packageDir); err != nil { if err := db.QueryRow("SELECT package_d FROM packages WHERE query_name = ? OR id = ?", pkgName, pkgName).Scan(&packageDir); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -524,7 +520,7 @@ var listCmd = &cobra.Command{
if err := rows.Scan(&queryName, &name, &version, &description, &packageDir, &os, &arch); err != nil { if err := rows.Scan(&queryName, &name, &version, &description, &packageDir, &os, &arch); err != nil {
log.Fatal(err) log.Fatal(err)
} }
fmt.Printf(" Package %s \n ├──Query name: %s\n ├──Version: %s \n ├──Package dir: %s\n ├──OS: %s\n ├──Arch: %s\n └──Description: %s\n", name, queryName, version, packageDir, os, arch, description) fmt.Printf(" Package %s \n ├──Id: %s\n ├──Version: %s \n ├──Package dir: %s\n ├──OS: %s\n ├──Arch: %s\n └──Description: %s\n", queryName, name, version, packageDir, os, arch, description)
} }
}, },
} }
@@ -586,29 +582,21 @@ func main() {
func AyncFullInstall(dep string, storePackages bool, installPath string, wg *sync.WaitGroup, mu *sync.Mutex) { func AyncFullInstall(dep string, storePackages bool, installPath string, wg *sync.WaitGroup, mu *sync.Mutex) {
defer wg.Done() defer wg.Done()
fmt.Printf(" Downloading %s \n", dep) fmt.Printf(" downloading %s \n", dep)
p, err := utils.GetPackage(dep) p, err := utils.GetPackage(dep)
if err != nil { if err != nil {
log.Println(err)
return
}
allDependencies, err := utils.ResolvDependencies(p.Dependencies)
if err != nil {
log.Println(err)
return
}
for _, dep := range allDependencies {
fmt.Printf(" Installing %s \n", dep)
if err := packets.InstallPackage(p.PackageF, installPath); err != nil {
log.Fatal(err) log.Fatal(err)
} }
fmt.Printf(" installing %s \n", dep)
if err := packets.InstallPackage(p.PackageF, installPath); err != nil {
log.Fatal(err)
}
if storePackages { if storePackages {
_, err := p.Write() _, err := p.Write()
if err != nil { if err != nil {
log.Println(err) log.Fatal(err)
return return
} }
mu.Lock() mu.Lock()
@@ -616,7 +604,7 @@ func AyncFullInstall(dep string, storePackages bool, installPath string, wg *syn
err = p.AddToInstalledDB(1, installPath) err = p.AddToInstalledDB(1, installPath)
if err != nil { if err != nil {
log.Println(err) log.Fatal(err)
return return
} }
} else { } else {
@@ -631,4 +619,3 @@ func AyncFullInstall(dep string, storePackages bool, installPath string, wg *syn
} }
} }
} }
}

View File

@@ -31,8 +31,8 @@ CREATE INDEX index_dependency_name ON package_dependencies(dependency_name);
CREATE TABLE IF NOT EXISTS packages ( CREATE TABLE IF NOT EXISTS packages (
query_name TEXT NOT NULL, query_name TEXT NOT NULL UNIQUE PRIMARY KEY,
id TEXT NOT NULL UNIQUE PRIMARY KEY, id TEXT NOT NULL UNIQUE,
version TEXT NOT NULL, version TEXT NOT NULL,
dependencies TEXT NOT NULL DEFAULT '', dependencies TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL, description TEXT NOT NULL,

View File

@@ -13,3 +13,30 @@ const (
InstalledDB = "/etc/packets/installed.db" InstalledDB = "/etc/packets/installed.db"
DefaultSyncUrl = "https://servidordomal.fun/index.db" DefaultSyncUrl = "https://servidordomal.fun/index.db"
) )
const InstalledDatabaseSchema = `CREATE TABLE IF NOT EXISTS packages (
query_name TEXT NOT NULL UNIQUE PRIMARY KEY,
id TEXT NOT NULL UNIQUE,
version TEXT NOT NULL,
dependencies TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL,
family TEXT NOT NULL,
serial INTEGER NOT NULL UNIQUE,
package_d TEXT NOT NULL,
filename TEXT NOT NULL,
os TEXT NOT NULL,
arch TEXT NOT NULL,
in_cache INTEGER NOT NULL DEFAULT 1,
serial INTEGER NOT NULL
);
CREATE TABLE package_dependencies(
package_id TEXT NOT NULL,
dependency_name TEXT NOT NULL,
version_constraint TEXT NOT NULL,
PRIMARY KEY (package_id, dependency_name)
);
CREATE INDEX index_dependency_name ON package_dependencies(dependency_name);
`