From a3e3d9a82e56ca09237f34e52afd203e9c15e7eb Mon Sep 17 00:00:00 2001 From: harveyshao Date: Thu, 17 Feb 2022 11:26:13 +0800 Subject: [PATCH] opt code --- base/cli/daemon.go | 7 +- base/cli/qrcode.go | 2 +- base/cli/runtime.go | 23 +++--- base/cli/system.go | 7 +- base/nfs/dir.go | 11 ++- base/nfs/save.go | 4 +- base/nfs/tar.go | 10 ++- base/nfs/trash.go | 2 +- base/tcp/port.go | 9 ++- base/web/dream.go | 3 +- base/web/route.go | 3 +- base/web/serve.go | 7 +- base/web/share.go | 1 + base/web/space.go | 2 +- conf.go | 1 + core/chat/header.go | 3 +- core/code/autogen.go | 14 +++- core/code/binpack.go | 90 ++++++++++----------- core/code/compile.go | 21 +++-- core/code/inner.go | 10 +-- core/code/install.go | 34 ++++---- core/code/pprof.go | 2 +- core/code/publish.go | 104 ++++++++++-------------- core/code/upgrade.go | 25 ++++-- core/code/webpack.go | 184 +++++++++++++++++++++++-------------------- core/wiki/word.go | 4 +- info.go | 2 +- logs.go | 2 +- meta.go | 25 ++++++ misc.go | 16 ++-- misc/git/server.go | 7 +- 31 files changed, 348 insertions(+), 287 deletions(-) diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 36a0fa79..277d55d8 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -83,6 +83,7 @@ const ( BACK = "back" FROM = "from" MAIN = "main" + KILL = "kill" OPEN = "open" CLOSE = "close" @@ -113,15 +114,13 @@ func init() { m.Cmdy(DAEMON, kit.Split(m.Option(ice.CMD))) }}, RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(DAEMON, STOP) - m.Sleep3s() - m.Cmdy(DAEMON, START) + m.Cmdy(DAEMON, STOP).Sleep3s().Cmdy(DAEMON, START) }}, STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.OptionFields(m.Config(mdb.FIELD)) m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, m.OptionSimple(mdb.HASH)).Table(func(index int, value map[string]string, head []string) { m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, m.OptionSimple(mdb.HASH), STATUS, STOP) - m.Cmdy(SYSTEM, "kill", value[PID]) + m.Cmdy(SYSTEM, KILL, value[PID]) }) }}, }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { diff --git a/base/cli/qrcode.go b/base/cli/qrcode.go index b8499487..056704af 100644 --- a/base/cli/qrcode.go +++ b/base/cli/qrcode.go @@ -141,7 +141,7 @@ func init() { m.Option(FG, kit.Select(BLUE, arg, 1)) if m.IsCliUA() { - _qrcode_cli(m, kit.Select(m.Conf("share", kit.Keym("domain")), arg, 0)) + _qrcode_cli(m, kit.Select(ice.Info.Domain, arg, 0)) } else { _qrcode_web(m, kit.Select(m.Option(ice.MSG_USERWEB), arg, 0)) } diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 0adf92af..45133dff 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -21,11 +21,6 @@ func _runtime_init(m *ice.Message) { m.Conf(RUNTIME, kit.Keys(MAKE, strings.ToLower(key)), value) }) - // 环境变量 conf - for _, k := range []string{CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} { - m.Conf(RUNTIME, kit.Keys(CONF, k), kit.Env(k)) - } - // 主机信息 host m.Conf(RUNTIME, kit.Keys(HOST, GOARCH), runtime.GOARCH) m.Conf(RUNTIME, kit.Keys(HOST, GOOS), runtime.GOOS) @@ -66,6 +61,11 @@ func _runtime_init(m *ice.Message) { // 启动次数 boot m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT), kit.Int(m.Conf(RUNTIME, kit.Keys(BOOT, mdb.COUNT)))+1) m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), _system_find(m, os.Args[0])) + + // 环境变量 conf + for _, k := range []string{CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} { + m.Conf(RUNTIME, kit.Keys(CONF, k), kit.Env(k)) + } } func _runtime_hostinfo(m *ice.Message) { m.Push("nCPU", strings.Count(m.Cmdx(nfs.CAT, "/proc/cpuinfo"), "processor")) @@ -83,9 +83,8 @@ func _runtime_diskinfo(m *ice.Message) { m.Push("", value, head) } }) - m.Display("/plugin/story/pie.js?field=Size") - m.RenameAppend("%iused", "piused") - m.RenameAppend("Use%", "Usep") + m.RenameAppend("%iused", "piused", "Use%", "Usep") + m.DisplayStory("pie.js?field=Size") } func NodeInfo(m *ice.Message, kind, name string) { @@ -97,17 +96,17 @@ func NodeInfo(m *ice.Message, kind, name string) { const ( MAKE = "make" TEST = "test" - CONF = "conf" HOST = "host" BOOT = "boot" + CONF = "conf" NODE = "node" ) const ( GOARCH = "GOARCH" - X386 = "386" AMD64 = "amd64" - ARM64 = "arm64" + X386 = "386" ARM = "arm" + ARM64 = "arm64" GOOS = "GOOS" LINUX = "linux" @@ -188,7 +187,7 @@ func init() { m.StatusTimeCount() }}, PROCKILL: {Name: "prockill", Help: "结束进程", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(SYSTEM, "kill", m.Option("PID")) + m.Cmdy(SYSTEM, KILL, m.Option("PID")) m.ProcessRefresh30ms() }}, DISKINFO: {Name: "diskinfo", Help: "磁盘信息", Hand: func(m *ice.Message, arg ...string) { diff --git a/base/cli/system.go b/base/cli/system.go index 4694abb1..cd1faf5a 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -21,7 +21,7 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd { // 运行目录 if cmd.Dir = m.Option(CMD_DIR); len(cmd.Dir) > 0 { if m.Log_EXPORT(CMD_DIR, cmd.Dir); !kit.FileExists(cmd.Dir) { - os.MkdirAll(cmd.Dir, ice.MOD_DIR) + nfs.MkdirAll(m, cmd.Dir) } } @@ -67,7 +67,7 @@ func _system_find(m *ice.Message, bin string, dir ...string) string { return bin } if strings.HasPrefix(bin, nfs.PWD) { - return kit.Path(bin) + return kit.Path(m.Option(CMD_DIR), bin) } if len(dir) == 0 { dir = append(dir, strings.Split(kit.Env(PATH), ice.DF)...) @@ -107,8 +107,7 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) { m.Cost(CODE, cmd.ProcessState.ExitCode(), ctx.ARGS, cmd.Args) } - m.Push(mdb.TIME, m.Time()) - m.Push(CODE, int(cmd.ProcessState.ExitCode())) + m.Push(mdb.TIME, m.Time()).Push(CODE, int(cmd.ProcessState.ExitCode())) } func IsSuccess(m *ice.Message) bool { return m.Append(CODE) == "0" || m.Append(CODE) == "" diff --git a/base/nfs/dir.go b/base/nfs/dir.go index 0e2a0392..6fbd1f8e 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -201,6 +201,10 @@ func Dir(m *ice.Message, sort string) *ice.Message { m.Copy(m.Cmd(DIR, PWD).Sort(sort)) return m } +func MkdirAll(m *ice.Message, p string) error { + m.Log_EXPORT("mkdir", "dir", p) + return os.MkdirAll(p, ice.MOD_DIR) +} const ( TYPE_ALL = "all" @@ -214,6 +218,10 @@ const ( DIR_TYPE = "dir_type" DIR_DEEP = "dir_deep" DIR_REG = "dir_reg" + + DIR_DEF_FIELDS = "time,path,size,action" + DIR_WEB_FIELDS = "time,size,path,action,link" + DIR_CLI_FIELDS = "path,size,time" ) const DIR = "dir" @@ -251,8 +259,9 @@ func init() { } _dir_list(m, kit.Select(PWD, m.Option(DIR_ROOT)), kit.Select(PWD, arg, 0), 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), kit.Regexp(m.Option(DIR_REG)), - kit.Split(kit.Select(kit.Select("time,path,size,action", m.OptionFields()), kit.Join(kit.Slice(arg, 1))))) + kit.Split(kit.Select(kit.Select(DIR_DEF_FIELDS, m.OptionFields()), kit.Join(kit.Slice(arg, 1))))) m.SortTimeR(mdb.TIME) + m.StatusTimeCount() }}, }}) } diff --git a/base/nfs/save.go b/base/nfs/save.go index 57305e67..60577af2 100644 --- a/base/nfs/save.go +++ b/base/nfs/save.go @@ -34,7 +34,7 @@ func _save_file(m *ice.Message, name string, text ...string) { func _push_file(m *ice.Message, name string, text ...string) { p := path.Join(m.Option(DIR_ROOT), name) if strings.Contains(p, ice.PS) { - os.MkdirAll(path.Dir(p), ice.MOD_DIR) + MkdirAll(m, path.Dir(p)) } if f, e := os.OpenFile(p, os.O_WRONLY|os.O_APPEND|os.O_CREATE, ice.MOD_FILE); m.Assert(e) { @@ -70,7 +70,7 @@ func _link_file(m *ice.Message, name string, from string) { return } os.Remove(name) - os.MkdirAll(path.Dir(name), ice.MOD_DIR) + MkdirAll(m, path.Dir(name)) if e := os.Link(from, name); e != nil { m.Warn(os.Symlink(from, name), ice.ErrFailure, from) } diff --git a/base/nfs/tar.go b/base/nfs/tar.go index 7bfa4016..d0792d80 100644 --- a/base/nfs/tar.go +++ b/base/nfs/tar.go @@ -8,6 +8,7 @@ import ( "strings" ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/mdb" kit "shylinux.com/x/toolkits" ) @@ -15,7 +16,14 @@ const TAR = "tar" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - TAR: {Name: "tar file path auto", Help: "打包", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + TAR: {Name: "tar file path auto", Help: "打包", Action: map[string]*ice.Action{ + mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("cli.system", "tar", "zcvf", arg) + }}, + mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy("cli.system", "tar", "xvf", arg) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option("cmd_dir", m.Option(DIR_ROOT)) m.Debug("cmd_dir: %v", m.Option("cmd_dir")) m.Cmdy("cli.system", "tar", "zcvf", arg) diff --git a/base/nfs/trash.go b/base/nfs/trash.go index 46a1b426..8dbf9ce5 100644 --- a/base/nfs/trash.go +++ b/base/nfs/trash.go @@ -22,7 +22,7 @@ func _trash_create(m *ice.Message, name string) { h := kit.Hashs(f) p := path.Join(m.Config(PATH), h[:2], h) - os.MkdirAll(path.Dir(p), ice.MOD_DIR) + MkdirAll(m, path.Dir(p)) os.Rename(name, p) m.Cmdy(mdb.INSERT, TRASH, "", mdb.HASH, FILE, p, FROM, name) } diff --git a/base/tcp/port.go b/base/tcp/port.go index eacd8244..e34b0901 100644 --- a/base/tcp/port.go +++ b/base/tcp/port.go @@ -30,7 +30,7 @@ func _port_right(m *ice.Message, arg ...string) string { if _, e := os.Stat(p); e == nil { continue } - os.MkdirAll(p, ice.MOD_DIR) + nfs.MkdirAll(m, p) m.Log_SELECT(PORT, i) return m.Config(CURRENT, i) @@ -57,10 +57,15 @@ func init() { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { m.Option(nfs.DIR_ROOT, m.Conf(cli.DAEMON, kit.Keym(nfs.PATH))) - m.Cmd(nfs.DIR, nfs.PWD, "time,path,size").Table(func(index int, value map[string]string, head []string) { + m.Cmd(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS).Table(func(index int, value map[string]string, head []string) { + bin := m.Cmd(nfs.DIR, path.Join(value[nfs.PATH], ice.BIN), nfs.DIR_CLI_FIELDS).Append(nfs.PATH) + if bin == "" { + bin = m.Cmd(nfs.DIR, path.Join(value[nfs.PATH], "sbin"), nfs.DIR_CLI_FIELDS).Append(nfs.PATH) + } m.Push(mdb.TIME, value[mdb.TIME]) m.Push(PORT, path.Base(value[nfs.PATH])) m.Push(nfs.SIZE, value[nfs.SIZE]) + m.Push(ice.BIN, bin) }) m.SortInt(PORT) return diff --git a/base/web/dream.go b/base/web/dream.go index 2285e7f3..399c2b08 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -41,7 +41,7 @@ func _dream_show(m *ice.Message, name string) { if m.Option(nfs.REPOS) != "" { // 下载源码 m.Cmd("web.code.git.repos", mdb.CREATE, m.OptionSimple(nfs.REPOS), nfs.PATH, p) } else { // 创建目录 - os.MkdirAll(p, ice.MOD_DIR) + nfs.MkdirAll(m, p) } // 任务模板 @@ -118,6 +118,7 @@ func init() { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { _dream_list(m) + m.Sort("status,type,name") return } diff --git a/base/web/route.go b/base/web/route.go index 1993a7ad..150dcc8f 100644 --- a/base/web/route.go +++ b/base/web/route.go @@ -59,8 +59,6 @@ func _route_list(m *ice.Message) { m.Push(ROUTE, ice.Info.NodeName) m.PushAnchor(tcp.LOCALHOST, kit.Format("%s://%s:%s", u.Scheme, tcp.LOCALHOST, u.Port())) m.PushButton(tcp.START) - - m.Sort(ROUTE) } const ROUTE = "route" @@ -104,6 +102,7 @@ func init() { if len(arg) == 0 || arg[0] == "" { // 路由列表 if _route_travel(m, kit.Select("", arg, 0)); m.W != nil { _route_list(m) + m.Sort("type,route") } } else if len(arg) == 1 || arg[1] == "" { // 模块列表 diff --git a/base/web/serve.go b/base/web/serve.go index d2ae0592..78254589 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -270,6 +270,9 @@ func init() { m.Done(value[cli.STATUS] == tcp.START) }) }}, + DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) { + ice.Info.Domain = m.Conf(SHARE, kit.Keym(DOMAIN, m.Config(DOMAIN, arg[0]))) + }}, aaa.BLACK: {Name: "black", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) { for _, k := range arg { m.Log_CREATE(aaa.BLACK, k) @@ -283,8 +286,8 @@ func init() { } }}, cli.START: {Name: "start dev name=ops proto=http host port=9020 nodename password username userrole", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - ice.Info.Address = kit.Select(kit.Format("%s://%s:%s", m.Option(tcp.PROTO), - kit.Select(m.Cmd(tcp.HOST).Append(aaa.IP), m.Option(tcp.HOST)), m.Option(tcp.PORT)), ice.Info.Address) + ice.Info.Domain = kit.Select(kit.Format("%s://%s:%s", m.Option(tcp.PROTO), + kit.Select(m.Cmd(tcp.HOST).Append(aaa.IP), m.Option(tcp.HOST)), m.Option(tcp.PORT)), ice.Info.Domain) if cli.NodeInfo(m, SERVER, kit.Select(ice.Info.HostName, m.Option("nodename"))); m.Option(tcp.PORT) == tcp.RANDOM { m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) } diff --git a/base/web/share.go b/base/web/share.go index 0ca90479..5964dd32 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -93,6 +93,7 @@ func _share_local(m *ice.Message, arg ...string) { } const ( + TOPIC = "topic" LOGIN = "login" RIVER = "river" STORM = "storm" diff --git a/base/web/space.go b/base/web/space.go index 24561cc7..d4c29e94 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -301,7 +301,7 @@ func init() { m.Table(func(index int, value map[string]string, head []string) { m.PushAnchor(value[mdb.NAME], _space_link(m, kit.Keys(m.Option(ice.MSG_USERPOD), value[mdb.NAME]))) }) - m.SortStrR(mdb.NAME) + m.Sort("type,name,text") } return } diff --git a/conf.go b/conf.go index c4b13c3c..9863c49b 100644 --- a/conf.go +++ b/conf.go @@ -143,6 +143,7 @@ const ( // DIR SRC_MAIN_SVG = "src/main.svg" SRC_VERSION_GO = "src/version.go" SRC_BINPACK_GO = "src/binpack.go" + SRC_RELAY_GO = "src/relay.go" MAKEFILE = "Makefile" ICE_BIN = "ice.bin" GO_MOD = "go.mod" diff --git a/core/chat/header.go b/core/chat/header.go index 08afc57d..efb405be 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -5,6 +5,7 @@ import ( ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" @@ -119,7 +120,7 @@ func init() { }}, code.WEBPACK: {Name: "webpack", Help: "打包页面", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(code.WEBPACK, mdb.CREATE, m.OptionSimple(mdb.NAME)) + m.Cmdy(code.WEBPACK, cli.BUILD, m.OptionSimple(mdb.NAME)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { msg := m.Cmd(aaa.USER, m.Option(ice.MSG_USERNAME)) diff --git a/core/code/autogen.go b/core/code/autogen.go index 20bbb671..32d243b5 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -132,6 +132,7 @@ func init() { m.Cmdy(nfs.DIR, ice.SRC_VERSION_GO) m.Cmdy(nfs.DIR, ice.SRC_BINPACK_GO) m.Cmdy(nfs.DIR, "usr/release/binpack.go") + m.Cmdy(nfs.DIR, "usr/release/conf.go") } func _autogen_miss(m *ice.Message) { m.Cmd(nfs.DEFS, ice.ETC_MISS_SH, m.Conf(web.DREAM, kit.Keym("miss"))) @@ -150,7 +151,7 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case MAIN: - m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", kit.Dict(nfs.DIR_REG, `.*\.go`)).RenameAppend(nfs.PATH, arg[0]) + m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go`)).RenameAppend(nfs.PATH, arg[0]) } }}, mdb.CREATE: {Name: "create main=src/main.go@key zone name=hi help type=Hash,Zone,Lists,Data,Code list key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { @@ -183,16 +184,21 @@ func init() { ssh.SCRIPT: {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) { _autogen_miss(m) }}, + nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.TRASH, path.Join(ice.SRC, m.Option(nfs.PATH))) + }}, BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) { _autogen_version(m) + m.Cmdy(WEBPACK, mdb.CREATE) m.Cmd(BINPACK, mdb.CREATE) - m.Cmd(cli.SYSTEM, "sh", "-c", `cat src/binpack.go|sed 's/package main/package ice/g' > usr/release/binpack.go`) m.Cmd(nfs.COPY, path.Join(ice.USR_RELEASE, "conf.go"), path.Join(ice.USR_ICEBERGS, "conf.go")) + m.Cmd(cli.SYSTEM, "sh", "-c", `cat src/binpack.go|sed 's/package main/package ice/g' > usr/release/binpack.go`) }}, - "relay": {Name: "relay alias username host port list", Help: "跳板", Hand: func(m *ice.Message, arg ...string) { + RELAY: {Name: "relay alias username host port list", Help: "跳板", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(COMPILE, RELAY) + m.Cmd(nfs.LINK, path.Join(ice.USR_PUBLISH, m.Option(mdb.ALIAS)), RELAY) m.Cmd(nfs.SAVE, path.Join(kit.Env(cli.HOME), ".ssh/"+m.Option(mdb.ALIAS)+".json"), kit.Formats(kit.Dict(m.OptionSimple("username,host,port,list")))) - m.Cmd(nfs.LINK, path.Join(ice.USR_PUBLISH, m.Option(mdb.ALIAS)), "relay") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Option(nfs.DIR_ROOT, ice.SRC); len(arg) == 0 || strings.HasSuffix(arg[0], ice.PS) { diff --git a/core/code/binpack.go b/core/code/binpack.go index 95e50772..aa02d89e 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -16,13 +16,13 @@ import ( kit "shylinux.com/x/toolkits" ) -func _pack_write(o io.Writer, arg ...string) { +func _binpack_write(o io.Writer, arg ...string) { for _, v := range arg { fmt.Fprint(o, v) } fmt.Fprintln(o) } -func _pack_file(m *ice.Message, name, file string) string { +func _binpack_file(m *ice.Message, name, file string) string { text := "" if f, e := os.Open(file); e == nil { defer f.Close() @@ -35,10 +35,10 @@ func _pack_file(m *ice.Message, name, file string) string { } return fmt.Sprintf(" \"%s\": []byte{%s},\n", name, text) } -func _pack_dir(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_DEEP, ice.TRUE) - m.Option(nfs.DIR_TYPE, nfs.CAT) +func _binpack_dir(m *ice.Message, pack *os.File, dir string) { m.Option(nfs.DIR_ROOT, dir) + m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_TYPE, nfs.CAT) m.Cmd(nfs.DIR, nfs.PWD).Sort(nfs.PATH).Table(func(index int, value map[string]string, head []string) { if path.Base(value[nfs.PATH]) == "binpack.go" { @@ -49,29 +49,29 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) { return } - pack.WriteString(_pack_file(m, path.Join(dir, value[nfs.PATH]), path.Join(dir, value[nfs.PATH]))) + pack.WriteString(_binpack_file(m, path.Join(dir, value[nfs.PATH]), path.Join(dir, value[nfs.PATH]))) }) pack.WriteString(ice.NL) } -func _pack_volcanos(m *ice.Message, pack *os.File, dir string) { - m.Option(nfs.DIR_DEEP, ice.TRUE) - m.Option(nfs.DIR_TYPE, nfs.CAT) +func _binpack_can(m *ice.Message, pack *os.File, dir string) { m.Option(nfs.DIR_ROOT, dir) + m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_TYPE, nfs.CAT) for _, k := range []string{ice.FAVICON, ice.PROTO_JS, ice.FRAME_JS} { - pack.WriteString(_pack_file(m, ice.PS+k, path.Join(dir, k))) + pack.WriteString(_binpack_file(m, ice.PS+k, path.Join(dir, k))) } - for _, k := range []string{"lib", "page", "panel", "plugin"} { + for _, k := range []string{LIB, PAGE, PANEL, PLUGIN} { m.Cmd(nfs.DIR, k).Sort(nfs.PATH).Table(func(index int, value map[string]string, head []string) { - pack.WriteString(_pack_file(m, ice.PS+value[nfs.PATH], path.Join(dir, value[nfs.PATH]))) + pack.WriteString(_binpack_file(m, ice.PS+value[nfs.PATH], path.Join(dir, value[nfs.PATH]))) }) } pack.WriteString(ice.NL) } -func _pack_ctx(m *ice.Message, pack *os.File) { - _pack_dir(m, pack, ice.SRC_HELP) - _pack_dir(m, pack, ice.SRC) +func _binpack_ctx(m *ice.Message, pack *os.File) { + _binpack_dir(m, pack, ice.SRC_HELP) + _binpack_dir(m, pack, ice.SRC) } const BINPACK = "binpack" @@ -81,40 +81,34 @@ func init() { BINPACK: {Name: "binpack path auto create remove export", Help: "打包", Action: map[string]*ice.Action{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { web.AddRewrite(func(w http.ResponseWriter, r *http.Request) bool { + if len(ice.Info.Pack) == 0 { + return false + } if ice.Dump(w, r.URL.Path, func(name string) { web.RenderType(w, name, "") }) { return true // 打包文件 } return false }) nfs.AddRewrite(func(msg *ice.Message, name string) []byte { - if strings.HasPrefix(name, ice.SRC) { - if _, e := os.Stat(name); e == nil { - if f, e := os.Open(name); e == nil { - defer f.Close() - if b, e := ioutil.ReadAll(f); e == nil { - m.Logs("local", len(b), name) - return b // 本地文件 - } - } - } + if len(ice.Info.Pack) == 0 { + return nil + } + if strings.HasPrefix(name, ice.SRC) && kit.FileExists(name) { + return nil } - if b, ok := ice.Info.Pack[name]; ok { m.Logs(BINPACK, len(b), name) return b // 打包文件 } if b, ok := ice.Info.Pack[strings.TrimPrefix(name, ice.USR_VOLCANOS)]; ok && len(b) > 0 { - m.Debug("cat binpack %s", name) m.Logs(BINPACK, len(b), name) return b // 打包文件 } if b, ok := ice.Info.Pack[path.Join(m.Option(nfs.DIR_ROOT), name)]; ok && len(b) > 0 { - m.Debug("cat binpack %s", name) m.Logs(BINPACK, len(b), name) return b // 打包文件 } if b, ok := ice.Info.Pack[path.Join(ice.PS, name)]; ok && len(b) > 0 { - m.Debug("cat binpack %s", name) m.Logs(BINPACK, len(b), name) return b // 打包文件 } @@ -122,27 +116,27 @@ func init() { }) }}, mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - if pack, p, e := kit.Create(ice.SRC_BINPACK_GO); m.Assert(e) { - defer pack.Close() + if f, p, e := kit.Create(ice.SRC_BINPACK_GO); m.Assert(e) { + defer f.Close() defer m.Echo(p) - _pack_write(pack, `package main`) - _pack_write(pack) - _pack_write(pack, `import (`) - _pack_write(pack, ` ice "shylinux.com/x/icebergs"`) - _pack_write(pack, `)`) - _pack_write(pack) + _binpack_write(f, `package main`) + _binpack_write(f) + _binpack_write(f, `import (`) + _binpack_write(f, ` ice "shylinux.com/x/icebergs"`) + _binpack_write(f, `)`) + _binpack_write(f) - _pack_write(pack, `func init() {`) - _pack_write(pack, ` ice.Info.Pack = map[string][]byte{`) + _binpack_write(f, `func init() {`) + _binpack_write(f, ` ice.Info.Pack = map[string][]byte{`) - _pack_volcanos(m, pack, ice.USR_VOLCANOS) - _pack_dir(m, pack, ice.USR_LEARNING) - _pack_dir(m, pack, ice.USR_INTSHELL) - _pack_ctx(m, pack) + _binpack_dir(m, f, ice.USR_LEARNING) + _binpack_can(m, f, ice.USR_VOLCANOS) + _binpack_dir(m, f, ice.USR_INTSHELL) + _binpack_ctx(m, f) - _pack_write(pack, ` }`) - _pack_write(pack, `}`) + _binpack_write(f, ` }`) + _binpack_write(f, `}`) } }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { @@ -153,14 +147,14 @@ func init() { if strings.HasPrefix(key, ice.PS) { key = ice.USR_VOLCANOS + key } - m.Warn(os.MkdirAll(path.Dir(key), ice.MOD_DIR), "mkdir", key) + m.Log_EXPORT(nfs.FILE, key, nfs.SIZE, len(value)) + m.Warn(nfs.MkdirAll(m, path.Dir(key)), "mkdir", key) m.Warn(ioutil.WriteFile(key, value, ice.MOD_FILE), "write", key) } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { for k, v := range ice.Info.Pack { - m.Push(mdb.NAME, k) - m.Push(nfs.SIZE, len(v)) + m.Push(mdb.NAME, k).Push(nfs.SIZE, len(v)) } m.Sort(mdb.NAME) }}, diff --git a/core/code/compile.go b/core/code/compile.go index 3cd7c312..97e2cf80 100644 --- a/core/code/compile.go +++ b/core/code/compile.go @@ -13,6 +13,9 @@ import ( kit "shylinux.com/x/toolkits" ) +const ( + RELAY = "relay" +) const COMPILE = "compile" func init() { @@ -22,17 +25,15 @@ func init() { cli.ENV, kit.Dict("GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "shylinux.com,github.com", "CGO_ENABLED", "0"), )}, }, Commands: map[string]*ice.Command{ - COMPILE: {Name: "compile arch=amd64,386,arm,arm64 os=linux,darwin,windows src=src/main.go@key run binpack install", Help: "编译", Action: map[string]*ice.Action{ + COMPILE: {Name: "compile arch=amd64,386,arm,arm64 os=linux,darwin,windows src=src/main.go@key run binpack relay install", Help: "编译", Action: map[string]*ice.Action{ mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", kit.Dict(nfs.DIR_REG, `.*\.go$`)).Sort(nfs.PATH) - }}, - BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(AUTOGEN, BINPACK) + m.Cmdy(nfs.DIR, ice.SRC, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go$`)).Sort(nfs.PATH) }}, INSTALL: {Name: "compile", Help: "安装", Hand: func(m *ice.Message, arg ...string) { if strings.Contains(m.Cmdx(cli.RUNTIME, kit.Keys(tcp.HOST, cli.OSID)), cli.ALPINE) { web.PushStream(m) m.Cmd(cli.SYSTEM, "apk", "add", GIT, GO) + m.Cmd(cli.SYSTEM, GO, "get", "shylinux.com/x/ice") return } if m.Cmdx(cli.SYSTEM, nfs.FIND, GIT) == "" { @@ -42,6 +43,12 @@ func init() { } m.Cmd(INSTALL, web.DOWNLOAD, "https://golang.google.cn/dl/go1.15.5.linux-amd64.tar.gz", ice.USR_LOCAL) }}, + BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(AUTOGEN, BINPACK) + }}, + RELAY: {Name: "relay", Help: "跳板", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(COMPILE, ice.SRC_RELAY_GO, path.Join(ice.USR_PUBLISH, RELAY)) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Cmdx(cli.SYSTEM, nfs.FIND, GO) == "" && m.Cmdx(COMPILE, INSTALL) == ice.FALSE { return @@ -80,8 +87,8 @@ func init() { // 编译成功 m.Log_EXPORT(nfs.SOURCE, main, nfs.TARGET, file) - m.Cmdy(PUBLISH, ice.CONTEXTS, "core", "binary") - m.Cmdy(nfs.DIR, file, "time,path,size,link") + m.Cmdy(nfs.DIR, file, nfs.DIR_WEB_FIELDS) + m.Cmdy(PUBLISH, ice.CONTEXTS) m.StatusTimeCount() }}, }}) diff --git a/core/code/inner.go b/core/code/inner.go index efd58036..7b0ae25e 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -140,7 +140,7 @@ func init() { if m.Option(ctx.ACTION) == "website" { switch arg[0] { case nfs.FILE: - m.Cmdy(nfs.DIR, nfs.PWD, "path,size,time", kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain() + m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, "src/website/")).ProcessAgain() } return } @@ -148,18 +148,18 @@ func init() { switch arg[0] { case cli.MAIN: m.Option(nfs.DIR_REG, "*.go") - m.Cmdy(nfs.DIR, "src/", "path,size,time").ProcessAgain() + m.Cmdy(nfs.DIR, "src/", nfs.DIR_CLI_FIELDS).ProcessAgain() case nfs.PATH: - m.Cmdy(nfs.DIR, arg[1:], "path,size,time").ProcessAgain() + m.Cmdy(nfs.DIR, arg[1:], nfs.DIR_CLI_FIELDS).ProcessAgain() case nfs.FILE: p := kit.Select(nfs.PWD, arg, 1) if !strings.HasSuffix(p, ice.FS) { p = path.Dir(p) } - m.Cmdy(nfs.DIR, p+ice.PS, "path,size,time", kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH))).ProcessAgain() + m.Cmdy(nfs.DIR, p+ice.PS, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH))).ProcessAgain() case "url": m.Option(nfs.DIR_ROOT, "usr/volcanos/plugin/local/code/") - m.Cmdy(nfs.DIR, nfs.PWD, "path,size,time", kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain() + m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_DEEP, ice.TRUE)).ProcessAgain() default: m.Cmdy(FAVOR, mdb.INPUTS, arg) } diff --git a/core/code/install.go b/core/code/install.go index 7541da50..eea4b152 100644 --- a/core/code/install.go +++ b/core/code/install.go @@ -1,7 +1,6 @@ package code import ( - "os" "path" "strings" @@ -17,20 +16,19 @@ import ( func _install_download(m *ice.Message) { link := m.Option(mdb.LINK) - name := path.Base(link) + name := path.Base(strings.Split(link, "?")[0]) file := path.Join(kit.Select(m.Config(nfs.PATH), m.Option(nfs.PATH)), name) defer m.Cmdy(nfs.DIR, file) - if _, e := os.Stat(file); e == nil { + if kit.FileExists(file) { return // 文件存在 } // 创建文件 m.Cmd(nfs.SAVE, file, "") - m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) { // 进度 - m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, mdb.NAME, name, mdb.LINK, link) + m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, mdb.NAME, name, nfs.PATH, file, mdb.LINK, link) m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) { value = kit.GetMeta(value) @@ -50,7 +48,8 @@ func _install_download(m *ice.Message) { // 解压 m.Option(cli.CMD_DIR, path.Dir(file)) - m.Cmd(cli.SYSTEM, "tar", "xvf", name) + m.Cmd(nfs.TAR, mdb.EXPORT, name) + m.ToastSuccess() }) } func _install_build(m *ice.Message, arg ...string) { @@ -98,8 +97,7 @@ func _install_order(m *ice.Message, arg ...string) { } func _install_spawn(m *ice.Message, arg ...string) { if kit.Int(m.Option(tcp.PORT)) >= 10000 { - p := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT)) - if _, e := os.Stat(p); e == nil { + if p := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT)); kit.FileExists(p) { m.Echo(p) return } @@ -109,9 +107,10 @@ func _install_spawn(m *ice.Message, arg ...string) { target := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT)) source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(mdb.LINK))) + nfs.MkdirAll(m, target) m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) { - m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[nfs.PATH], ice.PS), target) + m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[nfs.PATH], ice.PS), target+ice.PS) }) m.Echo(target) } @@ -126,10 +125,6 @@ func _install_start(m *ice.Message, arg ...string) { m.Cmdy(cli.DAEMON, arg[1:], args) } -func _install_package(m *ice.Message, arg ...string) { - m.Fields(len(arg), "time,name,path") - m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH) -} func _install_service(m *ice.Message, arg ...string) { arg = kit.Split(path.Base(arg[0]), "-.")[:1] @@ -153,9 +148,11 @@ const INSTALL = "install" func init() { Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ - INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(mdb.SHORT, mdb.NAME, nfs.PATH, ice.USR_INSTALL)}, + INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data( + mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,path,link", nfs.PATH, ice.USR_INSTALL, + )}, }, Commands: map[string]*ice.Command{ - INSTALL: {Name: "install name port path auto download compile", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{ + INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: ice.MergeAction(map[string]*ice.Action{ web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) { _install_download(m) }}, @@ -176,10 +173,10 @@ func init() { defer m.StatusTime(nfs.PATH, m.Option(nfs.DIR_ROOT)) m.Cmdy(nfs.DIR, m.Option(nfs.PATH)) }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch len(arg) { case 0: // 源码列表 - _install_package(m, arg...) + mdb.HashSelect(m, arg...) case 1: // 服务列表 _install_service(m, arg...) @@ -203,5 +200,8 @@ func InstallAction(fields ...string) map[string]*ice.Action { cli.ORDER: {Name: "order", Help: "加载", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(INSTALL, cli.ORDER, m.Config(nfs.SOURCE), "_install/bin") }}, + nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.TRASH, m.Option(nfs.PATH)) + }}, }, fields...) } diff --git a/core/code/pprof.go b/core/code/pprof.go index 38a1ad1e..a423c8b7 100644 --- a/core/code/pprof.go +++ b/core/code/pprof.go @@ -43,7 +43,7 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case BINNARY: - m.Cmdy(nfs.DIR, "bin/", "path,size,time").RenameAppend(nfs.PATH, BINNARY) + m.Cmdy(nfs.DIR, "bin/", nfs.DIR_CLI_FIELDS).RenameAppend(nfs.PATH, BINNARY) case SERVICE: m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) { m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile")) diff --git a/core/code/publish.go b/core/code/publish.go index 403d68a8..33eacd48 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -17,7 +17,31 @@ import ( kit "shylinux.com/x/toolkits" ) -func _bin_list(m *ice.Message, dir string) { +func _publish_file(m *ice.Message, file string, arg ...string) string { + if strings.HasSuffix(file, ice.ICE_BIN) { // 打包应用 + arg = kit.Simple(kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)) + file = cli.SystemFind(m, os.Args[0]) + + } else if s, e := os.Stat(file); m.Assert(e) && s.IsDir() { + p := path.Base(file) + ".tar.gz" + m.Cmd(nfs.TAR, mdb.IMPORT, p, file) + defer func() { os.Remove(p) }() + file = p // 打包目录 + } + + // 发布文件 + target := path.Join(m.Config(nfs.PATH), kit.Select(path.Base(file), arg, 0)) + m.Log_EXPORT(PUBLISH, target, cli.FROM, file) + m.Cmd(nfs.LINK, target, file) + return target +} +func _publish_list(m *ice.Message, arg ...string) { + m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_ROOT, m.Config(nfs.PATH)) + m.Option(nfs.DIR_REG, kit.Select("", arg, 0)) + m.Cmdy(nfs.DIR, nfs.PWD, kit.Select(nfs.DIR_WEB_FIELDS, arg, 1)) +} +func _publish_bin_list(m *ice.Message, dir string) { p := m.Option(cli.CMD_DIR, dir) for _, ls := range strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) { if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" { @@ -32,43 +56,11 @@ func _bin_list(m *ice.Message, dir string) { m.SortTimeR(mdb.TIME) } -func _publish_file(m *ice.Message, file string, arg ...string) string { - if strings.HasSuffix(file, "ice.bin") { // 打包应用 - arg = kit.Simple(kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)) - file = kit.Path(os.Args[0]) - - } else if s, e := os.Stat(file); m.Assert(e) && s.IsDir() { - p := path.Base(file) + ".tar.gz" - m.Cmd(nfs.TAR, p, file) - defer func() { os.Remove(p) }() - file = p // 打包目录 - } - - // 发布文件 - target := path.Join(m.Config(nfs.PATH), kit.Select(path.Base(file), arg, 0)) - m.Log_EXPORT(PUBLISH, target, "from", file) - m.Cmd(nfs.LINK, target, file) - return target -} -func _publish_list(m *ice.Message, arg ...string) { - m.Option(nfs.DIR_DEEP, ice.TRUE) - m.Option(nfs.DIR_REG, kit.Select("", arg, 0)) - m.Option(nfs.DIR_ROOT, m.Config(nfs.PATH)) - m.Cmdy(nfs.DIR, nfs.PWD, kit.Select("time,size,line,path,link", arg, 1)) -} - const PUBLISH = "publish" func init() { Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ - PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( - nfs.PATH, ice.USR_PUBLISH, ice.CONTEXTS, _contexts, - SH, `#! /bin/sh -echo "hello world" -`, - JS, `Volcanos("onengine", {}) -`, - )}, + PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(nfs.PATH, ice.USR_PUBLISH, ice.CONTEXTS, _contexts)}, }, Commands: map[string]*ice.Command{ PUBLISH: {Name: "publish path auto create volcanos icebergs intshell export", Help: "发布", Action: map[string]*ice.Action{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { @@ -78,24 +70,16 @@ echo "hello world" }}, ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }() - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.CORE) }() - m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.ETC_MISS_SH) - m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.GO_MOD) - - m.Cmd(nfs.DEFS, path.Join(m.Config(nfs.PATH), ice.ORDER_JS), m.Config(JS)) - m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_JS), "") - m.Cmd(nfs.DEFS, path.Join(m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, nfs.PATH)), PAGE_CACHE_CSS), "") + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }() _publish_list(m, `.*\.(html|css|js)$`) }}, ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.BASE) }() + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }() m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_BIN) - m.Cmd(PUBLISH, mdb.CREATE, nfs.FILE, ice.BIN_ICE_SH) - _bin_list(m, m.Config(nfs.PATH)) + _publish_bin_list(m, m.Config(nfs.PATH)) }}, ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, ice.MISC) }() - m.Cmd(nfs.DEFS, path.Join(m.Config(nfs.PATH), ice.ORDER_SH), m.Config(SH)) + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }() _publish_list(m, ".*\\.(sh|vim|conf)$") }}, ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { @@ -104,7 +88,7 @@ echo "hello world" kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ice.DF), 1))) if len(arg) == 0 { - arg = append(arg, "core", "binary") + arg = append(arg, ice.CORE, ice.BASE) } for _, k := range arg { if buf, err := kit.Render(m.Config(kit.Keys(ice.CONTEXTS, k)), m); m.Assert(err) { @@ -124,7 +108,7 @@ echo "hello world" os.Remove(path.Join(p, m.Option(nfs.PATH))) }}, mdb.EXPORT: {Name: "export", Help: "工具链", Hand: func(m *ice.Message, arg ...string) { - var list = []string{} + var list = []string{ice.USR_LOCAL_LIB} m.Cmd(nfs.CAT, ice.ETC_PATH, func(text string) { if strings.HasPrefix(text, ice.USR_PUBLISH) { return @@ -142,11 +126,12 @@ echo "hello world" defer m.ProcessHold() defer m.StatusTimeCount() m.Cmd(nfs.TAR, kit.Path(ice.USR_PUBLISH, "vim.tar.gz"), ".vim/plugged", kit.Dict(nfs.DIR_ROOT, kit.Env(cli.HOME))) - m.Cmd(nfs.TAR, kit.Path(ice.USR_PUBLISH, "contexts.lib.tar.gz"), ice.USR_LOCAL_LIB) m.Cmd(nfs.TAR, kit.Path(ice.USR_PUBLISH, "contexts.bin.tar.gz"), list) m.Cmd(PUBLISH, mdb.CREATE, ice.ETC_PATH) + m.Cmd(PUBLISH, mdb.CREATE, ice.MAKEFILE) m.Cmd(PUBLISH, mdb.CREATE, ice.ETC_MISS_SH) + m.Cmd(PUBLISH, mdb.CREATE, ice.SRC_MAIN_GO) m.Cmd(PUBLISH, mdb.CREATE, ice.GO_MOD) m.Cmd(PUBLISH, mdb.CREATE, ice.GO_SUM) @@ -155,31 +140,22 @@ echo "hello world" }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(nfs.DIR_ROOT, m.Config(nfs.PATH)) - m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link") + m.Cmdy(nfs.DIR, kit.Select("", arg, 0), nfs.DIR_WEB_FIELDS) }}, }}) } var _contexts = kit.Dict( + "misc", `# 终端环境 +export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp; source $ctx_temp dev +export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); wget -O $ctx_temp $ctx_dev; source $ctx_temp dev +`, "core", `# 定制版 export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL $ctx_dev; source $ctx_temp app export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); wget -O $ctx_temp $ctx_dev; source $ctx_temp app `, - "binary", `# 官方版 + "base", `# 官方版 ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL https://shylinux.com; source $ctx_temp binary ctx_temp=$(mktemp); wget -O $ctx_temp https://shylinux.com; source $ctx_temp binary -`, - - "source", `# 下载源码 -ctx_temp=$(mktemp); curl -fsSL https://shylinux.com -o $ctx_temp; source $ctx_temp source -`, - "project", `# 创建项目 -ctx_temp=$(mktemp); curl -fsSL https://shylinux.com -o $ctx_temp; source $ctx_temp project -`, - "base", `# 开发环境 -export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp; source $ctx_temp dev -`, - "misc", `# 终端环境 -export ctx_dev={{.Option "httphost"}}; ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp; source $ctx_temp `, ) diff --git a/core/code/upgrade.go b/core/code/upgrade.go index 3fc40764..066169a0 100644 --- a/core/code/upgrade.go +++ b/core/code/upgrade.go @@ -2,6 +2,7 @@ package code import ( "os" + "path" "runtime" ice "shylinux.com/x/icebergs" @@ -18,27 +19,37 @@ func init() { Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(mdb.HASH, kit.Dict( cli.SYSTEM, kit.Dict(mdb.LIST, kit.List( - mdb.TYPE, "bin", nfs.FILE, "ice.sh", nfs.PATH, ice.BIN_ICE_SH, mdb.TYPE, "bin", nfs.FILE, "ice.bin", nfs.PATH, ice.BIN_ICE_BIN, )), + nfs.BINARY, kit.Dict(mdb.LIST, kit.List( + mdb.TYPE, "txt", nfs.FILE, "path", nfs.PATH, ice.ETC_PATH, + mdb.TYPE, "tar", nfs.FILE, "contexts.bin.tar.gz", + )), nfs.SOURCE, kit.Dict(mdb.LIST, kit.List( + mdb.TYPE, "sh", nfs.FILE, "miss.sh", nfs.PATH, ice.ETC_MISS_SH, mdb.TYPE, "txt", nfs.FILE, "main.go", nfs.PATH, ice.SRC_MAIN_GO, - mdb.TYPE, "txt", nfs.FILE, "miss.sh", nfs.PATH, ice.ETC_MISS_SH, - mdb.TYPE, "txt", nfs.FILE, "go.mod", nfs.PATH, ice.GO_MOD, + mdb.TYPE, "txt", nfs.FILE, "go.mod", + mdb.TYPE, "txt", nfs.FILE, "go.sum", )), ))}, }, Commands: map[string]*ice.Command{ - UPGRADE: {Name: "upgrade item=system,source run", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + UPGRADE: {Name: "upgrade item=system,binary,source run", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Grows(cmd, kit.Keys(mdb.HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) { - if value[nfs.PATH] == ice.BIN_ICE_BIN { // 程序文件 + if value[nfs.FILE] == ice.ICE_BIN { // 程序文件 value[nfs.FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH) m.Option(ice.EXIT, ice.TRUE) } // 下载文件 + dir := kit.Select(kit.Format(value[nfs.FILE]), value[nfs.PATH]) msg := m.Cmd(web.SPIDE, ice.DEV, web.SPIDE_CACHE, web.SPIDE_GET, "/publish/"+kit.Format(value[nfs.FILE])) - m.Cmd(web.STORY, web.WATCH, msg.Append(nfs.FILE), value[nfs.PATH]) - os.Chmod(kit.Format(value[nfs.PATH]), 0770) + m.Cmd(web.STORY, web.WATCH, msg.Append(nfs.FILE), dir) + switch value[mdb.TYPE] { + case "sh", "bin": + os.Chmod(kit.Format(dir), 0770) + case "tar": + m.Cmd(nfs.TAR, mdb.EXPORT, dir, "-C", path.Dir(dir)) + } }) if m.Option(ice.EXIT) == ice.TRUE { m.Sleep("1s").Go(func() { m.Cmd(ice.EXIT, 1) }) diff --git a/core/code/webpack.go b/core/code/webpack.go index b16c9b72..c933f077 100644 --- a/core/code/webpack.go +++ b/core/code/webpack.go @@ -5,6 +5,8 @@ import ( "path" ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" + "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" @@ -17,7 +19,90 @@ func _volcanos(m *ice.Message, file ...string) string { func _publish(m *ice.Message, file ...string) string { return path.Join(m.Conf(PUBLISH, kit.Keym(nfs.PATH)), path.Join(file...)) } +func _webpack_cache(m *ice.Message, dir string) { + if len(ice.Info.Pack) > 0 { + return + } + css, _, e := kit.Create(path.Join(dir, PAGE_CACHE_CSS)) + m.Assert(e) + defer css.Close() + + js, _, e := kit.Create(path.Join(dir, PAGE_CACHE_JS)) + m.Assert(e) + defer js.Close() + + m.Option(nfs.DIR_ROOT, dir) + m.Option(nfs.DIR_DEEP, true) + m.Option(nfs.DIR_PACK, true) + m.Option(nfs.DIR_TYPE, nfs.CAT) + + for _, k := range []string{LIB, PANEL, PLUGIN} { + m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { + if kit.Ext(value[nfs.PATH]) == CSS { + js.WriteString(`Volcanos.meta.cache["` + path.Join(ice.PS, value[nfs.PATH]) + "\"] = []\n") + css.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH])) + } + }) + } + js.WriteString(ice.NL) + for _, k := range []string{LIB, PANEL, PLUGIN} { + m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { + if kit.Ext(value[nfs.PATH]) == JS { + js.WriteString(`_can_name = "` + path.Join(ice.PS, value[nfs.PATH]) + "\";\n") + js.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH])) + } + }) + } + for _, k := range []string{PUBLISH_ORDER_JS, ice.FRAME_JS} { + js.WriteString(`_can_name = "` + path.Join(ice.PS, k) + "\"\n") + js.WriteString(m.Cmdx(nfs.CAT, k)) + } +} +func _webpack_build(m *ice.Message, file string) { + if f, _, e := kit.Create(kit.Keys(file, JS)); m.Assert(e) { + defer f.Close() + f.WriteString(ice.NL) + f.WriteString(kit.Format(`Volcanos.meta.args = %s`, kit.Formats(kit.Dict(m.OptionSimple(kit.Split(m.Option(ctx.ARGS))...))))) + f.WriteString(ice.NL) + f.WriteString(`Volcanos.meta.webpack = true`) + f.WriteString(ice.NL) + f.WriteString(`Volcanos.meta.pack = ` + kit.Formats(kit.UnMarshal(kit.Select("{}", m.Option(nfs.CONTENT))))) + } + + if f, p, e := kit.Create(kit.Keys(file, HTML)); m.Assert(e) { + defer f.Close() + defer m.Echo(p) + + f.WriteString(fmt.Sprintf(` + + + + + + + + + + + + +`, + m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_CSS)), + m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_CSS)), + m.Cmdx(nfs.CAT, _volcanos(m, ice.PROTO_JS)), m.Cmdx(nfs.CAT, kit.Keys(file, JS)), + m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_JS)), + m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_JS)), + )) + } +} + +const ( + LIB = "lib" + PAGE = "page" + PANEL = "panel" + PLUGIN = "plugin" +) const ( PUBLISH_ORDER_JS = "publish/order.js" PAGE_CACHE_CSS = "page/cache.css" @@ -33,103 +118,32 @@ const WEBPACK = "webpack" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - WEBPACK: {Name: "webpack path auto create prunes", Help: "打包", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name=hi", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - dir := _volcanos(m) - css, _, e := kit.Create(path.Join(dir, PAGE_CACHE_CSS)) - m.Assert(e) - defer css.Close() - - js, _, e := kit.Create(path.Join(dir, PAGE_CACHE_JS)) - m.Assert(e) - defer js.Close() - - m.Option(nfs.DIR_ROOT, dir) - m.Option(nfs.DIR_DEEP, true) - m.Option(nfs.DIR_PACK, true) - m.Option(nfs.DIR_TYPE, nfs.CAT) - - for _, k := range []string{"lib", "panel", "plugin"} { - m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - if kit.Ext(value[nfs.PATH]) == CSS { - js.WriteString(`Volcanos.meta.cache["` + path.Join(ice.PS, value[nfs.PATH]) + "\"] = []\n") - css.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH])) - } - }) - } - js.WriteString(ice.NL) - for _, k := range []string{"lib", "panel", "plugin"} { - m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - if kit.Ext(value[nfs.PATH]) == JS { - js.WriteString(`_can_name = "` + path.Join(ice.PS, value[nfs.PATH]) + "\";\n") - js.WriteString(m.Cmdx(nfs.CAT, value[nfs.PATH])) - } - }) - } - - for _, k := range []string{PUBLISH_ORDER_JS, ice.FRAME_JS} { - js.WriteString(`_can_name = "` + path.Join(ice.PS, k) + "\"\n") - js.WriteString(m.Cmdx(nfs.CAT, k)) - } - - if f, _, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(mdb.NAME), JS))); m.Assert(e) { - defer f.Close() - - f.WriteString(ice.NL) - f.WriteString(kit.Format(`Volcanos.meta.args = {river: "%s", storm: "%s"}`, m.Option(web.RIVER), m.Option(web.STORM))) - f.WriteString(ice.NL) - f.WriteString(`Volcanos.meta.pack = ` + kit.Formats(kit.UnMarshal(kit.Select("{}", m.Option("content"))))) - } - - m.Option(nfs.DIR_ROOT, "") - if f, p, e := kit.Create(_publish(m, WEBPACK, kit.Keys(m.Option(mdb.NAME), HTML))); m.Assert(e) { - defer f.Close() - - f.WriteString(fmt.Sprintf(_pack, - m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_CSS)), - m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_CSS)), - - m.Cmdx(nfs.CAT, _volcanos(m, ice.PROTO_JS)), - m.Cmdx(nfs.CAT, _publish(m, path.Join(WEBPACK, kit.Keys(m.Option(mdb.NAME), JS)))), - - m.Cmdx(nfs.CAT, _volcanos(m, PAGE_CACHE_JS)), - m.Cmdx(nfs.CAT, _volcanos(m, PAGE_INDEX_JS)), - )) - m.Echo(p) - } - + WEBPACK: {Name: "webpack path auto create remove", Help: "打包", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + _webpack_cache(m.Spawn(), _volcanos(m)) m.Cmd(nfs.COPY, _volcanos(m, PAGE_CAN_CSS), _volcanos(m, PAGE_INDEX_CSS), _volcanos(m, PAGE_CACHE_CSS)) m.Cmd(nfs.COPY, _volcanos(m, PAGE_CAN_JS), _volcanos(m, ice.PROTO_JS), _volcanos(m, PAGE_CACHE_JS)) + m.Cmdy(nfs.DIR, _volcanos(m, PAGE)) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { m.Cmd(nfs.SAVE, _volcanos(m, PAGE_CACHE_JS)) m.Cmd(nfs.SAVE, _volcanos(m, PAGE_CACHE_CSS)) - m.Cmd(nfs.COPY, _volcanos(m, PAGE_CAN_CSS), _volcanos(m, PAGE_INDEX_CSS), _volcanos(m, PAGE_CACHE_CSS)) m.Cmd(nfs.COPY, _volcanos(m, PAGE_CAN_JS), _volcanos(m, ice.PROTO_JS), _volcanos(m, PAGE_CACHE_JS)) + m.Cmdy(nfs.DIR, _volcanos(m, PAGE)) + }}, + nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(nfs.TRASH, _publish(m, m.Option(nfs.PATH))) + }}, + cli.BUILD: {Name: "build name=hi", Help: "构建", Hand: func(m *ice.Message, arg ...string) { + _webpack_cache(m.Spawn(), _volcanos(m)) + _webpack_build(m, _publish(m, WEBPACK, m.Option(mdb.NAME))) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_TYPE, nfs.CAT) - m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.Keym(nfs.PATH))) - - m.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link") + m.Cmdy(nfs.DIR, _volcanos(m, PAGE), nfs.DIR_WEB_FIELDS) + m.Cmdy(nfs.DIR, _publish(m, WEBPACK), nfs.DIR_WEB_FIELDS) }}, }}) } - -const _pack = ` - - - - - - - - - - - - - -` diff --git a/core/wiki/word.go b/core/wiki/word.go index 3f00603d..4652c5c8 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -39,8 +39,8 @@ func init() { ice.DisplayLocal(""), ), Action: ice.MergeAction(map[string]*ice.Action{ mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(nfs.DIR, "src/", kit.Dict(nfs.DIR_DEEP, ice.TRUE, nfs.DIR_REG, ".*\\.shy"), "path,line,time") - m.Cmdy(nfs.DIR, "src/help/", kit.Dict(nfs.DIR_DEEP, ice.TRUE, nfs.DIR_REG, ".*\\.shy"), "path,line,time") + m.Cmdy(nfs.DIR, "src/", kit.Dict(nfs.DIR_DEEP, ice.TRUE, nfs.DIR_REG, ".*\\.shy"), nfs.DIR_CLI_FIELDS) + m.Cmdy(nfs.DIR, "src/help/", kit.Dict(nfs.DIR_DEEP, ice.TRUE, nfs.DIR_REG, ".*\\.shy"), nfs.DIR_CLI_FIELDS) }}, web.STORY: {Name: "story", Help: "运行", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(arg[0], ctx.ACTION, ice.RUN, arg[2:]) diff --git a/info.go b/info.go index 46cf1839..59ea53a8 100644 --- a/info.go +++ b/info.go @@ -23,7 +23,7 @@ var Info = struct { UserName string PassWord string - Address string + Domain string NodeType string NodeName string CtxShare string diff --git a/logs.go b/logs.go index 257758ac..6d28c3bf 100644 --- a/logs.go +++ b/logs.go @@ -59,7 +59,7 @@ func (m *Message) join(arg ...interface{}) string { if i == len(args)-1 { list = append(list, args[i]) } else { - list = append(list, args[i]+kit.Select("", ":", !strings.HasSuffix(strings.TrimSpace(args[i]), ":")), kit.Format(args[i+1])) + list = append(list, strings.TrimSpace(args[i])+kit.Select("", DF, !strings.HasSuffix(strings.TrimSpace(args[i]), DF)), kit.Format(args[i+1])) } } return kit.Join(list, SP) diff --git a/meta.go b/meta.go index cdc640c8..f1a4a75e 100644 --- a/meta.go +++ b/meta.go @@ -203,6 +203,9 @@ func (m *Message) Copy(msg *Message, arg ...string) *Message { return m } func (m *Message) Sort(key string, arg ...string) *Message { + ls := kit.Split(key) + key = ls[0] + if m.FieldsIsDetail() && key != KEY { return m } @@ -234,6 +237,22 @@ func (m *Message) Sort(key string, arg ...string) *Message { number[index] = -int64(kit.Time(line[key])) } }) + compare := func(i, j int, op string) bool { + for k := range ls[1:] { + if table[i][ls[k]] == table[j][ls[k]] { + continue + } + + if op == ">" && table[i][ls[k]] > table[j][ls[k]] { + return true + } + if op == "<" && table[i][ls[k]] < table[j][ls[k]] { + return true + } + return false + } + return false + } // 排序数据 for i := 0; i < len(table)-1; i++ { @@ -243,14 +262,20 @@ func (m *Message) Sort(key string, arg ...string) *Message { case "", "str": if table[i][key] > table[j][key] { result = true + } else if table[i][key] == table[j][key] && compare(i, j, ">") { + result = true } case "str_r": if table[i][key] < table[j][key] { result = true + } else if table[i][key] == table[j][key] && compare(i, j, "<") { + result = true } default: if number[i] > number[j] { result = true + } else if table[i][key] == table[j][key] && compare(i, j, ">") { + result = true } } diff --git a/misc.go b/misc.go index cbe382f2..9b82d0b1 100644 --- a/misc.go +++ b/misc.go @@ -116,12 +116,14 @@ func (m *Message) SetResult(arg ...string) *Message { func (m *Message) SetAppend(arg ...string) *Message { return m.Set(MSG_APPEND, arg...) } -func (m *Message) RenameAppend(from, to string) *Message { - for i, v := range m.meta[MSG_APPEND] { - if v == from { - m.meta[MSG_APPEND][i] = to - m.meta[to] = m.meta[from] - delete(m.meta, from) +func (m *Message) RenameAppend(arg ...string) *Message { // [from to]... + for i := 0; i < len(arg)-1; i += 2 { + for j, v := range m.meta[MSG_APPEND] { + if v == arg[i] { + m.meta[MSG_APPEND][j] = arg[i+1] + m.meta[arg[i+1]] = m.meta[arg[i]] + delete(m.meta, arg[i]) + } } } return m @@ -154,7 +156,7 @@ func (m *Message) MergeURL2(url string, arg ...interface{}) string { return kit.MergeURL2(m.Option(MSG_USERWEB), url, arg...) } func (m *Message) MergePOD(name string, arg ...interface{}) string { - return kit.MergePOD(kit.Select(Info.Address, m.Option(MSG_USERWEB)), name, arg...) + return kit.MergePOD(kit.Select(Info.Domain, m.Option(MSG_USERWEB)), name, arg...) } func (m *Message) cmd(arg ...interface{}) *Message { diff --git a/misc/git/server.go b/misc/git/server.go index e94e6d5a..3943c2b1 100644 --- a/misc/git/server.go +++ b/misc/git/server.go @@ -160,14 +160,15 @@ func init() { }}, mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(REPOS, ice.OptionFields("time,name,path")).Table(func(index int, value map[string]string, head []string) { + remote := strings.Split(m.MergeURL2("/x/"+value[REPOS]), "?")[0] m.Option(cli.CMD_DIR, value[nfs.PATH]) - m.Cmd(cli.SYSTEM, GIT, PUSH, m.MergeURL2("/x/"+value[mdb.NAME]), MASTER) - m.Cmd(cli.SYSTEM, GIT, PUSH, "--tags", m.MergeURL2("/x/"+value[mdb.NAME]), MASTER) + m.Cmd(cli.SYSTEM, GIT, PUSH, remote, MASTER) + m.Cmd(cli.SYSTEM, GIT, PUSH, "--tags", remote, MASTER) }) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if m.Option(nfs.DIR_ROOT, path.Join(ice.USR_LOCAL, REPOS)); len(arg) == 0 { - m.Cmdy(nfs.DIR, nfs.PWD, "time,path,size").Table(func(index int, value map[string]string, head []string) { + m.Cmdy(nfs.DIR, nfs.PWD).Table(func(index int, value map[string]string, head []string) { m.PushScript("git clone " + m.MergeURL2("/x/"+value[nfs.PATH])) }) m.StatusTimeCount()