From 1754b933cc190fa14cd782dba89345ac78599a75 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Mon, 6 Sep 2021 15:56:27 +0800 Subject: [PATCH] opt nfs.cat --- base/nfs/cat.go | 76 +++++++++++++++++++++----------------------- base/ssh/scripts.go | 35 +------------------- conf.go | 1 + core/code/binpack.go | 8 +++-- misc.go | 5 +++ 5 files changed, 50 insertions(+), 75 deletions(-) diff --git a/base/nfs/cat.go b/base/nfs/cat.go index e34a2f48..0b083dc8 100644 --- a/base/nfs/cat.go +++ b/base/nfs/cat.go @@ -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)) } } diff --git a/base/ssh/scripts.go b/base/ssh/scripts.go index e8c4ed4d..57703396 100644 --- a/base/ssh/scripts.go +++ b/base/ssh/scripts.go @@ -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 } diff --git a/conf.go b/conf.go index df633b61..bbca0328 100644 --- a/conf.go +++ b/conf.go @@ -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" diff --git a/core/code/binpack.go b/core/code/binpack.go index 41c52972..2c0b2afc 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -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, `}`) diff --git a/misc.go b/misc.go index b92dd7ae..6ce174af 100644 --- a/misc.go +++ b/misc.go @@ -461,3 +461,8 @@ func (m *Message) AppendSimple(key ...string) (res []string) { } return } + +func (m *Message) SetResult() { + m.Set(MSG_RESULT) + return +}