Sync with dataDir

This commit is contained in:
2025-07-31 20:51:00 -03:00
parent 31b1aff1d9
commit c4931334fa

View File

@@ -11,6 +11,7 @@ import (
"encoding/json"
"fmt"
"io"
"io/fs"
"log"
"net"
"net/http"
@@ -378,6 +379,67 @@ func Install(packagepath string, serial uint) error {
var destDir = filepath.Join(cfg.Config.DataDir, name)
if cfg.Config.LastDataDir != cfg.Config.DataDir {
fmt.Printf("Ooops... Data directory has been changed from (%s), to (%s), do you want to cancel the installation and Sync first?\n y/n? ", cfg.Config.LastDataDir, cfg.Config.DataDir)
var answer string
fmt.Scan(&answer)
if answer == "y" || answer == "Y" {
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil {
return err
}
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
if err != nil {
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
bar.Finish()
return err
}
bar.Finish()
}
}
f, err := os.Open(packagepath)
if err != nil {
return err
@@ -907,7 +969,7 @@ func Sync(url string) error {
_, err = os.Stat(filepath.Join(PacketsDir, "index.db"))
if os.IsNotExist(err) {
os.MkdirAll("/etc/packets", 0755)
os.MkdirAll(PacketsDir, 0755)
}
f, err := os.Create(filepath.Join(PacketsDir, "index.db"))
if err != nil {
@@ -917,6 +979,122 @@ func Sync(url string) error {
if _, err = io.Copy(f, resp.Body); err != nil {
return err
}
if cfg.Config.LastDataDir != cfg.Config.DataDir {
fmt.Printf("Ooops... Data directory has been changed on %s do you want to move the packages from (%s), to (%s)\n", filepath.Join(PacketsDir, "config.toml"), cfg.Config.LastDataDir, cfg.Config.DataDir)
fmt.Println("What you want to do?")
fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)")
}
var answer string
fmt.Scanln(&answer)
switch answer {
case "n":
fmt.Println("Just ignoring...")
case "x":
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
if err != nil {
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
return err
}
case "y":
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil {
return err
}
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
if err != nil {
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
return err
}
bar.Finish()
default:
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil {
return err
}
bar.Finish()
}
return nil
}
@@ -1076,6 +1254,68 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
return fmt.Errorf("this package isn't installed")
}
if cfg.Config.LastDataDir != cfg.Config.DataDir {
fmt.Printf("Ooops... Data directory has been changed from (%s), to (%s), do you want to cancel the installation and Sync first?\n y/n? ", cfg.Config.LastDataDir, cfg.Config.DataDir)
var answer string
fmt.Scan(&answer)
if answer == "y" || answer == "Y" {
if err := os.MkdirAll(cfg.Config.DataDir, 0755); err != nil {
return err
}
bar := progressbar.NewOptions64(-1,
progressbar.OptionSetDescription("Moving ..."),
)
err := filepath.WalkDir(cfg.Config.LastDataDir, func(last string, d fs.DirEntry, walkErr error) error {
if walkErr != nil {
return walkErr
}
if last == cfg.Config.LastDataDir {
return nil
}
rel, err := filepath.Rel(cfg.Config.LastDataDir, last)
if err != nil {
return err
}
dest := filepath.Join(cfg.Config.DataDir, rel)
if d.IsDir() {
return os.MkdirAll(dest, 0755)
}
return os.Rename(last, dest)
})
if err != nil {
return err
}
f, err := os.OpenFile(filepath.Join(PacketsDir, "config.toml"), os.O_WRONLY, 0644)
if err != nil {
return err
}
cfg.Config.LastDataDir = cfg.Config.DataDir
encoder := toml.NewEncoder(f)
err = encoder.Encode(cfg)
if err != nil {
bar.Finish()
return err
}
bar.Finish()
}
}
manifest, err := internal.ManifestReadXZ(packagepath)
if err != nil {
log.Panic(err)