Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
Close Stale Issues / close_stale_issues (push) Has been cancelled
repo-sync / repo-sync (push) Has been cancelled
auto-deploy-tencent-scf / pre-check (push) Has been cancelled
auto-deploy-tencent-scf / deploy serverless (push) Has been cancelled
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"io"
|
|
"io/fs"
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/resources"
|
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
|
)
|
|
|
|
var assetFS = resources.GetStaticResources()
|
|
|
|
// GetResourceFileSys file
|
|
func GetResourceFileSys() (filesys.FileSystem, error) {
|
|
inDiskSys := filesys.MakeFsOnDisk()
|
|
// copy from the resources into the target folder on the in memory FS
|
|
if err := copyDirtoDiskFS(".", "bilipro", inDiskSys); err != nil {
|
|
return nil, GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
return inDiskSys, nil
|
|
}
|
|
|
|
func copyFileToDiskFS(src, dst string, diskFS filesys.FileSystem) error {
|
|
// skip all .go files
|
|
if strings.HasSuffix(src, ".go") {
|
|
return nil
|
|
}
|
|
var err error
|
|
var srcFileDesc fs.File
|
|
var dstFileDesc filesys.File
|
|
|
|
if srcFileDesc, err = assetFS.Open(src); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
defer srcFileDesc.Close()
|
|
|
|
if dstFileDesc, err = diskFS.Create(dst); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
defer dstFileDesc.Close()
|
|
|
|
// Note: I had to read the whole string, for some reason io.Copy was not copying the whole content
|
|
input, err := io.ReadAll(srcFileDesc)
|
|
if err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
|
|
_, err = dstFileDesc.Write(input)
|
|
if err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) error {
|
|
var err error
|
|
var fds []fs.DirEntry
|
|
|
|
if err = diskFS.MkdirAll(dst); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
|
|
if fds, err = assetFS.ReadDir(src); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
for _, fd := range fds {
|
|
srcfp := path.Join(src, fd.Name())
|
|
dstfp := path.Join(dst, fd.Name())
|
|
|
|
if fd.IsDir() {
|
|
if err = copyDirtoDiskFS(srcfp, dstfp, diskFS); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
} else {
|
|
if err = copyFileToDiskFS(srcfp, dstfp, diskFS); err != nil {
|
|
return GenErrorMsg(FILE_ERROR, err.Error())
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|