hard
This commit is contained in:
@@ -454,23 +454,19 @@ func Install(packagepath string, serial uint) error {
|
|||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
stat, _ := f.Stat()
|
|
||||||
|
|
||||||
totalsize := stat.Size()
|
|
||||||
|
|
||||||
counter := &CountingReader{R: f}
|
|
||||||
|
|
||||||
zs, err := zstd.NewReader(f)
|
zs, err := zstd.NewReader(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer zs.Close()
|
||||||
|
|
||||||
tr := tar.NewReader(zs)
|
tr := tar.NewReader(zs)
|
||||||
|
|
||||||
bar := progressbar.NewOptions64(
|
bar := progressbar.NewOptions64(
|
||||||
totalsize,
|
-1,
|
||||||
progressbar.OptionSetDescription("[2/2] Unpacking ..."),
|
progressbar.OptionSetDescription("[2/2] Unpacking ..."),
|
||||||
progressbar.OptionSetWriter(os.Stdout),
|
progressbar.OptionSetWriter(os.Stdout),
|
||||||
|
progressbar.OptionClearOnFinish(),
|
||||||
)
|
)
|
||||||
for {
|
for {
|
||||||
hdr, err := tr.Next()
|
hdr, err := tr.Next()
|
||||||
@@ -513,13 +509,12 @@ func Install(packagepath string, serial uint) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = io.Copy(io.MultiWriter(out), tr)
|
n, err := io.Copy(out, tr)
|
||||||
out.Close()
|
out.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
bar.Add64(n)
|
||||||
bar.Set(int(counter.Total))
|
|
||||||
|
|
||||||
err = os.Chmod(absPath, os.FileMode(hdr.Mode))
|
err = os.Chmod(absPath, os.FileMode(hdr.Mode))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -562,7 +557,7 @@ func Install(packagepath string, serial uint) error {
|
|||||||
ioObject.RawSetString("lines", lua.LNil)
|
ioObject.RawSetString("lines", lua.LNil)
|
||||||
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
||||||
|
|
||||||
if err := L.DoFile(manifest.Hooks.Install); err != nil {
|
if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -994,7 +989,7 @@ func Sync(url string) error {
|
|||||||
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.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("What you want to do?")
|
||||||
fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)")
|
fmt.Println("[y] Yes [n] No, [x] Ignore it and stop to show this message (not recommended)")
|
||||||
}
|
|
||||||
var answer string
|
var answer string
|
||||||
fmt.Scanln(&answer)
|
fmt.Scanln(&answer)
|
||||||
|
|
||||||
@@ -1109,6 +1104,7 @@ func Sync(url string) error {
|
|||||||
bar.Finish()
|
bar.Finish()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -1187,7 +1183,7 @@ func Unninstall(realname string) error {
|
|||||||
|
|
||||||
L.SetGlobal("packets_package_dir", lua.LString(cfg.Config.DataDir))
|
L.SetGlobal("packets_package_dir", lua.LString(cfg.Config.DataDir))
|
||||||
L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.BinDir))
|
L.SetGlobal("packets_bin_dir", lua.LString(cfg.Config.BinDir))
|
||||||
L.SetGlobal("script", lua.LString(manifest.Hooks.Remove))
|
L.SetGlobal("script", lua.LString(path.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)))
|
||||||
L.SetGlobal("data_dir", lua.LString(filepath.Join(cfg.Config.DataDir, realname, "data")))
|
L.SetGlobal("data_dir", lua.LString(filepath.Join(cfg.Config.DataDir, realname, "data")))
|
||||||
|
|
||||||
L.SetGlobal("path_join", L.NewFunction(internal.Ljoin))
|
L.SetGlobal("path_join", L.NewFunction(internal.Ljoin))
|
||||||
@@ -1211,7 +1207,7 @@ func Unninstall(realname string) error {
|
|||||||
ioObject.RawSetString("lines", lua.LNil)
|
ioObject.RawSetString("lines", lua.LNil)
|
||||||
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
||||||
|
|
||||||
if err := L.DoFile(manifest.Hooks.Remove); err != nil {
|
if err := L.DoFile(filepath.Join(cfg.Config.DataDir, realname, manifest.Hooks.Remove)); err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1393,6 +1389,7 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
|
|||||||
totalSize,
|
totalSize,
|
||||||
progressbar.OptionSetDescription("[2/2] Upgrading ..."),
|
progressbar.OptionSetDescription("[2/2] Upgrading ..."),
|
||||||
progressbar.OptionSetWriter(os.Stdout),
|
progressbar.OptionSetWriter(os.Stdout),
|
||||||
|
progressbar.OptionClearOnFinish(),
|
||||||
)
|
)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@@ -1488,11 +1485,11 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
|
|||||||
ioObject.RawSetString("lines", lua.LNil)
|
ioObject.RawSetString("lines", lua.LNil)
|
||||||
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
ioObject.RawSetString("open", L.NewFunction(internal.SafeOpen))
|
||||||
|
|
||||||
if err := L.DoFile(manifest.Hooks.Install); err != nil {
|
if err := L.DoFile(filepath.Join(cfg.Config.DataDir, name, manifest.Hooks.Install)); err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Package %s fully installed", name)
|
fmt.Printf("\nPackage %s fully installed", name)
|
||||||
|
|
||||||
var insert = Installed{
|
var insert = Installed{
|
||||||
Realname: manifest.Info.Name,
|
Realname: manifest.Info.Name,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"archive/tar"
|
"archive/tar"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -82,7 +83,9 @@ func ManifestReadXZ(path string) (*Manifest, error) {
|
|||||||
|
|
||||||
var manifest Manifest
|
var manifest Manifest
|
||||||
|
|
||||||
decoder.Decode(&manifest)
|
if _, err := decoder.Decode(&manifest); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
return &manifest, nil
|
return &manifest, nil
|
||||||
}
|
}
|
||||||
@@ -121,14 +124,17 @@ func DefaultConfigTOML() *ConfigTOML {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IsSafe(str string) bool {
|
func IsSafe(str string) bool {
|
||||||
s, err := filepath.EvalSymlinks(filepath.Clean(str))
|
s, err := filepath.EvalSymlinks(strings.TrimSpace(filepath.Clean(str)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
var cfg ConfigTOML
|
var cfg ConfigTOML
|
||||||
toml.DecodeFile(filepath.Join(PacketsPackageDir(), "config.toml"), &cfg)
|
toml.DecodeFile(filepath.Join(PacketsPackageDir(), "config.toml"), &cfg)
|
||||||
|
|
||||||
if strings.HasPrefix(s, cfg.Config.DataDir) || strings.HasPrefix(s, cfg.Config.BinDir) {
|
fmt.Println("[DEBUG] verificando segurança de", s)
|
||||||
|
fmt.Println("[DEBUG] dataDir =", cfg.Config.DataDir, "binDir =", cfg.Config.BinDir)
|
||||||
|
|
||||||
|
if strings.HasPrefix(s, strings.TrimSpace(cfg.Config.DataDir)) || strings.HasPrefix(s, strings.TrimSpace(cfg.Config.BinDir)) {
|
||||||
return true
|
return true
|
||||||
|
|
||||||
} else if strings.Contains(s, ".ssh") {
|
} else if strings.Contains(s, ".ssh") {
|
||||||
@@ -297,6 +303,7 @@ func SymbolicLua(L *lua.LState) int {
|
|||||||
if err := os.Symlink(fileName, destination); err != nil {
|
if err := os.Symlink(fileName, destination); err != nil {
|
||||||
L.Push(lua.LFalse)
|
L.Push(lua.LFalse)
|
||||||
L.Push(lua.LString("[packets] symlink failed\n" + err.Error()))
|
L.Push(lua.LString("[packets] symlink failed\n" + err.Error()))
|
||||||
|
return 2
|
||||||
}
|
}
|
||||||
|
|
||||||
L.Push(lua.LTrue)
|
L.Push(lua.LTrue)
|
||||||
|
|||||||
Reference in New Issue
Block a user