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:
@@ -14,6 +14,7 @@ import (
|
|||||||
"packets/internal/utils"
|
"packets/internal/utils"
|
||||||
packets "packets/pkg"
|
packets "packets/pkg"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/pelletier/go-toml/v2"
|
"github.com/pelletier/go-toml/v2"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@@ -162,9 +163,9 @@ var installCmd = &cobra.Command{
|
|||||||
log.Fatal("index.db does not exist, try to use \"packets sync\"")
|
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 {
|
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()
|
f.Close()
|
||||||
|
|
||||||
@@ -174,6 +175,11 @@ var installCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
|
cfg, err := configs.GetConfigTOML()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
for _, inputName := range args {
|
for _, inputName := range args {
|
||||||
|
|
||||||
var exist bool
|
var exist bool
|
||||||
@@ -192,20 +198,41 @@ var installCmd = &cobra.Command{
|
|||||||
fmt.Printf(":: Package %s is already installed\n", inputName)
|
fmt.Printf(":: Package %s is already installed\n", inputName)
|
||||||
continue
|
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)
|
fmt.Printf(":: Downloading (%s) \n", inputName)
|
||||||
p, err := packets.GetPackage(inputName)
|
p, err := packets.GetPackage(inputName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := configs.GetConfigTOML()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
reader := bytes.NewReader(p.PackageF)
|
reader := bytes.NewReader(p.PackageF)
|
||||||
fmt.Printf(":: Installing (%s) \n", inputName)
|
fmt.Printf(":: Installing (%s) \n", inputName)
|
||||||
packets.InstallPackage(reader)
|
packets.InstallPackage(reader, filepath.Join(cfg.Config.Data_d, inputName))
|
||||||
|
|
||||||
if cfg.Config.StorePackages {
|
if cfg.Config.StorePackages {
|
||||||
pkgPath, err := p.Write()
|
pkgPath, err := p.Write()
|
||||||
@@ -259,6 +286,33 @@ var installCmd = &cobra.Command{
|
|||||||
continue
|
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)
|
fmt.Printf(":: Downloading %s \n", pkgs[0].Name)
|
||||||
p, err := packets.GetPackage(pkgs[0].Name)
|
p, err := packets.GetPackage(pkgs[0].Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -272,7 +326,7 @@ var installCmd = &cobra.Command{
|
|||||||
|
|
||||||
reader := bytes.NewReader(p.PackageF)
|
reader := bytes.NewReader(p.PackageF)
|
||||||
fmt.Printf(":: Installing %s \n", pkgs[0].Name)
|
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 {
|
if cfg.Config.StorePackages {
|
||||||
pkgPath, err := p.Write()
|
pkgPath, err := p.Write()
|
||||||
@@ -315,6 +369,33 @@ var installCmd = &cobra.Command{
|
|||||||
continue
|
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)
|
fmt.Printf(":: Downloading %s \n", pkgs[choice].Name)
|
||||||
p, err := packets.GetPackage(pkgs[choice].Name)
|
p, err := packets.GetPackage(pkgs[choice].Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -328,7 +409,7 @@ var installCmd = &cobra.Command{
|
|||||||
|
|
||||||
reader := bytes.NewReader(p.PackageF)
|
reader := bytes.NewReader(p.PackageF)
|
||||||
fmt.Printf(":: Installing (%s) \n", pkgs[choice].Name)
|
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 {
|
if cfg.Config.StorePackages {
|
||||||
pkgPath, err := p.Write()
|
pkgPath, err := p.Write()
|
||||||
@@ -357,3 +438,41 @@ func main() {
|
|||||||
rootCmd.AddCommand(syncCmd)
|
rootCmd.AddCommand(syncCmd)
|
||||||
rootCmd.Execute()
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"packets/internal/consts"
|
"packets/internal/consts"
|
||||||
errors_packets "packets/internal/errors"
|
errors_packets "packets/internal/errors"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/klauspost/compress/zstd"
|
"github.com/klauspost/compress/zstd"
|
||||||
"github.com/pelletier/go-toml/v2"
|
"github.com/pelletier/go-toml/v2"
|
||||||
@@ -255,3 +256,19 @@ func CheckIfPackageInstalled(name string) (bool, error) {
|
|||||||
|
|
||||||
return exists, nil
|
return exists, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetDependencies(name string) ([]string, error) {
|
||||||
|
db, err := sql.Open("sqlite", consts.InstalledDB)
|
||||||
|
if err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
var dependenciesRaw string
|
||||||
|
|
||||||
|
if err := db.QueryRow("SELECT dependencies FROM packages WHERE name = ?", name).Scan(&dependenciesRaw); err != nil {
|
||||||
|
return []string{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Fields(dependenciesRaw), nil
|
||||||
|
}
|
||||||
|
|||||||
13
pkg/main.go
13
pkg/main.go
@@ -8,10 +8,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"packets/configs"
|
|
||||||
"packets/internal/consts"
|
"packets/internal/consts"
|
||||||
errors_packets "packets/internal/errors"
|
errors_packets "packets/internal/errors"
|
||||||
"packets/internal/utils"
|
"packets/internal/utils"
|
||||||
|
|
||||||
utils_lua "packets/internal/utils/lua"
|
utils_lua "packets/internal/utils/lua"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -23,22 +23,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Install exctract and fully install from a package file ( tar.zst )
|
// Install exctract and fully install from a package file ( tar.zst )
|
||||||
func InstallPackage(file io.Reader) error {
|
func InstallPackage(file io.Reader, destDir string) error {
|
||||||
|
|
||||||
manifest, err := utils.ReadManifest(file)
|
manifest, err := utils.ReadManifest(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
name := manifest.Info.Name
|
|
||||||
|
|
||||||
configuration, err := configs.GetConfigTOML()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
destDir := filepath.Join(configuration.Config.Data_d, name)
|
|
||||||
|
|
||||||
zstdReader, err := zstd.NewReader(file)
|
zstdReader, err := zstd.NewReader(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user