aboutsummaryrefslogtreecommitdiff
path: root/awwan.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-03-20 00:28:14 +0700
committerShulhan <ms@kilabit.info>2023-03-20 13:53:53 +0700
commitb7fc0aad9f394c99b9cfd258db6abb4ecee028a9 (patch)
treef6ab2efa3015be0e9bd92b8a2c7b8eaf2ff4375a /awwan.go
parent42e96adf2ea2bab6f173bd38eed49f30346867dd (diff)
downloadawwan-b7fc0aad9f394c99b9cfd258db6abb4ecee028a9.tar.xz
all: changes the line number arguments for "local" and "play" command
Previously, the "local" and "play" command only accept two kind of arguments: one argument for executing single line or two arguments for executing line range. There are no options to executing multiple single line, multiple line range, or combination of them. This changes make the both commands accept list of lines or line range where each separated by comma. For example, to execute multiple, different single lines awwan local 4,8,12 To execute multiple line range, awwan local 4-8,12-16 Or to execute multiple lines and line range, awwan local 4,8,10-12
Diffstat (limited to 'awwan.go')
-rw-r--r--awwan.go55
1 files changed, 26 insertions, 29 deletions
diff --git a/awwan.go b/awwan.go
index 1f60222..24294f1 100644
--- a/awwan.go
+++ b/awwan.go
@@ -133,12 +133,16 @@ func (aww *Awwan) Build() (err error) {
// Local execute the script in the local machine using shell.
func (aww *Awwan) Local(req *Request) (err error) {
+ if len(req.lineRange.list) == 0 {
+ // No position to be executed.
+ return nil
+ }
+
var (
logp = "Local"
ses *Session
sessionDir string
- maxLines int
)
req.scriptPath = filepath.Clean(req.Script)
@@ -168,15 +172,6 @@ func (aww *Awwan) Local(req *Request) (err error) {
return fmt.Errorf("%s: %w", logp, err)
}
- maxLines = len(req.script.stmts)
- if req.BeginAt >= maxLines {
- return fmt.Errorf("%s: start index %d out of range %d", logp,
- req.BeginAt, maxLines)
- }
- if req.EndAt > maxLines {
- req.EndAt = maxLines - 1
- }
-
// Create temporary directory.
err = os.MkdirAll(ses.tmpDir, 0700)
if err != nil {
@@ -189,18 +184,26 @@ func (aww *Awwan) Local(req *Request) (err error) {
}
}()
- err = ses.executeRequires(req)
- if err != nil {
- return fmt.Errorf("%s:%w", logp, err)
- }
+ var pos linePosition
+ for _, pos = range req.lineRange.list {
+ err = ses.executeRequires(req, pos)
+ if err != nil {
+ return fmt.Errorf("%s:%w", logp, err)
+ }
- ses.executeScriptOnLocal(req)
+ ses.executeScriptOnLocal(req, pos)
+ }
return nil
}
// Play execute the script in the remote machine using SSH.
func (aww *Awwan) Play(req *Request) (err error) {
+ if len(req.lineRange.list) == 0 {
+ // No position to be executed.
+ return nil
+ }
+
var (
logp = "Play"
@@ -209,7 +212,6 @@ func (aww *Awwan) Play(req *Request) (err error) {
sshSection *config.Section
mkdirStmt string
rmdirStmt string
- maxLines int
)
req.scriptPath = filepath.Clean(req.Script)
@@ -256,14 +258,6 @@ func (aww *Awwan) Play(req *Request) (err error) {
return fmt.Errorf("%s: %w", logp, err)
}
- maxLines = len(req.script.stmts)
- if req.BeginAt >= maxLines {
- return fmt.Errorf("%s: start index %d out of range %d", logp, req.BeginAt, maxLines)
- }
- if req.EndAt > maxLines {
- req.EndAt = maxLines - 1
- }
-
// Create temporary directory ...
mkdirStmt = fmt.Sprintf("mkdir %s", ses.tmpDir)
@@ -279,12 +273,15 @@ func (aww *Awwan) Play(req *Request) (err error) {
}
}()
- err = ses.executeRequires(req)
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
+ var pos linePosition
+ for _, pos = range req.lineRange.list {
+ err = ses.executeRequires(req, pos)
+ if err != nil {
+ return fmt.Errorf("%s: %w", logp, err)
+ }
- ses.executeScriptOnRemote(req)
+ ses.executeScriptOnRemote(req, pos)
+ }
return nil
}