Created copydir and copyfile functions in utils, now lua os.copy can copy an entire directory
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
18
pkg/main.go
18
pkg/main.go
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user