diff --git a/base/ctx/command.go b/base/ctx/command.go index 3a45342a..0cc429ba 100644 --- a/base/ctx/command.go +++ b/base/ctx/command.go @@ -53,7 +53,7 @@ func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ COMMAND: {Name: "command key auto", Help: "命令", Action: map[string]*ice.Action{ mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { - if arg[0] == COMMAND { + if arg[0] == COMMAND || arg[1] != "" { _command_search(m, arg[0], arg[1], arg[2]) } }}, diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 1819aab2..79cc7a42 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -432,7 +432,7 @@ const ( const MDB = "mdb" var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{ - INSERT: {Name: "insert conf key type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + INSERT: {Name: "insert key sub type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) @@ -440,7 +440,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _list_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) } }}, - DELETE: {Name: "delete conf key type field value", Help: "删除", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + DELETE: {Name: "delete key sub type field value", Help: "删除", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_delete(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4]) @@ -448,7 +448,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _list_delete(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4]) } }}, - MODIFY: {Name: "modify conf key type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + MODIFY: {Name: "modify key sub type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...) @@ -456,7 +456,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _list_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...) } }}, - SELECT: {Name: "select conf key type field value", Help: "查询", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + SELECT: {Name: "select key sub type field value", Help: "查询", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select(kit.MDB_FOREACH, arg, 4)) @@ -466,7 +466,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _zone_select(m, arg[0], _domain_chain(m, arg[1]), kit.Select("", arg, 3), kit.Select("", arg, 4)) } }}, - EXPORT: {Name: "export conf key type file", Help: "导出", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + EXPORT: {Name: "export key sub type file", Help: "导出", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch file := _file_name(m, arg...); arg[2] { case HASH: _hash_export(m, arg[0], _domain_chain(m, arg[1]), file) @@ -476,7 +476,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _zone_export(m, arg[0], _domain_chain(m, arg[1]), file) } }}, - IMPORT: {Name: "import conf key type file", Help: "导入", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + IMPORT: {Name: "import key sub type file", Help: "导入", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch file := _file_name(m, arg...); arg[2] { case HASH: _hash_import(m, arg[0], _domain_chain(m, arg[1]), file) @@ -486,7 +486,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _zone_import(m, arg[0], _domain_chain(m, arg[1]), file) } }}, - PRUNES: {Name: "prunes conf key type [field value]...", Help: "清理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + PRUNES: {Name: "prunes key sub type [field value]...", Help: "清理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_prunes(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) @@ -494,7 +494,7 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]* _list_prunes(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) } }}, - INPUTS: {Name: "inputs conf key type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { switch arg[2] { case HASH: _hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select("name", arg, 3), kit.Select("", arg, 4)) diff --git a/conf.go b/conf.go index 49f33835..c5ab33a3 100644 --- a/conf.go +++ b/conf.go @@ -51,14 +51,16 @@ const ( // MSG MSG_SOURCE = "_source" MSG_TARGET = "_target" MSG_HANDLE = "_handle" - MSG_ACTION = "_action" - MSG_DAEMON = "_daemon" - MSG_UPLOAD = "_upload" MSG_OUTPUT = "_output" MSG_ARGS = "_args" - MSG_PROCESS = "_process" + MSG_DAEMON = "_daemon" + MSG_UPLOAD = "_upload" + MSG_ACTION = "_action" + MSG_STATUS = "_status" + MSG_CONTROL = "_control" + MSG_PROCESS = "_process" MSG_DISPLAY = "_display" MSG_CMDS = "cmds" diff --git a/core/chat/header.go b/core/chat/header.go index 10ea3d4f..c4ff9b82 100644 --- a/core/chat/header.go +++ b/core/chat/header.go @@ -36,6 +36,8 @@ func _header_share(m *ice.Message, arg ...string) { link = strings.Replace(link, tcp.LOCALHOST, m.Cmd(tcp.HOST, ice.OptionFields(tcp.IP)).Append(tcp.IP), 1) } + m.Set(kit.MDB_NAME) + m.Set(kit.MDB_TEXT) m.Push(kit.MDB_NAME, link) m.PushQRCode(kit.MDB_TEXT, link) } diff --git a/core/code/binpack.go b/core/code/binpack.go index edbe3a76..92036181 100644 --- a/core/code/binpack.go +++ b/core/code/binpack.go @@ -4,7 +4,6 @@ import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" - "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" "fmt" @@ -62,12 +61,6 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) { } for _, k := range []string{"lib", "page", "panel", "plugin"} { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { - if value[kit.MDB_PATH] == "page/index.html" { - pack.WriteString(fmt.Sprintf(" \"%s/%s\": %s,\n", - m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH)), value[kit.MDB_PATH], - _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) - return - } pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) }) diff --git a/core/code/publish.go b/core/code/publish.go index 940f23d3..8aaba6a1 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -106,11 +106,16 @@ echo "hello world" }}, ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) - m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1))) - m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(u.Host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(u.Host, ":"), 1))) - m.Option("hostname", strings.Split(u.Host, ":")[0]) + host := u.Host + if strings.Contains(host, "localhost") { + host = strings.Replace(host, "localhost", m.Cmd(tcp.HOST).Append(tcp.IP), 1) + } - m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(u.Host, ":")[0])) + m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) + m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) + m.Option("hostname", strings.Split(host, ":")[0]) + + m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(host, ":")[0])) m.Option("hostpath", kit.Path("./.ish/pluged")) if len(arg) == 0 { diff --git a/core/wiki/word.go b/core/wiki/word.go index 6968b10d..2ae6ee79 100644 --- a/core/wiki/word.go +++ b/core/wiki/word.go @@ -274,7 +274,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) { } // 渲染引擎 - m.Option("meta", data) + m.Option(kit.MDB_META, data) m.Render(ice.RENDER_TEMPLATE, m.Conf(FIELD, kit.Keym(kit.MDB_TEMPLATE))) } func _other_show(m *ice.Message, name, text string, arg ...string) { diff --git a/init.go b/init.go index 66f337bb..884ec9ec 100644 --- a/init.go +++ b/init.go @@ -206,6 +206,13 @@ func DumpBinPack(w io.Writer, name string, cb func(string)) bool { w.Write(b) return true } + if b, ok := BinPack[strings.TrimPrefix(name, "usr/volcanos")]; ok { + if cb != nil { + cb(name) + } + w.Write(b) + return true + } return false } diff --git a/misc.go b/misc.go index 02c47e9d..22cada68 100644 --- a/misc.go +++ b/misc.go @@ -5,6 +5,7 @@ import ( "net/url" "path" "strings" + "time" kit "github.com/shylinux/toolkits" ) @@ -257,6 +258,14 @@ func OptionFields(str string) Option { return Option{"fields", str} } func OptionHash(str string) Option { return Option{kit.MDB_HASH, str} } func (m *Message) Toast(content string, arg ...interface{}) { + if len(arg) > 1 { + switch val := arg[1].(type) { + case string: + if value, err := time.ParseDuration(val); err == nil { + arg[1] = int(value / time.Millisecond) + } + } + } m.Cmd("web.space", m.Option("_daemon"), "toast", "", content, arg) } func (m *Message) GoToast(title string, cb func(func(string, int, int))) { @@ -284,3 +293,21 @@ func (m *Message) Process(action string, arg ...interface{}) { } func (m *Message) ProcessHold() { m.Process(PROCESS_HOLD) } func (m *Message) ProcessBack() { m.Process(PROCESS_BACK) } + +func (m *Message) ProcessRefresh(delay string) { + if d, e := time.ParseDuration(delay); e == nil { + m.Option("_delay", int(d/time.Millisecond)) + } + m.Process(PROCESS_REFRESH) +} + +func (m *Message) Status(arg ...interface{}) { + args := kit.Simple(arg) + list := []map[string]string{} + for i := 0; i < len(args)-1; i += 2 { + list = append(list, map[string]string{ + "name": args[i], "value": args[i+1], + }) + } + m.Option(MSG_STATUS, kit.Format(list)) +} diff --git a/misc/git/config.go b/misc/git/config.go index 1ffafa6a..cc79216d 100644 --- a/misc/git/config.go +++ b/misc/git/config.go @@ -12,26 +12,45 @@ import ( const CONFIG = "config" func init() { - Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - CONFIG: {Name: "server name auto create", Help: "配置键", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create name value", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", m.Option(kit.MDB_NAME), m.Option(kit.MDB_VALUE)) - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", arg) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", "--unset", m.Option(kit.MDB_NAME)) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - for _, v := range strings.Split(m.Cmdx(cli.SYSTEM, GIT, CONFIG, "--list"), "\n") { - if ls := strings.Split(v, "="); len(ls) > 1 { - m.Push(kit.MDB_NAME, ls[0]) - m.Push(kit.MDB_VALUE, ls[1]) - m.PushButton(mdb.REMOVE) + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + CONFIG: {Name: CONFIG, Help: "配置键", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, + }, + Commands: map[string]*ice.Command{ + CONFIG: {Name: "server name auto create", Help: "配置键", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create name value", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", m.Option(kit.MDB_NAME), m.Option(kit.MDB_VALUE)) + m.Cmd(mdb.DELETE, m.Prefix(CONFIG), "", kit.MDB_HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) + m.ProcessRefresh("0ms") + }}, + mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + if arg[0] == kit.MDB_VALUE { + m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", m.Option(kit.MDB_NAME), arg[1]) + } + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(cli.SYSTEM, GIT, CONFIG, "--global", "--unset", m.Option(kit.MDB_NAME)) + m.Cmd(mdb.INSERT, m.Prefix(CONFIG), "", kit.MDB_HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_VALUE, m.Option(kit.MDB_VALUE)) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) > 0 { + m.Echo(m.Cmdx(cli.SYSTEM, GIT, CONFIG, "--global", arg[0])) + return } - } - m.Sort(kit.MDB_NAME) - }}, - }}) + + for _, v := range strings.Split(m.Cmdx(cli.SYSTEM, GIT, CONFIG, "--global", "--list"), "\n") { + if ls := strings.Split(v, "="); len(ls) > 1 { + m.Push(kit.MDB_NAME, ls[0]) + m.Push(kit.MDB_VALUE, ls[1]) + m.PushButton(mdb.REMOVE) + } + } + m.Sort(kit.MDB_NAME) + + m.Cmd(mdb.SELECT, m.Prefix(CONFIG), "", kit.MDB_HASH, ice.OptionFields("name,value")).Table(func(index int, value map[string]string, head []string) { + m.Push("", value, head) + m.PushButton(mdb.CREATE) + }) + }}, + }}) } diff --git a/misc/git/git.go b/misc/git/git.go index b925a56b..11b42aad 100644 --- a/misc/git/git.go +++ b/misc/git/git.go @@ -17,7 +17,7 @@ const GIT = "git" var Index = &ice.Context{Name: GIT, Help: "代码库", Configs: map[string]*ice.Config{ GIT: {Name: GIT, Help: "代码库", Value: kit.Data( - kit.SSH_SOURCE, "https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz", "config", kit.Dict( + kit.SSH_SOURCE, "https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz", CONFIG, kit.Dict( "alias", kit.Dict("s", "status", "b", "branch"), "credential", kit.Dict("helper", "store"), "core", kit.Dict("quotepath", "false"), @@ -28,14 +28,18 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", }, Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - _repos_insert(m, path.Base(kit.Pwd()), kit.Pwd()) + m.Load() + _repos_insert(m, path.Base(kit.Pwd()), kit.Pwd()) m.Cmd(nfs.DIR, kit.SSH_USR, "name,path").Table(func(index int, value map[string]string, head []string) { _repos_insert(m, value[kit.MDB_NAME], value[kit.MDB_PATH]) }) }}, + ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Save(CONFIG) + }}, - GIT: {Name: "git port path auto start build download", Help: "代码库", Action: map[string]*ice.Action{ + GIT: {Name: "git port path auto start build download", Help: "源代码", Action: map[string]*ice.Action{ web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(GIT, kit.META_SOURCE)) }}, diff --git a/misc/git/repos.go b/misc/git/repos.go index 0b398e54..f1f99ff3 100644 --- a/misc/git/repos.go +++ b/misc/git/repos.go @@ -73,9 +73,6 @@ func init() { _repos_insert(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_PATH)) }}, - "proxy": {Name: "proxy from to", Help: "代理", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(cli.SYSTEM, GIT, "config", "--global", fmt.Sprintf(`url.%s.insteadOf`, m.Option("to")), m.Option("from")) - }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { // 仓库列表 m.Fields(len(arg) == 0, "time,name,branch,commit,remote") diff --git a/misc/git/server.go b/misc/git/server.go index 46110270..f7b1e63a 100644 --- a/misc/git/server.go +++ b/misc/git/server.go @@ -24,7 +24,7 @@ func init() { SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data(kit.MDB_PATH, "usr/local")}, }, Commands: map[string]*ice.Command{ - SERVER: {Name: "server path auto create", Help: "server", Action: map[string]*ice.Action{ + SERVER: {Name: "server path auto create", Help: "服务器", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create name", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_DIR, path.Join(m.Conf(SERVER, kit.META_PATH), REPOS)) m.Cmd(cli.SYSTEM, GIT, INIT, "--bare", m.Option(kit.MDB_NAME)) diff --git a/misc/git/status.go b/misc/git/status.go index 614ab6c6..efe6d71b 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -13,17 +13,43 @@ func _status_each(m *ice.Message, title string, cmds ...string) { count, total := 0, len(m.Confm(REPOS, kit.MDB_HASH)) toast("begin", count, total) + list := []string{} m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) { toast(value[kit.MDB_NAME], count, total) - m.Cmd(cmds, ice.Option{cli.CMD_DIR, value[kit.MDB_PATH]}) + msg := m.Cmd(cmds, ice.Option{cli.CMD_DIR, value[kit.MDB_PATH]}) + if msg.Append(cli.CMD_CODE) != "0" { + list = append(list, value[kit.MDB_NAME]) + m.Toast(msg.Append(cli.CMD_ERR), "error: "+value[kit.MDB_NAME], "3s") + m.Sleep("3s") + } count++ }) - toast("success", count, total) + if len(list) > 0 { + m.Toast(strings.Join(list, "\n"), "failure", "30s") + } else { + toast("success", count, total) + } + }) } -func _status_list(m *ice.Message) { +func _status_stat(m *ice.Message, files, adds, dels int) (int, int, int) { + ls := kit.Split(m.Cmdx(cli.SYSTEM, GIT, DIFF, "--shortstat"), ",", ",") + for _, v := range ls { + n := kit.Int(kit.Split(strings.TrimSpace(v))[0]) + switch { + case strings.Contains(v, "file"): + files += n + case strings.Contains(v, "insert"): + adds += n + case strings.Contains(v, "delet"): + dels += n + } + } + return files, adds, dels +} +func _status_list(m *ice.Message) (files, adds, dels int) { m.Cmd(REPOS, ice.OptionFields("name,path")).Table(func(index int, value map[string]string, head []string) { m.Option(cli.CMD_DIR, value[kit.MDB_PATH]) diff := m.Cmdx(cli.SYSTEM, GIT, STATUS, "-sb") @@ -49,7 +75,10 @@ func _status_list(m *ice.Message) { } m.PushButton(strings.Join(list, ",")) } + + files, adds, dels = _status_stat(m, files, adds, dels) }) + return } const ( @@ -65,7 +94,7 @@ const STATUS = "status" func init() { Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ - STATUS: {Name: "status name auto", Help: "代码状态", Action: map[string]*ice.Action{ + STATUS: {Name: "status name auto", Help: "状态机", Action: map[string]*ice.Action{ PULL: {Name: "pull", Help: "下载", Hand: func(m *ice.Message, arg ...string) { _status_each(m, PULL, cli.SYSTEM, GIT, PULL) m.ProcessHold() @@ -104,13 +133,21 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - _status_list(m) m.Action(PULL, MAKE, PUSH) + + files, adds, dels := _status_list(m) + m.Status("files", files, "adds", adds, "dels", dels) + m.Toast(kit.Format("files: %d, adds: %d, dels: %d", files, adds, dels), ice.CONTEXTS, "3s") return } - m.Echo(m.Cmdx(cli.SYSTEM, GIT, DIFF, ice.Option{cli.CMD_DIR, _repos_path(arg[0])})) + m.Option(cli.CMD_DIR, _repos_path(arg[0])) + m.Echo(m.Cmdx(cli.SYSTEM, GIT, DIFF)) m.Action(COMMIT) + + files, adds, dels := _status_stat(m, 0, 0, 0) + m.Status("files", files, "adds", adds, "dels", dels) + m.Toast(kit.Format("files: %d, adds: %d, dels: %d", files, adds, dels), arg[0], "3s") }}, }}) } diff --git a/type.go b/type.go index 619f2d4a..bbb98cd2 100644 --- a/type.go +++ b/type.go @@ -374,6 +374,12 @@ func (m *Message) Format(key interface{}) string { return kit.FmtTime(kit.Int64(time.Now().Sub(m.time))) case "meta": return kit.Format(m.meta) + case "size": + if len(m.meta["append"]) == 0 { + return fmt.Sprintf("%dx%d", 0, 0) + } else { + return fmt.Sprintf("%dx%d", len(m.meta[m.meta["append"][0]]), len(m.meta["append"])) + } case "append": if len(m.meta["append"]) == 0 { return fmt.Sprintf("%dx%d %s", 0, 0, "[]")