diff options
| author | Shulhan <ms@kilabit.info> | 2023-03-20 00:28:14 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2023-03-20 13:53:53 +0700 |
| commit | b7fc0aad9f394c99b9cfd258db6abb4ecee028a9 (patch) | |
| tree | f6ab2efa3015be0e9bd92b8a2c7b8eaf2ff4375a /awwan.go | |
| parent | 42e96adf2ea2bab6f173bd38eed49f30346867dd (diff) | |
| download | awwan-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.go | 55 |
1 files changed, 26 insertions, 29 deletions
@@ -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 } |
