Created copydir and copyfile functions in utils, now lua os.copy can copy an entire directory

This commit is contained in:
2025-09-19 22:18:34 -03:00
parent 3a068ed90b
commit 35cbc2e47c
3 changed files with 113 additions and 50 deletions

View File

@@ -2,12 +2,12 @@ package utils_lua
import ( import (
"fmt" "fmt"
"io"
"log" "log"
"os" "os"
"os/exec" "os/exec"
"packets/configs" "packets/configs"
"packets/internal/consts" "packets/internal/consts"
"packets/internal/utils"
"path/filepath" "path/filepath"
"strings" "strings"
@@ -164,62 +164,16 @@ func LSafeCopy(L *lua.LState) int {
return 2 return 2
} }
src, err := os.Open(oldname) if err := utils.CopyDir(oldname, newname); err != nil {
if err != nil {
L.Push(lua.LFalse) L.Push(lua.LFalse)
L.Push(lua.LString("[packets] copy failed\n" + err.Error())) L.Push(lua.LString("[packets] error while copy"))
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()))
return 2 return 2
} }
L.Push(lua.LTrue) L.Push(lua.LTrue)
L.Push(lua.LNil) L.Push(lua.LNil)
return 2 return 2
} }
func LSymlink(L *lua.LState) int { func LSymlink(L *lua.LState) int {

View File

@@ -66,3 +66,94 @@ func ReadManifest(file *os.File) (*configs.Manifest, error) {
} }
return nil, errors_packets.ErrCantFindManifestTOML 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
}

View File

@@ -106,3 +106,21 @@ func InstallPackage(file *os.File) error {
return nil 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
}