1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00

opt git.status

This commit is contained in:
shaoying 2021-05-03 15:33:42 +08:00
parent 63bcfea410
commit e167f23c70
15 changed files with 158 additions and 59 deletions

View File

@ -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])
}
}},

View File

@ -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))

10
conf.go
View File

@ -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"

View File

@ -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)
}

View File

@ -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]))))
})

View File

@ -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 {

View File

@ -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) {

View File

@ -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
}

27
misc.go
View File

@ -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))
}

View File

@ -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)
})
}},
}})
}

View File

@ -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))
}},

View File

@ -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")

View File

@ -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))

View File

@ -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")
}},
}})
}

View File

@ -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, "[]")