95 lines
1.9 KiB
Go
95 lines
1.9 KiB
Go
package command
|
|
|
|
import (
|
|
"acc-server-manager/local/utl/logging"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
type CommandExecutor struct {
|
|
ExePath string
|
|
WorkDir string
|
|
LogOutput bool
|
|
}
|
|
|
|
type CommandBuilder struct {
|
|
args []string
|
|
}
|
|
|
|
func NewCommandBuilder() *CommandBuilder {
|
|
return &CommandBuilder{
|
|
args: make([]string, 0),
|
|
}
|
|
}
|
|
|
|
func (b *CommandBuilder) Add(arg string) *CommandBuilder {
|
|
b.args = append(b.args, arg)
|
|
return b
|
|
}
|
|
|
|
func (b *CommandBuilder) AddPair(key, value string) *CommandBuilder {
|
|
b.args = append(b.args, key, value)
|
|
return b
|
|
}
|
|
|
|
func (b *CommandBuilder) AddFlag(flag string, value interface{}) *CommandBuilder {
|
|
b.args = append(b.args, fmt.Sprintf("%s=%v", flag, value))
|
|
return b
|
|
}
|
|
|
|
func (b *CommandBuilder) Build() []string {
|
|
return b.args
|
|
}
|
|
|
|
func (e *CommandExecutor) Execute(args ...string) error {
|
|
cmd := exec.Command(e.ExePath, args...)
|
|
|
|
if e.WorkDir != "" {
|
|
cmd.Dir = e.WorkDir
|
|
}
|
|
|
|
if e.LogOutput {
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
}
|
|
|
|
logging.Info("Executing command: %s %s", e.ExePath, strings.Join(args, " "))
|
|
return cmd.Run()
|
|
}
|
|
|
|
func (e *CommandExecutor) ExecuteWithBuilder(builder *CommandBuilder) error {
|
|
return e.Execute(builder.Build()...)
|
|
}
|
|
|
|
func (e *CommandExecutor) ExecuteWithOutput(args ...string) (string, error) {
|
|
cmd := exec.Command(e.ExePath, args...)
|
|
|
|
if e.WorkDir != "" {
|
|
cmd.Dir = e.WorkDir
|
|
}
|
|
|
|
logging.Info("Executing command: %s %s", e.ExePath, strings.Join(args, " "))
|
|
output, err := cmd.CombinedOutput()
|
|
return string(output), err
|
|
}
|
|
|
|
func (e *CommandExecutor) ExecuteWithEnv(env []string, args ...string) error {
|
|
cmd := exec.Command(e.ExePath, args...)
|
|
|
|
if e.WorkDir != "" {
|
|
cmd.Dir = e.WorkDir
|
|
}
|
|
|
|
if e.LogOutput {
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
}
|
|
|
|
cmd.Env = append(os.Environ(), env...)
|
|
|
|
logging.Info("Executing command: %s %s", e.ExePath, strings.Join(args, " "))
|
|
return cmd.Run()
|
|
}
|