mirror of
https://shylinux.com/x/icebergs
synced 2025-04-28 18:22:02 +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) {
|
func _system_show(m *ice.Message, cmd *exec.Cmd) {
|
||||||
if r, ok := m.Optionv(CMD_INPUT).(io.Reader); ok {
|
if r, ok := m.Optionv(CMD_INPUT).(io.Reader); ok {
|
||||||
cmd.Stdin = r
|
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 {
|
if w, ok := m.Optionv(CMD_OUTPUT).(io.WriteCloser); ok {
|
||||||
cmd.Stdout = w
|
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.Stderr = w
|
||||||
cmd.Stdout = w
|
if w, ok := m.Optionv(CMD_ERRPUT).(io.WriteCloser); ok {
|
||||||
|
cmd.Stderr = w
|
||||||
|
}
|
||||||
|
|
||||||
if e := cmd.Run(); e != nil {
|
if e := cmd.Run(); e != nil {
|
||||||
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", e.Error())
|
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())
|
m.Cost("args", cmd.Args, "code", cmd.ProcessState.ExitCode())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err := bytes.NewBuffer(make([]byte, 0, 1024))
|
|
||||||
out := bytes.NewBuffer(make([]byte, 0, 1024))
|
out := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||||
cmd.Stderr = err
|
err := bytes.NewBuffer(make([]byte, 0, 1024))
|
||||||
cmd.Stdout = out
|
|
||||||
defer func() {
|
defer func() {
|
||||||
m.Push(CMD_ERR, err.String())
|
m.Push(CMD_ERR, err.String())
|
||||||
m.Push(CMD_OUT, out.String())
|
m.Push(CMD_OUT, out.String())
|
||||||
m.Echo(kit.Select(err.String(), out.String()))
|
m.Echo(kit.Select(err.String(), out.String()))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
cmd.Stdout = out
|
||||||
|
cmd.Stderr = err
|
||||||
|
|
||||||
if e := cmd.Run(); e != nil {
|
if e := cmd.Run(); e != nil {
|
||||||
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", kit.Select(e.Error(), err.String()))
|
m.Warn(e != nil, ErrRun, strings.Join(cmd.Args, " "), "\n", kit.Select(e.Error(), err.String()))
|
||||||
} else {
|
} else {
|
||||||
@ -85,6 +76,9 @@ const (
|
|||||||
LINUX = "linux"
|
LINUX = "linux"
|
||||||
DARWIN = "darwin"
|
DARWIN = "darwin"
|
||||||
WINDOWS = "windows"
|
WINDOWS = "windows"
|
||||||
|
SOURCE = "source"
|
||||||
|
HOME = "home"
|
||||||
|
PATH = "path"
|
||||||
)
|
)
|
||||||
const SYSTEM = "system"
|
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"
|
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 PREPARE = "prepare"
|
||||||
const INSTALL = "install"
|
const INSTALL = "install"
|
||||||
|
|
||||||
@ -37,10 +26,10 @@ func init() {
|
|||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
|
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)
|
link := m.Option(kit.MDB_LINK)
|
||||||
name := path.Base(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)
|
defer m.Cmdy(nfs.DIR, file)
|
||||||
if _, e := os.Stat(file); e == nil {
|
if _, e := os.Stat(file); e == nil {
|
||||||
@ -80,7 +69,7 @@ func init() {
|
|||||||
pp := kit.Path(path.Join(p, "_install"))
|
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.Toast("success", "build") }()
|
||||||
defer func() { m.ProcessHold() }()
|
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{}
|
c.Commands = map[string]*Command{}
|
||||||
}
|
}
|
||||||
for k, v := range s.Commands {
|
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
|
c.Commands[k] = v
|
||||||
|
|
||||||
if v.List == nil {
|
if v.List == nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user