aboutsummaryrefslogtreecommitdiff
path: root/session.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2025-10-03 00:15:29 +0700
committerShulhan <ms@kilabit.info>2025-10-03 00:15:29 +0700
commit1003a18b85cffac4b9a92ee787fd8a9bdfca072d (patch)
tree2090d7c2b84dbd4cc39956145af3c070ba98f7ee /session.go
parent276096698be34a7c629b3fe7bfd79c48e1c24921 (diff)
downloadawwan-1003a18b85cffac4b9a92ee787fd8a9bdfca072d.tar.xz
all: add option "$noparse" for magic "#put" command
The "$noparse" option allow copying file without reading and parsing the input file.
Diffstat (limited to 'session.go')
-rw-r--r--session.go33
1 files changed, 15 insertions, 18 deletions
diff --git a/session.go b/session.go
index aa5c141..42fd0a4 100644
--- a/session.go
+++ b/session.go
@@ -125,7 +125,7 @@ func (ses *Session) Copy(req *ExecRequest, stmt *Statement) (err error) {
case statementKindGet, statementKindSudoGet:
// NO-OP.
case statementKindPut, statementKindSudoPut:
- src, isVault, err = ses.generateFileInput(src)
+ src, isVault, err = ses.generateFileInput(stmt, src)
if err != nil {
return fmt.Errorf(`%s: %w`, logp, err)
}
@@ -197,7 +197,7 @@ func (ses *Session) Put(ctx context.Context, req *ExecRequest, stmt *Statement)
isVault bool
)
- src, isVault, err = ses.generateFileInput(src)
+ src, isVault, err = ses.generateFileInput(stmt, src)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -241,7 +241,7 @@ func (ses *Session) SudoCopy(ctx context.Context, req *ExecRequest, stmt *Statem
case statementKindGet, statementKindSudoGet:
// NO-OP.
case statementKindPut, statementKindSudoPut:
- src, isVault, err = ses.generateFileInput(src)
+ src, isVault, err = ses.generateFileInput(stmt, src)
if err != nil {
return fmt.Errorf(`%s: %w`, logp, err)
}
@@ -338,7 +338,7 @@ func (ses *Session) SudoPut(ctx context.Context, req *ExecRequest, stmt *Stateme
isVault bool
)
- src, isVault, err = ses.generateFileInput(src)
+ src, isVault, err = ses.generateFileInput(stmt, src)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -544,30 +544,27 @@ func (ses *Session) executeScriptOnRemote(ctx context.Context, req *ExecRequest,
//
// For example, if the input file path is "{{.BaseDir}}/a/b/script" then the
// output file path would be "{{.BaseDir}}/.cache/a/b/script".
-func (ses *Session) generateFileInput(in string) (out string, isVault bool, err error) {
+func (ses *Session) generateFileInput(stmt *Statement, in string) (out string, isVault bool, err error) {
// Check if the file is binary first, since binary file will not get
// encrypted.
if !strings.HasSuffix(in, defEncryptExt) && libos.IsBinary(in) {
return in, false, nil
}
- var (
- logp = `generateFileInput`
- relPathInput = relativePath(ses.BaseDir, in)
-
- contentInput []byte
- )
+ var logp = `generateFileInput`
+ var newContent []byte
- contentInput, isVault, err = ses.loadFileInput(in)
+ newContent, isVault, err = ses.loadFileInput(in)
if err != nil {
+ var relPathInput = relativePath(ses.BaseDir, in)
return ``, false, fmt.Errorf(`%s %q: %w`, logp, relPathInput, err)
}
- var contentOut []byte
-
- contentOut, err = ses.render(in, contentInput)
- if err != nil {
- return ``, false, fmt.Errorf(`%s: %w`, logp, err)
+ if !stmt.optNoparse {
+ newContent, err = ses.render(in, newContent)
+ if err != nil {
+ return ``, false, fmt.Errorf(`%s: %w`, logp, err)
+ }
}
var (
@@ -582,7 +579,7 @@ func (ses *Session) generateFileInput(in string) (out string, isVault bool, err
out = filepath.Join(outDir, base)
- err = os.WriteFile(out, contentOut, 0600)
+ err = os.WriteFile(out, newContent, 0600)
if err != nil {
return ``, false, fmt.Errorf(`%s: %s: %w`, logp, out, err)
}