forked from x/icebergs
opt git.status
This commit is contained in:
parent
ef6ac8100e
commit
63bcfea410
@ -1,6 +1,12 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"net"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
@ -8,12 +14,6 @@ import (
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"math/rand"
|
||||
"net"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func _space_list(m *ice.Message, space string) {
|
||||
@ -188,11 +188,13 @@ func _space_search(m *ice.Message, kind, name, text string, arg ...string) {
|
||||
}
|
||||
})
|
||||
|
||||
port := m.Cmd(SERVE, ice.Option{mdb.FIELDS, tcp.PORT}).Append(tcp.PORT)
|
||||
m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushSearch(kit.SSH_CMD, SPACE, kit.MDB_TYPE, MYSELF, kit.MDB_NAME, value[kit.MDB_NAME],
|
||||
kit.MDB_TEXT, kit.Format("http://%s:%s", value[tcp.IP], port), kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), value))
|
||||
})
|
||||
if name == "" {
|
||||
port := m.Cmd(SERVE, ice.Option{mdb.FIELDS, tcp.PORT}).Append(tcp.PORT)
|
||||
m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushSearch(kit.SSH_CMD, SPACE, kit.MDB_TYPE, MYSELF, kit.MDB_NAME, value[kit.MDB_NAME],
|
||||
kit.MDB_TEXT, kit.Format("http://%s:%s", value[tcp.IP], port), kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), value))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const (
|
||||
@ -263,7 +265,7 @@ func init() {
|
||||
switch kind {
|
||||
case CHROME:
|
||||
if m.Option(ice.MSG_USERNAME) != "" {
|
||||
break
|
||||
// break
|
||||
}
|
||||
|
||||
m.Go(func(msg *ice.Message) {
|
||||
|
5
conf.go
5
conf.go
@ -51,6 +51,8 @@ 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"
|
||||
@ -100,6 +102,9 @@ const ( // PROCESS
|
||||
PROCESS_FIELD = "_field"
|
||||
PROCESS_OPEN = "_open"
|
||||
|
||||
PROCESS_HOLD = "_hold"
|
||||
PROCESS_BACK = "_back"
|
||||
|
||||
FIELD_PREFIX = "_prefix"
|
||||
CONTROL_PAGE = "_page"
|
||||
)
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
@ -58,6 +59,7 @@ func _action_share(m *ice.Message, cmd string, arg ...string) {
|
||||
case web.FIELD:
|
||||
if cmd := kit.Keys(msg.Append(web.RIVER), msg.Append(web.STORM)); len(arg) == 2 {
|
||||
m.Push("index", cmd)
|
||||
m.Push("title", msg.Append(kit.MDB_NAME))
|
||||
m.Push("args", msg.Append(kit.MDB_TEXT))
|
||||
} else {
|
||||
if m.Warn(kit.Time() > kit.Time(msg.Append(kit.MDB_TIME)), ice.ErrExpire) {
|
||||
@ -133,6 +135,10 @@ func init() {
|
||||
m.Cmdy(ctx.COMMAND, strings.TrimPrefix(k, "."))
|
||||
}
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, RIVER, kit.Keys(kit.MDB_HASH, m.Option(RIVER), TOOL, kit.MDB_HASH, m.Option(STORM)), mdb.LIST,
|
||||
kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
SHARE: {Name: "share", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
|
||||
_header_share(m, arg...)
|
||||
}},
|
||||
|
@ -22,8 +22,11 @@ func _river_list(m *ice.Message) {
|
||||
m.Option(ice.MSG_RIVER, msg.Append(RIVER))
|
||||
m.Option(ice.MSG_STORM, msg.Append(STORM))
|
||||
|
||||
if m.Conf(RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER))) == "" {
|
||||
break
|
||||
}
|
||||
if msg.Cmd(m.Prefix(USER), m.Option(ice.MSG_USERNAME)).Append(aaa.USERNAME) == "" {
|
||||
// msg.Cmd(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
||||
msg.Cmd(m.Prefix(USER), mdb.INSERT, aaa.USERNAME, m.Option(ice.MSG_USERNAME))
|
||||
// 加入群组
|
||||
}
|
||||
case web.FIELD: // 应用入口
|
||||
|
8
go.sum
8
go.sum
@ -1,18 +1,26 @@
|
||||
github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc=
|
||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII=
|
||||
github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc=
|
||||
github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
37
misc.go
37
misc.go
@ -237,10 +237,6 @@ func (m *Message) SortStrR(key string) { m.Sort(key, "str_r") }
|
||||
func (m *Message) SortTime(key string) { m.Sort(key, "time") }
|
||||
func (m *Message) SortTimeR(key string) { m.Sort(key, "time_r") }
|
||||
|
||||
func (m *Message) Process(action string, arg ...interface{}) {
|
||||
m.Option(MSG_PROCESS, action)
|
||||
m.Option("_arg", arg...)
|
||||
}
|
||||
func (m *Message) FormatMeta() string { return m.Format("meta") }
|
||||
func (m *Message) RenameAppend(from, to string) {
|
||||
for i, v := range m.meta[MSG_APPEND] {
|
||||
@ -252,10 +248,6 @@ func (m *Message) RenameAppend(from, to string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Message) Fields(condition bool, fields string) string {
|
||||
return m.Option("fields", kit.Select(kit.Select("detail", fields, condition), m.Option("fields")))
|
||||
}
|
||||
|
||||
type Option struct {
|
||||
Name string
|
||||
Value interface{}
|
||||
@ -263,3 +255,32 @@ type Option struct {
|
||||
|
||||
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{}) {
|
||||
m.Cmd("web.space", m.Option("_daemon"), "toast", "", content, arg)
|
||||
}
|
||||
func (m *Message) GoToast(title string, cb func(func(string, int, int))) {
|
||||
m.Go(func() {
|
||||
cb(func(name string, count, total int) {
|
||||
m.Toast(
|
||||
kit.Format("%s %d/%d", name, count, total),
|
||||
kit.Format("%s %d%%", title, count*100/total),
|
||||
kit.Select("1000", "10000", count < total),
|
||||
count*100/total,
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (m *Message) Fields(condition bool, fields string) string {
|
||||
return m.Option("fields", kit.Select(kit.Select("detail", fields, condition), m.Option("fields")))
|
||||
}
|
||||
func (m *Message) Action(arg ...string) {
|
||||
m.Option(MSG_ACTION, kit.Format(arg))
|
||||
}
|
||||
func (m *Message) Process(action string, arg ...interface{}) {
|
||||
m.Option(MSG_PROCESS, action)
|
||||
m.Option("_arg", arg...)
|
||||
}
|
||||
func (m *Message) ProcessHold() { m.Process(PROCESS_HOLD) }
|
||||
func (m *Message) ProcessBack() { m.Process(PROCESS_BACK) }
|
||||
|
@ -14,6 +14,9 @@ import (
|
||||
)
|
||||
|
||||
func _repos_path(name string) string {
|
||||
if strings.Contains(name, ":\\") {
|
||||
return name
|
||||
}
|
||||
return kit.Select(path.Join(kit.SSH_USR, name), "./", name == path.Base(kit.Pwd()))
|
||||
}
|
||||
func _repos_insert(m *ice.Message, name string, dir string) {
|
||||
@ -34,11 +37,8 @@ const (
|
||||
MASTER = "master"
|
||||
|
||||
CLONE = "clone"
|
||||
ADD = "add"
|
||||
|
||||
INIT = "init"
|
||||
PULL = "pull"
|
||||
PUSH = "push"
|
||||
)
|
||||
const REPOS = "repos"
|
||||
|
||||
@ -78,7 +78,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 仓库列表
|
||||
m.Option(mdb.FIELDS, "time,name,branch,commit,remote")
|
||||
m.Fields(len(arg) == 0, "time,name,branch,commit,remote")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(REPOS), "", mdb.HASH)
|
||||
m.Sort(kit.MDB_NAME)
|
||||
return
|
||||
|
@ -5,16 +5,61 @@ import (
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/core/code"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
func _status_each(m *ice.Message, title string, cmds ...string) {
|
||||
m.GoToast(title, func(toast func(string, int, int)) {
|
||||
count, total := 0, len(m.Confm(REPOS, kit.MDB_HASH))
|
||||
toast("begin", count, total)
|
||||
|
||||
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]})
|
||||
count++
|
||||
})
|
||||
|
||||
toast("success", count, total)
|
||||
})
|
||||
}
|
||||
func _status_list(m *ice.Message) {
|
||||
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")
|
||||
|
||||
for _, v := range strings.Split(strings.TrimSpace(diff), "\n") {
|
||||
vs := strings.SplitN(strings.TrimSpace(v), " ", 2)
|
||||
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
|
||||
m.Push(kit.MDB_TYPE, vs[0])
|
||||
m.Push(kit.MDB_FILE, vs[1])
|
||||
|
||||
list := []string{}
|
||||
switch vs[0] {
|
||||
case "##":
|
||||
if strings.Contains(vs[1], "ahead") {
|
||||
list = append(list, PUSH)
|
||||
}
|
||||
default:
|
||||
if strings.Contains(vs[0], "??") {
|
||||
list = append(list, ADD)
|
||||
} else {
|
||||
list = append(list, COMMIT)
|
||||
}
|
||||
}
|
||||
m.PushButton(strings.Join(list, ","))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const (
|
||||
COMPILE = "compile"
|
||||
COMMIT = "commit"
|
||||
DIFF = "diff"
|
||||
MAKE = "make"
|
||||
PULL = "pull"
|
||||
MAKE = "make"
|
||||
PUSH = "push"
|
||||
|
||||
ADD = "add"
|
||||
DIFF = "diff"
|
||||
COMMIT = "commit"
|
||||
)
|
||||
const STATUS = "status"
|
||||
|
||||
@ -22,27 +67,24 @@ func init() {
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
STATUS: {Name: "status name auto", Help: "代码状态", Action: map[string]*ice.Action{
|
||||
PULL: {Name: "pull", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.PROGRESS, mdb.CREATE, func(update func(name string, count, total int)) {
|
||||
count, total := 0, len(m.Confm(REPOS, kit.MDB_HASH))
|
||||
m.Richs(REPOS, nil, kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
update(kit.Format(value[kit.MDB_NAME]), count, total)
|
||||
|
||||
m.Option(cli.CMD_DIR, value[kit.MDB_PATH])
|
||||
m.Cmd(cli.SYSTEM, GIT, PULL)
|
||||
count++
|
||||
})
|
||||
update("", total, total)
|
||||
})
|
||||
_status_each(m, PULL, cli.SYSTEM, GIT, PULL)
|
||||
m.ProcessHold()
|
||||
}},
|
||||
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
|
||||
MAKE: {Name: "make", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Toast("doing", "make", 100000)
|
||||
defer m.Toast("success", "make", 1000)
|
||||
|
||||
m.Cmdy(cli.SYSTEM, MAKE)
|
||||
}},
|
||||
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.AUTOGEN, mdb.CREATE, arg)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.AUTOGEN, mdb.INPUTS, arg)
|
||||
PUSH: {Name: "push", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(kit.MDB_NAME) == "" {
|
||||
_status_each(m, PUSH, cli.SYSTEM, GIT, PUSH)
|
||||
m.ProcessHold()
|
||||
return
|
||||
}
|
||||
|
||||
m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME)))
|
||||
m.Cmdy(cli.SYSTEM, GIT, PUSH)
|
||||
}},
|
||||
|
||||
ADD: {Name: "add", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -50,63 +92,25 @@ func init() {
|
||||
m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE))
|
||||
}},
|
||||
COMMIT: {Name: "commit action=opt,add comment=some", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(kit.MDB_NAME) == "" {
|
||||
return
|
||||
if arg[0] == kit.MDB_ACTION {
|
||||
m.Option(kit.MDB_TEXT, arg[1]+" "+arg[3])
|
||||
} else {
|
||||
m.Option(kit.MDB_TEXT, kit.Select("opt some", strings.Join(arg, " ")))
|
||||
}
|
||||
|
||||
if m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME))); arg[0] == kit.MDB_ACTION {
|
||||
m.Cmdy(cli.SYSTEM, GIT, COMMIT, "-am", kit.Select("opt some", arg[1]+" "+arg[3]))
|
||||
} else {
|
||||
m.Cmdy(cli.SYSTEM, GIT, COMMIT, "-am", kit.Select("opt some", strings.Join(arg, " ")))
|
||||
}
|
||||
m.Option(ice.MSG_PROCESS, ice.PROCESS_REFRESH)
|
||||
}},
|
||||
PUSH: {Name: "push", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(kit.MDB_NAME) == "" {
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(m.Option(kit.MDB_NAME), ":\\") {
|
||||
m.Option(cli.CMD_DIR, m.Option(kit.MDB_NAME))
|
||||
} else {
|
||||
m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME)))
|
||||
}
|
||||
m.Cmdy(cli.SYSTEM, GIT, PUSH)
|
||||
m.Option(cli.CMD_DIR, _repos_path(m.Option(kit.MDB_NAME)))
|
||||
m.Cmdy(cli.SYSTEM, GIT, COMMIT, "-am", m.Option(kit.MDB_TEXT))
|
||||
m.ProcessBack()
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Richs(REPOS, nil, kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
if m.Option(cli.CMD_DIR, value[kit.MDB_PATH]); len(arg) > 0 {
|
||||
m.Option("_action", kit.Format([]string{"commit"}))
|
||||
m.Echo(m.Cmdx(cli.SYSTEM, GIT, DIFF))
|
||||
return // 更改详情
|
||||
}
|
||||
m.Option("_action", kit.Format([]string{"pull", "compile", "create"}))
|
||||
if len(arg) == 0 {
|
||||
_status_list(m)
|
||||
m.Action(PULL, MAKE, PUSH)
|
||||
return
|
||||
}
|
||||
|
||||
// 更改列表
|
||||
for _, v := range strings.Split(strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, STATUS, "-sb")), "\n") {
|
||||
vs := strings.SplitN(strings.TrimSpace(v), " ", 2)
|
||||
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
|
||||
m.Push(kit.MDB_TYPE, vs[0])
|
||||
m.Push(kit.MDB_FILE, vs[1])
|
||||
|
||||
list := []string{}
|
||||
switch vs[0] {
|
||||
case "##":
|
||||
if strings.Contains(vs[1], "ahead") {
|
||||
list = append(list, PUSH)
|
||||
}
|
||||
default:
|
||||
if strings.Contains(vs[0], "??") {
|
||||
list = append(list, ADD)
|
||||
} else {
|
||||
list = append(list, COMMIT)
|
||||
}
|
||||
}
|
||||
m.PushButton(strings.Join(list, ","))
|
||||
}
|
||||
})
|
||||
m.Sort(kit.MDB_NAME)
|
||||
m.Echo(m.Cmdx(cli.SYSTEM, GIT, DIFF, ice.Option{cli.CMD_DIR, _repos_path(arg[0])}))
|
||||
m.Action(COMMIT)
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
71
type.go
71
type.go
@ -643,30 +643,30 @@ func (m *Message) Cmd(arg ...interface{}) *Message {
|
||||
func (m *Message) cmd(arg ...interface{}) *Message {
|
||||
opts := map[string]interface{}{}
|
||||
args := []interface{}{}
|
||||
var cbs interface{}
|
||||
|
||||
// 解析参数
|
||||
for _, v := range arg {
|
||||
switch val := v.(type) {
|
||||
case Option:
|
||||
opts[val.Name] = val.Value
|
||||
case func(int, map[string]string, []string):
|
||||
defer func() { m.Table(val) }()
|
||||
|
||||
case *Option:
|
||||
opts[val.Name] = val.Value
|
||||
default:
|
||||
args = append(args, v)
|
||||
}
|
||||
}
|
||||
case Option:
|
||||
opts[val.Name] = val.Value
|
||||
|
||||
list := kit.Simple(args...)
|
||||
if len(args) > 0 {
|
||||
switch cb := args[len(args)-1]; cbs := cb.(type) {
|
||||
case string:
|
||||
default:
|
||||
if reflect.Func == reflect.TypeOf(cbs).Kind() {
|
||||
m.Optionv(list[0]+".cb", cbs)
|
||||
list = list[:len(list)-1]
|
||||
if reflect.Func == reflect.TypeOf(val).Kind() {
|
||||
cbs = val
|
||||
} else {
|
||||
args = append(args, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 解析命令
|
||||
list := kit.Simple(args...)
|
||||
if len(list) == 0 && m.Hand == false {
|
||||
list = m.meta[MSG_DETAIL]
|
||||
}
|
||||
@ -674,31 +674,32 @@ func (m *Message) cmd(arg ...interface{}) *Message {
|
||||
return m
|
||||
}
|
||||
|
||||
if cmd, ok := m.target.Commands[list[0]]; ok {
|
||||
m.TryCatch(m.Spawn(), true, func(msg *Message) {
|
||||
for k, v := range opts {
|
||||
msg.Option(k, v)
|
||||
}
|
||||
m = m.target.cmd(msg, cmd, list[0], list[1:]...)
|
||||
})
|
||||
} else if cmd, ok := m.source.Commands[list[0]]; ok {
|
||||
m.TryCatch(m.Spawn(m.source), true, func(msg *Message) {
|
||||
for k, v := range opts {
|
||||
msg.Option(k, v)
|
||||
}
|
||||
m = m.source.cmd(msg, cmd, list[0], list[1:]...)
|
||||
})
|
||||
} else {
|
||||
m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) {
|
||||
m.TryCatch(m.Spawn(s), true, func(msg *Message) {
|
||||
for k, v := range opts {
|
||||
msg.Option(k, v)
|
||||
}
|
||||
m = s.cmd(msg, cmd, key, list[1:]...)
|
||||
})
|
||||
run := func(msg *Message, ctx *Context, cmd *Command, key string, arg ...string) {
|
||||
if cbs != nil {
|
||||
msg.Option(list[0]+".cb", cbs)
|
||||
}
|
||||
for k, v := range opts {
|
||||
msg.Option(k, v)
|
||||
}
|
||||
|
||||
// 执行命令
|
||||
m.TryCatch(msg, true, func(msg *Message) {
|
||||
m = ctx.cmd(msg, cmd, key, arg...)
|
||||
})
|
||||
}
|
||||
|
||||
// 查找命令
|
||||
if cmd, ok := m.target.Commands[list[0]]; ok {
|
||||
run(m.Spawn(), m.target, cmd, list[0], list[1:]...)
|
||||
} else if cmd, ok := m.source.Commands[list[0]]; ok {
|
||||
run(m.Spawn(m.source), m.source, cmd, list[0], list[1:]...)
|
||||
} else {
|
||||
m.Search(list[0], func(p *Context, s *Context, key string, cmd *Command) {
|
||||
run(m.Spawn(s), s, cmd, key, list[1:]...)
|
||||
})
|
||||
}
|
||||
|
||||
// 系统命令
|
||||
if m.Warn(m.Hand == false, ErrNotFound, list) {
|
||||
return m.Set(MSG_RESULT).Cmd("cli.system", list)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user