pull file
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
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
This commit is contained in:
83
krew/pkg/utils/fileSys.go
Normal file
83
krew/pkg/utils/fileSys.go
Normal file
@@ -0,0 +1,83 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user