mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt some
This commit is contained in:
parent
0cc1a5d6b4
commit
bbc0c2b30b
1
base/cli/stream.go
Normal file
1
base/cli/stream.go
Normal file
@ -0,0 +1 @@
|
||||
package cli
|
@ -16,24 +16,14 @@ import (
|
||||
func _system_show(m *ice.Message, cmd *exec.Cmd) {
|
||||
if r, ok := m.Optionv(CMD_INPUT).(io.Reader); ok {
|
||||
cmd.Stdin = r
|
||||
} else if r, ok := m.Optionv("input").(io.Reader); ok {
|
||||
cmd.Stdin = r
|
||||
}
|
||||
|
||||
if w, ok := m.Optionv(CMD_ERRPUT).(io.WriteCloser); ok {
|
||||
cmd.Stderr = w
|
||||
}
|
||||
if w, ok := m.Optionv(CMD_OUTPUT).(io.WriteCloser); ok {
|
||||
cmd.Stdout = w
|
||||
|
||||
if e := cmd.Run(); e != nil {
|
||||
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", e.Error())
|
||||
} else {
|
||||
m.Cost("args", cmd.Args, "code", cmd.ProcessState.ExitCode())
|
||||
}
|
||||
} else if w, ok := m.Optionv("output").(io.WriteCloser); ok {
|
||||
cmd.Stderr = w
|
||||
cmd.Stdout = w
|
||||
if w, ok := m.Optionv(CMD_ERRPUT).(io.WriteCloser); ok {
|
||||
cmd.Stderr = w
|
||||
}
|
||||
|
||||
if e := cmd.Run(); e != nil {
|
||||
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", e.Error())
|
||||
@ -41,16 +31,17 @@ func _system_show(m *ice.Message, cmd *exec.Cmd) {
|
||||
m.Cost("args", cmd.Args, "code", cmd.ProcessState.ExitCode())
|
||||
}
|
||||
} else {
|
||||
err := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||
out := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||
cmd.Stderr = err
|
||||
cmd.Stdout = out
|
||||
err := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||
defer func() {
|
||||
m.Push(CMD_ERR, err.String())
|
||||
m.Push(CMD_OUT, out.String())
|
||||
m.Echo(kit.Select(err.String(), out.String()))
|
||||
}()
|
||||
|
||||
cmd.Stdout = out
|
||||
cmd.Stderr = err
|
||||
|
||||
if e := cmd.Run(); e != nil {
|
||||
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", kit.Select(e.Error(), err.String()))
|
||||
} else {
|
||||
@ -85,6 +76,9 @@ const (
|
||||
LINUX = "linux"
|
||||
DARWIN = "darwin"
|
||||
WINDOWS = "windows"
|
||||
SOURCE = "source"
|
||||
HOME = "home"
|
||||
PATH = "path"
|
||||
)
|
||||
const SYSTEM = "system"
|
||||
|
||||
|
21
base/web/stream.go
Normal file
21
base/web/stream.go
Normal file
@ -0,0 +1,21 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
)
|
||||
|
||||
type Buffer struct {
|
||||
m *ice.Message
|
||||
n string
|
||||
}
|
||||
|
||||
func (b *Buffer) Write(buf []byte) (int, error) {
|
||||
b.m.Cmd(SPACE, b.n, "grow", string(buf))
|
||||
return len(buf), nil
|
||||
}
|
||||
func (b *Buffer) Close() error { return nil }
|
||||
|
||||
func PushStream(m *ice.Message) {
|
||||
m.Option(cli.CMD_OUTPUT, &Buffer{m: m, n: m.Option(ice.MSG_DAEMON)})
|
||||
}
|
@ -16,17 +16,6 @@ import (
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
type Buffer struct {
|
||||
m *ice.Message
|
||||
n string
|
||||
}
|
||||
|
||||
func (b *Buffer) Write(buf []byte) (int, error) {
|
||||
b.m.Cmd(web.SPACE, b.n, "grow", string(buf))
|
||||
return len(buf), nil
|
||||
}
|
||||
func (b *Buffer) Close() error { return nil }
|
||||
|
||||
const PREPARE = "prepare"
|
||||
const INSTALL = "install"
|
||||
|
||||
@ -37,10 +26,10 @@ func init() {
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download link", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
link := m.Option(kit.MDB_LINK)
|
||||
name := path.Base(link)
|
||||
file := path.Join(m.Conf(INSTALL, kit.META_PATH), name)
|
||||
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
|
||||
|
||||
defer m.Cmdy(nfs.DIR, file)
|
||||
if _, e := os.Stat(file); e == nil {
|
||||
@ -80,7 +69,7 @@ func init() {
|
||||
pp := kit.Path(path.Join(p, "_install"))
|
||||
|
||||
// 推流
|
||||
m.Option(cli.CMD_OUTPUT, &Buffer{m: m, n: m.Option(ice.MSG_DAEMON)})
|
||||
web.PushStream(m)
|
||||
defer func() { m.Toast("success", "build") }()
|
||||
defer func() { m.ProcessHold() }()
|
||||
|
||||
|
17
type.go
17
type.go
@ -159,6 +159,23 @@ func (c *Context) Merge(s *Context) *Context {
|
||||
c.Commands = map[string]*Command{}
|
||||
}
|
||||
for k, v := range s.Commands {
|
||||
if o, ok := c.Commands[k]; ok && s != c {
|
||||
func() {
|
||||
switch last, next := o.Hand, v.Hand; k {
|
||||
case CTX_INIT:
|
||||
v.Hand = func(m *Message, c *Context, key string, arg ...string) {
|
||||
last(m, c, key, arg...)
|
||||
next(m, c, key, arg...)
|
||||
}
|
||||
case CTX_EXIT:
|
||||
v.Hand = func(m *Message, c *Context, key string, arg ...string) {
|
||||
next(m, c, key, arg...)
|
||||
last(m, c, key, arg...)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
c.Commands[k] = v
|
||||
|
||||
if v.List == nil {
|
||||
|
Loading…
x
Reference in New Issue
Block a user