From 5587905708db7c118cba4272e62f776273ed0a98 Mon Sep 17 00:00:00 2001 From: shy Date: Fri, 1 Jul 2022 21:32:23 +0800 Subject: [PATCH] opt some --- base/web/dream.go | 32 ++++++++-------------- base/web/serve.go | 29 ++++---------------- conf.go | 1 + core/chat/website.go | 65 ++++++++++++++++++++++---------------------- core/code/autogen.go | 18 ++++++------ core/code/inner.go | 4 +-- core/code/publish.go | 31 +++++++++++++++------ misc/git/server.go | 9 ++++-- render.go | 2 +- 9 files changed, 94 insertions(+), 97 deletions(-) diff --git a/base/web/dream.go b/base/web/dream.go index 549d2f30..5b321353 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -104,6 +104,9 @@ const DREAM = "dream" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ DREAM: {Name: "dream name path auto start", Help: "梦想家", Action: map[string]*ice.Action{ + ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { + m.Config("miss", _dream_miss) + }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case "repos": @@ -171,11 +174,14 @@ func init() { m.Cmdy(nfs.CAT, arg[1:]) }}, }, Configs: map[string]*ice.Config{ - DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(nfs.PATH, ice.USR_LOCAL_WORK, - "miss", `#! /bin/sh -if [ "$ISH_CONF_PRE" = "" ]; then - [ -f $PWD/.ish/plug.sh ] || [ -f $HOME/.ish/plug.sh ] || git clone https://shylinux.com/x/intshell $PWD/.ish - source $PWD/.ish/plug.sh || source $HOME/.ish/plug.sh + DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(nfs.PATH, ice.USR_LOCAL_WORK, "miss", _dream_miss)}, + }}) +} + +var _dream_miss = `#! /bin/sh + +require &>/dev/null || if [ -f $PWD/.ish/plug.sh ]; then source $PWD/.ish/plug.sh; elif [ -f $HOME/.ish/plug.sh ]; then source $HOME/.ish/plug.sh; else + ctx_temp=$(mktemp); if curl -h &>/dev/null; then curl -o $ctx_temp -fsSL https://shylinux.com; else wget -O $ctx_temp -q http://shylinux.com; fi; source $ctx_temp intshell fi require miss.sh @@ -183,19 +189,5 @@ ish_miss_prepare_compile ish_miss_prepare_develop ish_miss_prepare_install -# ish_miss_prepare redis-story -# ish_miss_prepare mysql-story -# ish_miss_prepare release - -# ish_miss_prepare_contexts -# ish_miss_prepare_intshell -# ish_miss_prepare_icebergs -# ish_miss_prepare_toolkits -# ish_miss_prepare_volcanos -# ish_miss_prepare_learning - ish_miss_make; if [ -n "$*" ]; then ./bin/ice.bin forever serve "$@"; fi -`, - )}, - }}) -} +` diff --git a/base/web/serve.go b/base/web/serve.go index 80ad9991..bf08dcbb 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -11,6 +11,7 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/ctx" + "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" @@ -302,22 +303,15 @@ func init() { switch r.URL.Path { case ice.PS: msg := m.Spawn(SERVE, w, r) - if share := r.URL.Query().Get("share"); share != "" { - switch msg := msg.Cmd(SHARE, share); msg.Append(mdb.TYPE) { - case "login": - RenderCookie(msg, aaa.SessCreate(msg, msg.Append(aaa.USERNAME))) - } - } - repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0")) if repos == ice.VOLCANOS { - if s := msg.Cmdx("web.chat.website", "show", "index.iml", "Header", "", "River", ""); s != "" { + if s := msg.Cmdx("web.chat.website", lex.PARSE, "index.iml", "Header", "", "River", ""); s != "" { Render(msg, ice.RENDER_RESULT, s) - return true + return true // 定制主页 } } Render(msg, ice.RENDER_DOWNLOAD, path.Join(msg.Config(kit.Keys(repos, nfs.PATH)), msg.Config(kit.Keys(repos, INDEX)))) - return true // 网站主页 + return true // 默认主页 case "/help/": r.URL.Path = "/help/tutor.shy" @@ -325,7 +319,6 @@ func init() { } return false }) - m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, nfs.CAT, "usr/publish/order.js") }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(SERVE).Table(func(index int, value map[string]string, head []string) { @@ -400,19 +393,9 @@ func init() { _share_repos(m, path.Join(arg[0], arg[1], arg[2]), arg[3:]...) }}, "/publish/": {Name: "/publish/", Help: "定制化", Hand: func(m *ice.Message, arg ...string) { - if arg[0] == ice.ORDER_JS { - if p := path.Join(ice.USR_PUBLISH, ice.ORDER_JS); m.PodCmd(nfs.CAT, p) { - if m.IsErr() { - m.RenderResult("") - } else { - m.RenderResult() - } - return - } - } if strings.HasPrefix(arg[0], "ice.") && m.Option(ice.POD) != "" { - _share_local(aaa.UserRoot(m), ice.BIN_ICE_BIN) - // _share_local(aaa.UserRoot(m), arg[0]) + _share_local(aaa.UserRoot(m), path.Join(ice.USR_PUBLISH, arg[0])) + // _share_local(aaa.UserRoot(m), ice.BIN_ICE_BIN) return } _share_local(m, m.Conf(SERVE, kit.Keym(ice.PUBLISH)), path.Join(arg...)) diff --git a/conf.go b/conf.go index 66e85ae0..7dce9c3b 100644 --- a/conf.go +++ b/conf.go @@ -125,6 +125,7 @@ const ( // DIR USR_LOCAL_RIVER = "usr/local/river" USR_LOCAL_DAEMON = "usr/local/daemon" USR_LOCAL_EXPORT = "usr/local/export" + USR_LOCAL_REPOS = "usr/local/repos" VAR_RUN = "var/run" VAR_TMP = "var/tmp" diff --git a/core/chat/website.go b/core/chat/website.go index b495d2bd..a7a68d5a 100644 --- a/core/chat/website.go +++ b/core/chat/website.go @@ -27,31 +27,37 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool) return nil, false } - m.Option(nfs.CAT_CONTENT, text) - river, storm, last := kit.Dict( - "Header", kit.Dict("menus", kit.List(), "style", kit.Dict("display", "none")), - "River", kit.Dict("menus", kit.List(), "action", kit.List()), - args, - ), kit.Dict(), kit.Dict() - prefix := "" + const ( + HEADER = "Header" + RIVER = "River" - nriver := 0 - nstorm := 0 + ORDER = "order" + TITLE = "title" + MENUS = "menus" + ) + + river, storm, last := kit.Dict( + HEADER, kit.Dict(MENUS, kit.List(), ctx.STYLE, kit.Dict(ctx.DISPLAY, "none")), + RIVER, kit.Dict(MENUS, kit.List(), ctx.ACTION, kit.List()), args, + ), kit.Dict(), kit.Dict() + nriver, nstorm, prefix := 0, 0, "" + + m.Option(nfs.CAT_CONTENT, text) m.Cmd(lex.SPLIT, "", mdb.KEY, mdb.NAME, func(deep int, ls []string, meta ice.Map) []string { if deep == 1 { switch ls[0] { - case "header": + case HEADER, RIVER: for i := 1; i < len(ls); i += 2 { - kit.Value(river, kit.Keys("Header", ls[i]), ls[i+1]) + kit.Value(river, kit.Keys(ls[0], ls[i]), ls[i+1]) } return ls } } + data := kit.Dict() switch kit.Ext(ls[0]) { case nfs.JS: - data[ctx.DISPLAY] = ice.FileURI(ls[0]) - ls[0] = kit.Select(ctx.CAN_PLUGIN, ice.GetFileCmd(ls[0])) + ls[0], data[ctx.DISPLAY] = kit.Select(ctx.CAN_PLUGIN, ice.GetFileCmd(ls[0])), ice.FileURI(ls[0]) case nfs.GO: ls[0] = ice.GetFileCmd(ls[0]) @@ -66,12 +72,11 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool) ls[0], data[ctx.ARGS] = "web.code.sh.py", ls[0] case "~": - prefix = ls[1] - ls = ls[1:] + prefix, ls = ls[1], ls[1:] fallthrough case "-": for _, v := range ls[1:] { - last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v), "order", len(last))) + last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.INDEX, kit.Keys(prefix, v))) } return ls } @@ -92,8 +97,7 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool) data[ls[i]] = kit.Split(ls[i+1]) case ctx.DISPLAY: data[ls[i]] = ice.Display(ls[i+1])[ctx.DISPLAY] - - case "title", "menus", "action", "style": + case ctx.STYLE, ctx.ACTION, TITLE, MENUS: data[ls[i]] = kit.UnMarshal(ls[i+1]) default: data[ls[i]] = ls[i+1] @@ -102,24 +106,20 @@ func _website_parse(m *ice.Message, text string, args ...string) (ice.Map, bool) switch deep { case 1: - nriver++ - nstorm = 0 - storm = kit.Dict() - if ls[0] == "auto" { + if nriver++; ls[0] == ice.AUTO { ls[0] = kit.Format(nriver) } - river[ls[0]] = kit.Dict(mdb.NAME, ls[1], STORM, storm, data, "order", len(river)) + nstorm, storm = 0, kit.Dict() + river[ls[0]] = kit.Dict(mdb.NAME, ls[1], STORM, storm, data, ORDER, len(river)) case 2: - nstorm++ - if ls[0] == "auto" { + if nstorm++; ls[0] == ice.AUTO { ls[0] = kit.Format(nstorm) } - last = kit.Dict(mdb.NAME, ls[1], mdb.LIST, kit.List(), data, "order", len(storm)) + last = kit.Dict(mdb.NAME, ls[1], mdb.LIST, kit.List(), data, ORDER, len(storm)) storm[ls[0]] = last prefix = "" default: - last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), - kit.Dict(mdb.NAME, kit.Select(ls[0], data[mdb.NAME]), mdb.HELP, ls[1], mdb.INDEX, ls[0], "order", len(last), data)) + last[mdb.LIST] = append(last[mdb.LIST].([]ice.Any), kit.Dict(mdb.NAME, kit.Select(ls[0], data[mdb.NAME]), mdb.HELP, ls[1], mdb.INDEX, ls[0], data)) } return ls }) @@ -196,16 +196,16 @@ func init() { return false }) }}, - "show": {Hand: func(m *ice.Message, arg ...string) { + lex.PARSE: {Hand: func(m *ice.Message, arg ...string) { switch kit.Ext(arg[0]) { - case nfs.ZML: - m.RenderCmd("can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0]))) - case nfs.IML: if res, ok := _website_parse(m, m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0])), arg[1:]...); ok { m.Echo(_website_template2, kit.Format(res)) } + case nfs.ZML: + m.RenderCmd("can.parse", m.Cmdx(nfs.CAT, path.Join(SRC_WEBSITE, arg[0]))) + default: if text := m.Cmd(m.PrefixKey(), ice.PS+arg[0]).Append(mdb.TEXT); text != "" { if res, ok := _website_parse(m, text, arg[1:]...); ok { @@ -214,7 +214,6 @@ func init() { } } }}, - "inner": {Hand: func(m *ice.Message, arg ...string) {}}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if arg[0] == mdb.FOREACH && arg[1] == "" { _website_search(m, arg[0], arg[1], kit.Select("", arg, 2)) diff --git a/core/code/autogen.go b/core/code/autogen.go index 365136e2..16bf92eb 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -61,18 +61,23 @@ func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) } func _autogen_import(m *ice.Message, main string, ctx string, mod string) { m.Cmd(nfs.DEFS, main, `package main -import "shylinux.com/x/ice" +import ( + "shylinux.com/x/ice" +) -func main() { println(ice.Run()) } +func main() { print(ice.Run()) } `) - done, list := false, []string{} + begin, done, list := false, false, []string{} m.Cmd(nfs.CAT, main, func(line string, index int) { + if begin && !done && strings.HasPrefix(line, ")") { + done, list = true, append(list, "", kit.Format(` _ "%s/src/%s"`, mod, ctx)) + } if list = append(list, line); done { return } if strings.HasPrefix(line, "import (") { - done, list = true, append(list, kit.Format(` _ "%s/src/%s"`, mod, ctx), "") + begin = true } else if strings.HasPrefix(line, "import") { done, list = true, append(list, kit.Format(`import _ "%s/src/%s"`, mod, ctx)) } @@ -87,7 +92,7 @@ field "{{.Option "help"}}" {{.Option "key"}} } func _autogen_source(m *ice.Message, main, file string) { main = strings.ReplaceAll(main, ice.PT+GO, ice.PT+SHY) - m.Cmd(nfs.DEFS, main, `chapter "{{.Option "name"}}" + m.Cmd(nfs.DEFS, main, `title "{{.Option "name"}}" `) m.Cmd(nfs.PUSH, main, ice.NL, "source "+strings.TrimPrefix(file, ice.SRC+ice.PS)) } @@ -102,9 +107,6 @@ func _autogen_mod(m *ice.Message, file string) (mod string) { m.Cmd(nfs.DEFS, file, kit.Format(`module %s go 1.11 -`, host)) - m.Cmd(nfs.DEFS, ice.GO_SUM, kit.Format(` - `, host)) m.Cmd(nfs.CAT, file, func(line string) { diff --git a/core/code/inner.go b/core/code/inner.go index d65de75e..b9c61a45 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -188,8 +188,8 @@ func init() { m.Option("keys", list) m.Option("module", ice.Info.Make.Module) - m.Option("plug", "web.chat.website,web.dream") - m.Option("exts", "inner/search.js?a=1,inner/favor.js,inner/template.js") + // m.Option("plug", "web.chat.website,web.dream") + // m.Option("exts", "inner/search.js?a=1,inner/favor.js,inner/template.js") arg[1] = strings.Split(arg[1], ice.FS)[0] if _inner_list(m, kit.Ext(arg[1]), arg[1], arg[0]); m.IsErrNotFound() { diff --git a/core/code/publish.go b/core/code/publish.go index ad25ced9..528d4776 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -98,13 +98,27 @@ func init() { m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ice.DF)[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ice.DF), 1))) - m.Option("remote", kit.Select(ice.Info.Make.Remote, strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "config", "remote.origin.url")))) - m.Option("pathname", strings.TrimSuffix(path.Base(m.Option("remote")), ".git")) - if len(arg) == 0 { arg = append(arg, ice.MISC, ice.CORE, ice.BASE) } for _, k := range arg { + switch k { + case ice.MISC: + if bin := path.Join(ice.USR_PUBLISH, kit.Keys("ice", runtime.GOOS, runtime.GOARCH)); !kit.FileExists(bin) { + m.Cmd(nfs.LINK, bin, m.Cmdx(cli.RUNTIME, "boot.bin")) + } + + case ice.CORE: + if !kit.FileExists(".git") { + repos := m.MergeURL2("/x/" + m.Option(ice.MSG_USERPOD)) + m.Cmd(cli.SYSTEM, "git", "init") + m.Cmd(cli.SYSTEM, "git", "remote", "add", "origin", repos) + m.Cmd("web.code.git.repos", mdb.CREATE, repos, "master", "", nfs.PWD) + } + m.Option("remote", kit.Select(ice.Info.Make.Remote, strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "config", "remote.origin.url")))) + m.Option("pathname", strings.TrimSuffix(path.Base(m.Option("remote")), ".git")) + case ice.BASE: + } if buf, err := kit.Render(m.Config(kit.Keys(ice.CONTEXTS, k)), m); m.Assert(err) { m.EchoScript(strings.TrimSpace(string(buf))) } @@ -151,14 +165,15 @@ func init() { } var _contexts = kit.Dict( - ice.MISC, `# 命令下载 -export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); wget -O $ctx_temp $ctx_dev; source $ctx_temp app + ice.MISC, `# 下载命令 +export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL $ctx_dev; source $ctx_temp app +export ctx_dev={{.Option "httphost"}} ctx_pod={{.Option "user.pod"}}; ctx_temp=$(mktemp); wget -O $ctx_temp -q $ctx_dev; source $ctx_temp app `, - ice.CORE, `# 源码下载 + ice.CORE, `# 克隆源码 git clone {{.Option "remote"}}; cd {{.Option "pathname"}} && source etc/miss.sh port 9020 `, - ice.BASE, `# 官方下载 + ice.BASE, `# 下载工具 ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary -ctx_temp=$(mktemp); wget -O $ctx_temp {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary +ctx_temp=$(mktemp); wget -O $ctx_temp -q {{.Cmdx "spide" "shy" "url"}}; source $ctx_temp binary `, ) diff --git a/misc/git/server.go b/misc/git/server.go index bab7d772..2de60e24 100644 --- a/misc/git/server.go +++ b/misc/git/server.go @@ -177,7 +177,7 @@ func init() { } }}, SERVER: {Name: "server path auto create import", Help: "服务器", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + mdb.CREATE: {Name: "create name", Help: "创建", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_DIR, path.Join(ice.USR_LOCAL, REPOS)) m.Cmdy(cli.SYSTEM, GIT, INIT, "--bare", m.Option(mdb.NAME)) }}, @@ -189,11 +189,16 @@ func init() { m.Cmd(cli.SYSTEM, GIT, PUSH, "--tags", remote, MASTER) }) }}, + nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Assert(m.Option(nfs.PATH) != "") + m.Cmd(nfs.TRASH, path.Join(ice.USR_LOCAL_REPOS, m.Option(nfs.PATH))) + }}, }, Hand: func(m *ice.Message, arg ...string) { - if m.Option(nfs.DIR_ROOT, path.Join(ice.USR_LOCAL, REPOS)); len(arg) == 0 { + if m.Option(nfs.DIR_ROOT, ice.USR_LOCAL_REPOS); len(arg) == 0 { m.Cmdy(nfs.DIR, nfs.PWD).Table(func(index int, value map[string]string, head []string) { m.PushScript("git clone " + m.MergeLink("/x/"+strings.TrimSuffix(value[nfs.PATH], ice.PS))) }) + m.Cut("time,path,size,script,action") m.StatusTimeCount() return } diff --git a/render.go b/render.go index f5a09ee1..51aa45d6 100644 --- a/render.go +++ b/render.go @@ -95,7 +95,7 @@ func (m *Message) RenderDownload(args ...Any) *Message { return m.Render(RENDER_DOWNLOAD, args...) } func (m *Message) RenderWebsite(pod string, dir string, arg ...string) *Message { - m.Echo(m.Cmdx(m.Space(pod), WEBSITE, SHOW, dir, arg)) + m.Echo(m.Cmdx(m.Space(pod), WEBSITE, "parse", dir, arg)) return m.RenderResult() } func (m *Message) RenderIndex(serve, repos string, file ...string) *Message {