1
0
forked from x/icebergs

opt nfs.cat

This commit is contained in:
harveyshao 2021-09-06 15:56:27 +08:00
parent 37ee31219a
commit 1754b933cc
5 changed files with 50 additions and 75 deletions

View File

@ -3,6 +3,7 @@ package nfs
import (
"bufio"
"bytes"
"io"
"os"
"path"
"strings"
@ -25,58 +26,55 @@ func _cat_right(m *ice.Message, name string) bool {
}
return true
}
func _cat_find(m *ice.Message, name string) io.ReadCloser {
if f, e := os.Open(path.Join(m.Option(DIR_ROOT), name)); e == nil {
return f
}
if b, ok := ice.Info.BinPack[name]; ok {
m.Logs("binpack", len(b), name)
return kit.NewReadCloser(bytes.NewBuffer(b))
}
return kit.NewReadCloser(bytes.NewBufferString(m.Cmdx("web.spide", "dev", "raw", "GET", path.Join("/share/local/", name))))
}
func _cat_show(m *ice.Message, name string) {
if !_cat_right(m, name) {
return // 没有权限
}
// 本地文件
if f, e := os.Open(path.Join(m.Option(DIR_ROOT), name)); e == nil {
defer f.Close()
f := _cat_find(m, name)
defer f.Close()
switch cb := m.Optionv(kit.Keycb(CAT)).(type) {
case func(string, int) string:
list := []string{}
bio := bufio.NewScanner(f)
for i := 0; bio.Scan(); i++ {
list = append(list, cb(bio.Text(), i))
}
m.Echo(strings.Join(list, "\n") + "\n")
case func(string, int):
bio := bufio.NewScanner(f)
for i := 0; bio.Scan(); i++ {
cb(bio.Text(), i)
}
default:
if s, e := f.Stat(); m.Assert(e) {
buf := make([]byte, s.Size())
if n, e := f.Read(buf); m.Assert(e) {
m.Log_IMPORT(kit.MDB_FILE, name, kit.MDB_SIZE, n)
m.Echo(string(buf[:n]))
}
}
}
return
}
// 打包文件
if b, ok := ice.Info.BinPack[name]; ok {
m.Logs("binpack", name, kit.MDB_SIZE, len(b))
m.Echo(string(b))
return
}
// 远程文件
switch cb := m.Optionv(kit.Keycb(CAT)).(type) {
case func(string, int) string:
list := []string{}
bio := bufio.NewScanner(f)
for i := 0; bio.Scan(); i++ {
list = append(list, cb(bio.Text(), i))
}
m.Echo(strings.Join(list, "\n") + "\n")
case func(string, int):
bio := bufio.NewScanner(bytes.NewBufferString(m.Cmdx("web.spide", "dev", "raw", "GET", path.Join("/share/local/", name))))
bio := bufio.NewScanner(f)
for i := 0; bio.Scan(); i++ {
cb(bio.Text(), i)
}
default:
m.Cmdy("web.spide", "dev", "raw", "GET", path.Join("/share/local/", name))
buf := make([]byte, ice.MOD_BUFS)
for begin := 0; true; {
n, e := f.Read(buf[begin:])
m.Warn(e != nil && e != io.EOF, e)
m.Log_IMPORT(kit.MDB_FILE, name, kit.MDB_SIZE, n)
if begin += n; begin < len(buf) {
buf = buf[:begin]
break
}
buf = append(buf, make([]byte, ice.MOD_BUFS)...)
}
m.Echo(string(buf))
}
}

View File

@ -14,7 +14,6 @@ import (
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
)
@ -55,42 +54,10 @@ func Script(m *ice.Message, name string) io.Reader {
}
m.Option(ice.MSG_SCRIPT, name)
// 本地文件
back := kit.Split(m.Option(nfs.DIR_ROOT))
for i := len(back) - 1; i >= 0; i-- {
if s, e := os.Open(path.Join(path.Join(back[:i]...), name)); e == nil {
return s
}
}
if s, e := os.Open(name); e == nil {
return s
}
switch strings.Split(name, "/")[0] {
case kit.SSH_ETC, kit.SSH_VAR:
m.Warn(true, ice.ErrNotFound)
return nil
}
// 打包文件
if b, ok := ice.Info.BinPack["/"+name]; ok {
m.Info("binpack %v %v", len(b), name)
return bytes.NewReader(b)
}
// 远程文件
if msg := m.Cmd("web.spide", "dev", "GET", path.Join("/share/local/", name)); msg.Result(0) != ice.ErrWarn {
if msg := m.Cmd("nfs.cat", name); msg.Result(0) != ice.ErrWarn {
return bytes.NewBuffer([]byte(msg.Result()))
}
// 源码文件
if strings.HasPrefix(name, kit.SSH_USR) {
ls := strings.Split(name, "/")
m.Cmd("web.code.git.repos", ls[1], path.Join(kit.SSH_USR, ls[1]))
if s, e := os.Open(name); e == nil {
return s
}
}
return nil
}

View File

@ -71,6 +71,7 @@ const ( // DIR
ETC_MISS = "etc/miss.sh"
ETC_MISS_SH = "etc/miss.sh"
SRC_HELP = "src/help"
SRC_MAIN_SHY = "src/main.shy"
SRC_MAIN_GO = "src/main.go"
SRC_VERSION = "src/version.go"

View File

@ -40,6 +40,9 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_ROOT, dir)
m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) {
if path.Base(value[kit.MDB_PATH]) == "binpack.go" {
return
}
switch strings.Split(value[kit.MDB_PATH], "/")[0] {
case "pluged", "trash":
return
@ -67,7 +70,8 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
}
pack.WriteString(ice.NL)
}
func _pack_contexts(m *ice.Message, pack *os.File) {
func _pack_ctx(m *ice.Message, pack *os.File) {
_pack_dir(m, pack, ice.SRC_HELP)
_pack_dir(m, pack, "src")
pack.WriteString(ice.NL)
}
@ -96,7 +100,7 @@ func init() {
// _pack_dir(m, pack, ice.USR_ICEBERGS)
// _pack_dir(m, pack, ice.USR_TOOLKITS)
_pack_dir(m, pack, ice.USR_INTSHELL)
// _pack_contexts(m, pack)
_pack_ctx(m, pack)
_pack_write(pack, ` }`)
_pack_write(pack, `}`)

View File

@ -461,3 +461,8 @@ func (m *Message) AppendSimple(key ...string) (res []string) {
}
return
}
func (m *Message) SetResult() {
m.Set(MSG_RESULT)
return
}