diff --git a/internal/utils/lua/luafunctions.go b/internal/utils/lua/luafunctions.go index d3bc2d6..685ef5f 100644 --- a/internal/utils/lua/luafunctions.go +++ b/internal/utils/lua/luafunctions.go @@ -2,12 +2,12 @@ package utils_lua import ( "fmt" - "io" "log" "os" "os/exec" "packets/configs" "packets/internal/consts" + "packets/internal/utils" "path/filepath" "strings" @@ -164,62 +164,16 @@ func LSafeCopy(L *lua.LState) int { return 2 } - src, err := os.Open(oldname) - if err != nil { + if err := utils.CopyDir(oldname, newname); err != nil { L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - - } - defer src.Close() - - status, err := src.Stat() - if err != nil { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - } - - err = os.MkdirAll(filepath.Dir(newname), 0755) - if err != nil { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - } - - dst, err := os.Create(newname) - if err != nil { - if !os.IsExist(err) { - dst, err = os.Open(newname) - if err != nil { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - } - } else { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - } - } - - defer dst.Close() - if err := dst.Chmod(status.Mode()); err != nil { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) - return 2 - } - - _, err = io.Copy(dst, src) - if err != nil { - L.Push(lua.LFalse) - L.Push(lua.LString("[packets] copy failed\n" + err.Error())) + L.Push(lua.LString("[packets] error while copy")) return 2 } L.Push(lua.LTrue) L.Push(lua.LNil) return 2 + } func LSymlink(L *lua.LState) int { diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 7b5425c..cbc006a 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -66,3 +66,94 @@ func ReadManifest(file *os.File) (*configs.Manifest, error) { } return nil, errors_packets.ErrCantFindManifestTOML } + +func CopyDir(src string, dest string) error { + if stats, err := os.Stat(src); err != nil { + return err + } else { + if stats.IsDir() { + files, err := os.ReadDir(src) + if err != nil { + return err + } + + if err := os.MkdirAll(dest, 0755); err != nil { + return err + } + + for _, file := range files { + if file.IsDir() { + CopyDir(filepath.Join(src, file.Name()), filepath.Join(dest, file.Name())) + continue + } + srcFile := filepath.Join(src, file.Name()) + + f, err := os.Create(filepath.Join(dest, file.Name())) + if err != nil { + return err + } + defer f.Close() + + opennedSrcFile, err := os.Open(srcFile) + if err != nil { + return err + } + defer opennedSrcFile.Close() + if _, err := io.Copy(f, opennedSrcFile); err != nil { + return err + } + + } + } else { + if err := CopyFile(src, dest); err != nil { + return err + } + } + + } + return nil +} + +func CopyFile(source string, destination string) error { + + src, err := os.Open(source) + if err != nil { + return err + + } + defer src.Close() + + status, err := src.Stat() + if err != nil { + return err + } + + err = os.MkdirAll(filepath.Dir(destination), 0755) + if err != nil { + return err + } + + dst, err := os.Create(destination) + if err != nil { + if !os.IsExist(err) { + dst, err = os.Open(destination) + if err != nil { + return err + } + } else { + return err + } + } + + defer dst.Close() + if err := dst.Chmod(status.Mode()); err != nil { + return err + } + + _, err = io.Copy(dst, src) + if err != nil { + return err + } + + return nil +} diff --git a/pkg/main.go b/pkg/main.go index 275cc5e..7f196cd 100644 --- a/pkg/main.go +++ b/pkg/main.go @@ -106,3 +106,21 @@ func InstallPackage(file *os.File) error { return nil } + +func ExecuteRemoveScript(path string) error { + + L, err := utils_lua.GetSandBox(".") + if err != nil { + return err + } + + L.SetGlobal("data_dir", lua.LFalse) + L.SetGlobal("script", lua.LString(path)) + L.SetGlobal("build", lua.LNil) + + if err := L.DoFile(path); err != nil { + return err + } + + return nil +}