aboutsummaryrefslogtreecommitdiff
path: root/awwan.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-12-22 02:04:11 +0700
committerShulhan <ms@kilabit.info>2023-12-22 03:07:52 +0700
commitc0d336ca456093b2b7c0b585dbe08f62cbc8ca83 (patch)
treecb313f0352a91562cc99ad115d62bad1447dc2b9 /awwan.go
parent66a18a789edaa35dfa4446846eeeffabfee0b269 (diff)
downloadawwan-c0d336ca456093b2b7c0b585dbe08f62cbc8ca83.tar.xz
all: add [context.Context] to Local and Play
Passing context allow the command Local or Play to be cancelled when running in asynchronous mode, in this case when awwan run with WUI.
Diffstat (limited to 'awwan.go')
-rw-r--r--awwan.go41
1 files changed, 27 insertions, 14 deletions
diff --git a/awwan.go b/awwan.go
index bb8ded4..99cfec9 100644
--- a/awwan.go
+++ b/awwan.go
@@ -4,6 +4,7 @@
package awwan
import (
+ "context"
"fmt"
"log"
"os"
@@ -284,7 +285,7 @@ func (aww *Awwan) EnvSet(key, val, file string) (err error) {
}
// Local execute the script in the local machine using shell.
-func (aww *Awwan) Local(req *ExecRequest) (err error) {
+func (aww *Awwan) Local(ctx context.Context, req *ExecRequest) (err error) {
var (
logp = `Local`
sessionDir = filepath.Dir(req.scriptPath)
@@ -320,14 +321,20 @@ func (aww *Awwan) Local(req *ExecRequest) (err error) {
req.mlog.Outf(`=== BEGIN: %s %s %s`, req.Mode, req.Script, req.LineRange)
for _, pos = range req.lineRange.list {
- err = ses.executeRequires(req, pos)
- if err != nil {
+ select {
+ case <-ctx.Done():
+ err = ctx.Err()
goto out
- }
+ default:
+ err = ses.executeRequires(ctx, req, pos)
+ if err != nil {
+ goto out
+ }
- err = ses.executeScriptOnLocal(req, pos)
- if err != nil {
- goto out
+ err = ses.executeScriptOnLocal(ctx, req, pos)
+ if err != nil {
+ goto out
+ }
}
}
req.mlog.Outf(`=== END: %s %s %s`, req.Mode, req.Script, req.LineRange)
@@ -341,7 +348,7 @@ out:
}
// Play execute the script in the remote machine using SSH.
-func (aww *Awwan) Play(req *ExecRequest) (err error) {
+func (aww *Awwan) Play(ctx context.Context, req *ExecRequest) (err error) {
var (
logp = `Play`
sessionDir = filepath.Dir(req.scriptPath)
@@ -391,14 +398,20 @@ func (aww *Awwan) Play(req *ExecRequest) (err error) {
req.mlog.Outf(`=== BEGIN: %s %s %s`, req.Mode, req.Script, req.LineRange)
for _, pos = range req.lineRange.list {
- err = ses.executeRequires(req, pos)
- if err != nil {
+ select {
+ case <-ctx.Done():
+ err = ctx.Err()
goto out
- }
+ default:
+ err = ses.executeRequires(ctx, req, pos)
+ if err != nil {
+ goto out
+ }
- err = ses.executeScriptOnRemote(req, pos)
- if err != nil {
- goto out
+ err = ses.executeScriptOnRemote(ctx, req, pos)
+ if err != nil {
+ goto out
+ }
}
}
req.mlog.Outf(`=== END: %s %s %s`, req.Mode, req.Script, req.LineRange)