1
0
mirror of https://shylinux.com/x/icebergs synced 2025-06-27 02:37:31 +08:00
This commit is contained in:
harveyshao 2021-06-03 16:35:26 +08:00
parent a50ef26303
commit e4a4bbde8f
14 changed files with 88 additions and 25 deletions

View File

@ -66,10 +66,23 @@ func init() {
SESS: {Name: SESS, Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", kit.MDB_EXPIRE, "720h")}, SESS: {Name: SESS, Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", kit.MDB_EXPIRE, "720h")},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SESS: {Name: "sess hash auto", Help: "会话", Action: map[string]*ice.Action{ SESS: {Name: "sess hash auto prunes", Help: "会话", Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.FIELDS, "time,username,userrole,ip,ua")
m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}}, }},
mdb.PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
list := []string{}
m.Richs(SESS, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
if value = kit.GetMeta(value); kit.Time(kit.Format(value[kit.MDB_TIME])) < kit.Time(m.Option("before")) {
list = append(list, key)
}
})
m.Option(mdb.FIELDS, "time,username,userrole,ip,ua")
for _, v := range list {
m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, v)
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,username,userrole") m.Fields(len(arg) == 0, "time,hash,username,userrole")
m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg) m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg)

View File

@ -121,14 +121,16 @@ func init() {
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
QRCODE: {Name: "qrcode text fg bg size auto", Help: "二维码", Action: map[string]*ice.Action{}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { QRCODE: {Name: "qrcode text fg bg size auto", Help: "二维码", Action: map[string]*ice.Action{}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(FG, kit.Select(BLUE, arg, 1))
m.Option(BG, kit.Select(WHITE, arg, 2))
m.Option(SIZE, kit.Select("240", arg, 3)) m.Option(SIZE, kit.Select("240", arg, 3))
m.Option(BG, kit.Select(WHITE, arg, 2))
m.Option(FG, kit.Select(BLUE, arg, 1))
if aaa.SessIsCli(m) { if len(arg) == 0 {
_qrcode_cli(m, kit.Select("hi", arg, 0))
} else if aaa.SessIsCli(m) {
_qrcode_cli(m, arg[0])
} else { } else {
_qrcode_web(m, kit.Select("hi", arg, 0)) _qrcode_web(m, arg[0])
} }
}}, }},
}, },

View File

@ -72,6 +72,11 @@ func init() {
}}, }},
PROCINFO: {Name: "procinfo", Help: "进程信息", Hand: func(m *ice.Message, arg ...string) { PROCINFO: {Name: "procinfo", Help: "进程信息", Hand: func(m *ice.Message, arg ...string) {
m.Split(m.Cmdx(SYSTEM, "ps", "u"), "", " ", "\n") m.Split(m.Cmdx(SYSTEM, "ps", "u"), "", " ", "\n")
m.PushAction("kill")
}},
"kill": {Name: "kill", Help: "结束进程", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(SYSTEM, "kill", m.Option("PID"))
m.ProcessRefresh("10ms")
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == BOOTINFO { if len(arg) > 0 && arg[0] == BOOTINFO {

View File

@ -6,8 +6,10 @@ import (
"io" "io"
"os" "os"
"os/exec" "os/exec"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
@ -80,6 +82,13 @@ func init() {
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg) == 0, "time,id,cmd")
m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST)
return
}
m.Grow(SYSTEM, "", kit.Dict(kit.MDB_TIME, m.Time(), CMD, strings.Join(arg, " ")))
if len(arg) == 1 { if len(arg) == 1 {
arg = kit.Split(arg[0]) arg = kit.Split(arg[0])
} }

View File

@ -409,8 +409,9 @@ const (
IMPORT = "import" IMPORT = "import"
PRUNES = "prunes" PRUNES = "prunes"
INPUTS = "inputs" INPUTS = "inputs"
REPEAT = "repeat"
REVERT = "revert" REVERT = "revert"
REPEAT = "repeat"
UPLOAD = "upload"
) )
const ( const (
CACHE_LIMIT = "cache.limit" CACHE_LIMIT = "cache.limit"

View File

@ -13,6 +13,7 @@ import (
"strings" "strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
@ -181,10 +182,12 @@ func init() {
_dir_show(m, arg[2], arg[1], 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), _dir_show(m, arg[2], arg[1], 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)),
nil, kit.Split("time,size,type,path")) nil, kit.Split("time,size,type,path"))
}}, }},
mdb.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
"upload": {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
m.Upload(m.Option(kit.MDB_PATH)) m.Upload(m.Option(kit.MDB_PATH))
}}, }},
TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(TRASH, m.Option(kit.MDB_PATH))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {
arg = append(arg, "") arg = append(arg, "")
@ -193,6 +196,11 @@ func init() {
0, m.Options(DIR_DEEP), kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), kit.Regexp(m.Option(DIR_REG)), 0, m.Options(DIR_DEEP), kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), kit.Regexp(m.Option(DIR_REG)),
kit.Split(kit.Select("time,size,path", strings.Join(arg[1:], ",")))) kit.Split(kit.Select("time,size,path", strings.Join(arg[1:], ","))))
m.SortTimeR(kit.MDB_TIME) m.SortTimeR(kit.MDB_TIME)
if !aaa.SessIsCli(m) {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", TRASH, !strings.HasSuffix(value[kit.MDB_PATH], "/")))
})
}
}}, }},
}, },
}) })

View File

@ -35,7 +35,7 @@ func _ssh_close(m *ice.Message, c net.Conn, channel ssh.Channel) {
defer channel.Close() defer channel.Close()
channel.Write([]byte(m.Conf(SERVICE, kit.Keym(GOODBYE)))) channel.Write([]byte(m.Conf(SERVICE, kit.Keym(GOODBYE))))
} }
func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer, display io.Writer) { func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer) {
r, w := io.Pipe() r, w := io.Pipe()
bio := io.TeeReader(input, w) bio := io.TeeReader(input, w)
m.Go(func() { io.Copy(output, r) }) m.Go(func() { io.Copy(output, r) })

View File

@ -28,6 +28,11 @@ func _ssh_open(m *ice.Message, arg ...string) {
defer terminal.Restore(fd, oldState) defer terminal.Restore(fd, oldState)
} }
gdb.SignalNotify(m, 28, func() {
w, h, _ := terminal.GetSize(fd)
_ssh_sizes(os.Stdin.Fd(), w, h)
})
// 设置宽高 // 设置宽高
w, h, _ := terminal.GetSize(fd) w, h, _ := terminal.GetSize(fd)
c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w))) c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w)))
@ -89,11 +94,11 @@ func _ssh_dial(m *ice.Message, cb func(net.Conn), arg ...string) {
ssh.TTY_OP_OSPEED: 14400, ssh.TTY_OP_OSPEED: 14400,
}) })
gdb.SignalNotify(m, 28, func() { // gdb.SignalNotify(m, 28, func() {
w, h, _ := terminal.GetSize(int(os.Stdin.Fd())) // w, h, _ := terminal.GetSize(int(os.Stdin.Fd()))
session.WindowChange(h, w) // session.WindowChange(h, w)
}) // })
//
session.Shell() session.Shell()
session.Wait() session.Wait()
}) })

View File

@ -19,5 +19,9 @@ func _ssh_size(fd uintptr, b []byte) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)} ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
} }
func _ssh_sizes(fd uintptr, w, h int) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
} }

View File

@ -2,13 +2,14 @@ package ssh
import ( import (
"encoding/binary" "encoding/binary"
"github.com/kr/pty"
"io" "io"
"net" "net"
"os" "os"
"syscall" "syscall"
"unsafe" "unsafe"
"github.com/kr/pty"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
@ -26,6 +27,10 @@ func _ssh_size(fd uintptr, b []byte) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)} ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
} }
func _ssh_sizes(fd uintptr, w, h int) {
ws := &Winsize{Width: uint16(w), Height: uint16(h)}
syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws)))
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr())
defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr())
@ -67,14 +72,13 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh
channel.Close() channel.Close()
}) })
case "shell": case "shell":
_ssh_watch(m, meta, h, channel, pty)
m.Go(func() { io.Copy(channel, pty) }) m.Go(func() { io.Copy(channel, pty) })
_ssh_exec(m, shell, nil, list, tty, tty, func() { _ssh_exec(m, shell, nil, list, tty, tty, func() {
defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE) defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE)
_ssh_close(m, c, channel) _ssh_close(m, c, channel)
}) })
_ssh_watch(m, meta, h, channel, pty, channel)
} }
request.Reply(true, nil) request.Reply(true, nil)
} }

View File

@ -11,5 +11,7 @@ type Winsize struct{ Height, Width, x, y uint16 }
func _ssh_size(fd uintptr, b []byte) { func _ssh_size(fd uintptr, b []byte) {
} }
func _ssh_sizes(fd uintptr, w, h int) {
}
func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) {
} }

View File

@ -6,7 +6,7 @@ const ( // MOD
MOD_CHAN = 16 MOD_CHAN = 16
MOD_TICK = "1s" MOD_TICK = "1s"
MOD_BUFS = 1024 MOD_BUFS = 4096
MOD_DATE = "2006-01-02" MOD_DATE = "2006-01-02"
MOD_TIME = "2006-01-02 15:04:05" MOD_TIME = "2006-01-02 15:04:05"

5
go.sum
View File

@ -1,7 +1,9 @@
github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc=
github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= 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 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc= github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc=
github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY= github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
@ -9,9 +11,12 @@ github.com/shylinux/toolkits v0.2.4 h1:2TaRBYdt15dE9vTUTO++6aF66vOZNd+ruP3be1C4z
github.com/shylinux/toolkits v0.2.4/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY= github.com/shylinux/toolkits v0.2.4/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 h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= 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/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/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
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/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/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/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

View File

@ -58,6 +58,11 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) {
for _, v := range strings.Split(strings.TrimSpace(diff), "\n") { for _, v := range strings.Split(strings.TrimSpace(diff), "\n") {
vs := strings.SplitN(strings.TrimSpace(v), " ", 2) vs := strings.SplitN(strings.TrimSpace(v), " ", 2)
switch kit.Ext(vs[1]) {
case "swp", "bin":
continue
}
m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
m.Push(kit.MDB_TYPE, vs[0]) m.Push(kit.MDB_TYPE, vs[0])
m.Push(kit.MDB_FILE, vs[1]) m.Push(kit.MDB_FILE, vs[1])
@ -98,6 +103,7 @@ const (
DIFF = "diff" DIFF = "diff"
COMMIT = "commit" COMMIT = "commit"
COMMENT = "comment"
) )
const STATUS = "status" const STATUS = "status"
@ -130,7 +136,7 @@ func init() {
m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE)) m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE))
}}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "自举"}, }}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "自举"},
COMMIT: {Name: "commit action=add,opt,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) { COMMIT: {Name: "commit action=opt,add,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == kit.MDB_ACTION { if arg[0] == kit.MDB_ACTION {
m.Option(kit.MDB_TEXT, arg[1]+" "+arg[3]) m.Option(kit.MDB_TEXT, arg[1]+" "+arg[3])
} else { } else {
@ -144,10 +150,9 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case kit.MDB_NAME: case kit.MDB_NAME:
m.OptionFields("name,time") m.Cmdy(REPOS, ice.OptionFields("name,time"))
m.Cmdy(REPOS)
case "comment": case COMMENT:
ls := []string{} ls := []string{}
ls = append(ls, kit.Split(m.Option(kit.MDB_FILE), " /")...) ls = append(ls, kit.Split(m.Option(kit.MDB_FILE), " /")...)