summaryrefslogtreecommitdiff
path: root/go/internal/command/commandargs/base_args.go
diff options
context:
space:
mode:
authorPatrick Bajao <ebajao@gitlab.com>2019-07-29 15:56:00 +0800
committerPatrick Bajao <ebajao@gitlab.com>2019-07-31 12:03:37 +0800
commit3b0176df497263323da2fae793a79b568502e6db (patch)
treef4ff3e232bc3717c539d73a4f0460d6d12b4a6de /go/internal/command/commandargs/base_args.go
parentaab85f3600caf04b491d6ca4fc3f0f004d9e3fc0 (diff)
downloadgitlab-shell-3b0176df497263323da2fae793a79b568502e6db.tar.gz
Support different CommandArgs type
`CommandArgs` has been renamed to `Shell`. An interface has been added that includes `Executable()` and `Arguments()` method. The `BaseArgs` implement this methods and should be embeeded in each type.
Diffstat (limited to 'go/internal/command/commandargs/base_args.go')
-rw-r--r--go/internal/command/commandargs/base_args.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/go/internal/command/commandargs/base_args.go b/go/internal/command/commandargs/base_args.go
new file mode 100644
index 0000000..f65373e
--- /dev/null
+++ b/go/internal/command/commandargs/base_args.go
@@ -0,0 +1,34 @@
+package commandargs
+
+import (
+ "errors"
+ "path/filepath"
+)
+
+type BaseArgs struct {
+ arguments []string
+}
+
+func (b *BaseArgs) Parse() error {
+ if b.hasEmptyArguments() {
+ return errors.New("arguments should include the executable")
+ }
+
+ return nil
+}
+
+func (b *BaseArgs) Executable() Executable {
+ if b.hasEmptyArguments() {
+ return Executable("")
+ }
+
+ return Executable(filepath.Base(b.arguments[0]))
+}
+
+func (b *BaseArgs) Arguments() []string {
+ return b.arguments[1:]
+}
+
+func (b *BaseArgs) hasEmptyArguments() bool {
+ return len(b.arguments) == 0
+}