add copy command (instruction)
This commit is contained in:
parent
c548e6a5e8
commit
48600584a0
|
@ -0,0 +1,47 @@
|
|||
package instruction
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type copy struct {
|
||||
raw string
|
||||
Src string
|
||||
Dst string
|
||||
}
|
||||
|
||||
func (d *copy) Raw() string { return strings.Join([]string{"copy", d.raw}, " ") }
|
||||
|
||||
func (d *copy) Build(_args string) error {
|
||||
|
||||
// 1. extract action (sub command)
|
||||
split := strings.Split(_args, " ")
|
||||
|
||||
// 2. check syntax
|
||||
if len(split) != 2 {
|
||||
return ErrInvalidSyntax
|
||||
}
|
||||
|
||||
d.Src = strings.Trim(split[0], " \t")
|
||||
d.Dst = strings.Trim(split[1], " \t")
|
||||
d.raw = _args
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d copy) Exec(ctx ExecutionContext) ([]byte, error) {
|
||||
|
||||
// 1. fail if source file not found
|
||||
if _, err := os.Stat(d.Src); os.IsNotExist(err) {
|
||||
return nil, fmt.Errorf("cannot find script '%s'", d.Src)
|
||||
}
|
||||
|
||||
// 2. execute script
|
||||
if err := ctx.Executor.Command("cp", d.Src, d.Dst).Run(); err != nil {
|
||||
return nil, fmt.Errorf("cannot copy '%s' to '%s' | %s", d.Src, d.Dst, err)
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
|
||||
}
|
|
@ -40,6 +40,10 @@ func Parse(raw string) (T, error) {
|
|||
i := &set{}
|
||||
err := i.Build(split[1])
|
||||
return i, err
|
||||
case "copy":
|
||||
i := ©{}
|
||||
err := i.Build(split[1])
|
||||
return i, err
|
||||
case "alias":
|
||||
i := &alias{}
|
||||
err := i.Build(split[1])
|
||||
|
|
Loading…
Reference in New Issue