now InstallPackage function from packets package don't try to read a config.toml, it get the path to install by a param; added async dependency install process

This commit is contained in:
2025-09-21 22:52:03 -03:00
parent f34308367e
commit ff986ef943
3 changed files with 148 additions and 21 deletions

View File

@@ -14,6 +14,7 @@ import (
"packets/internal/utils"
packets "packets/pkg"
"path/filepath"
"sync"
"github.com/pelletier/go-toml/v2"
"github.com/spf13/cobra"
@@ -162,9 +163,9 @@ var installCmd = &cobra.Command{
log.Fatal("index.db does not exist, try to use \"packets sync\"")
}
}
f, err := os.OpenFile(consts.IndexDB, os.O_WRONLY, 0)
f, err := os.OpenFile(consts.InstalledDB, os.O_WRONLY, 0)
if err != nil {
log.Fatalf("can't open [ %s ]. Are you running packets as root?\n", consts.IndexDB)
log.Fatalf("can't open [ %s ]. Are you running packets as root?\n", consts.InstalledDB)
}
f.Close()
@@ -174,6 +175,11 @@ var installCmd = &cobra.Command{
}
defer db.Close()
cfg, err := configs.GetConfigTOML()
if err != nil {
log.Fatal(err)
}
for _, inputName := range args {
var exist bool
@@ -192,20 +198,41 @@ var installCmd = &cobra.Command{
fmt.Printf(":: Package %s is already installed\n", inputName)
continue
}
fmt.Printf(":: Checking dependencies of (%s)\n", inputName)
dependencies, err := utils.GetDependencies(inputName)
if err != nil {
log.Fatal(err)
}
if len(dependencies) > 0 {
var wg sync.WaitGroup
var mu sync.Mutex
fmt.Printf(":: Packets will install %s and %d dependencies\nPackages to install:\n", inputName, len(dependencies))
fmt.Println(dependencies)
fmt.Println("Are you sure? (y/N)")
var a string
fmt.Scanf("%s", &a)
if a != "y" && a != "Y" {
os.Exit(1)
}
for _, depn := range dependencies {
wg.Add(1)
go AyncFullInstall(depn, cfg.Config.StorePackages, filepath.Join(cfg.Config.Data_d, inputName), &wg, &mu)
}
wg.Wait()
}
fmt.Printf(":: Downloading (%s) \n", inputName)
p, err := packets.GetPackage(inputName)
if err != nil {
log.Fatal(err)
}
cfg, err := configs.GetConfigTOML()
if err != nil {
log.Fatal(err)
}
reader := bytes.NewReader(p.PackageF)
fmt.Printf(":: Installing (%s) \n", inputName)
packets.InstallPackage(reader)
packets.InstallPackage(reader, filepath.Join(cfg.Config.Data_d, inputName))
if cfg.Config.StorePackages {
pkgPath, err := p.Write()
@@ -259,6 +286,33 @@ var installCmd = &cobra.Command{
continue
}
fmt.Printf(":: Checking dependencies of (%s)\n", pkgs[0].Name)
dependencies, err := utils.GetDependencies(pkgs[0].Name)
if err != nil {
log.Fatal(err)
}
if len(dependencies) > 0 {
var wg sync.WaitGroup
var mu sync.Mutex
fmt.Printf(":: Packets will install %s and %d dependencies\nPackages to install:\n", pkgs[0].Name, len(dependencies))
fmt.Println(dependencies)
fmt.Println("Are you sure? (y/N)")
var a string
fmt.Scanf("%s", &a)
if a != "y" && a != "Y" {
os.Exit(1)
}
for _, depn := range dependencies {
wg.Add(1)
go AyncFullInstall(depn, cfg.Config.StorePackages, filepath.Join(cfg.Config.Data_d, inputName), &wg, &mu)
}
wg.Wait()
}
fmt.Printf(":: Downloading %s \n", pkgs[0].Name)
p, err := packets.GetPackage(pkgs[0].Name)
if err != nil {
@@ -272,7 +326,7 @@ var installCmd = &cobra.Command{
reader := bytes.NewReader(p.PackageF)
fmt.Printf(":: Installing %s \n", pkgs[0].Name)
packets.InstallPackage(reader)
packets.InstallPackage(reader, filepath.Join(cfg.Config.Data_d, pkgs[0].Name))
if cfg.Config.StorePackages {
pkgPath, err := p.Write()
@@ -315,6 +369,33 @@ var installCmd = &cobra.Command{
continue
}
fmt.Printf(":: Checking dependencies of (%s)\n", pkgs[choice].Name)
dependencies, err := utils.GetDependencies(pkgs[choice].Name)
if err != nil {
log.Fatal(err)
}
if len(dependencies) > 0 {
var wg sync.WaitGroup
var mu sync.Mutex
fmt.Printf(":: Packets will install %s and %d dependencies\nPackages to install:\n", pkgs[choice].Name, len(dependencies))
fmt.Println(dependencies)
fmt.Println("Are you sure? (y/N)")
var a string
fmt.Scanf("%s", &a)
if a != "y" && a != "Y" {
os.Exit(1)
}
for _, depn := range dependencies {
wg.Add(1)
go AyncFullInstall(depn, cfg.Config.StorePackages, filepath.Join(cfg.Config.Data_d, pkgs[choice].Name), &wg, &mu)
}
wg.Wait()
}
fmt.Printf(":: Downloading %s \n", pkgs[choice].Name)
p, err := packets.GetPackage(pkgs[choice].Name)
if err != nil {
@@ -328,7 +409,7 @@ var installCmd = &cobra.Command{
reader := bytes.NewReader(p.PackageF)
fmt.Printf(":: Installing (%s) \n", pkgs[choice].Name)
packets.InstallPackage(reader)
packets.InstallPackage(reader, filepath.Join(cfg.Config.Data_d, pkgs[choice].Name))
if cfg.Config.StorePackages {
pkgPath, err := p.Write()
@@ -357,3 +438,41 @@ func main() {
rootCmd.AddCommand(syncCmd)
rootCmd.Execute()
}
func AyncFullInstall(dep string, storePackages bool, installPath string, wg *sync.WaitGroup, mu *sync.Mutex) {
defer wg.Done()
fmt.Printf("Downloading %s \n", dep)
p, err := packets.GetPackage(dep)
if err != nil {
log.Println("--ERROR--\n", err)
return
}
reader := bytes.NewReader(p.PackageF)
fmt.Printf("Installing %s \n", dep)
packets.InstallPackage(reader, installPath)
if storePackages {
pkgPath, err := p.Write()
if err != nil {
log.Println("--ERROR--\n", err)
return
}
mu.Lock()
defer mu.Unlock()
err = p.AddToInstalledDB(1, pkgPath)
if err != nil {
log.Println("--ERROR--\n", err)
return
}
} else {
mu.Lock()
defer mu.Unlock()
err := p.AddToInstalledDB(0, "")
if err != nil {
log.Println("--ERROR--\n", err)
return
}
}
}