Improve shell quoting

This commit is contained in:
2024-04-16 07:38:23 +02:00
parent fe81d713e1
commit b594ff78b2
5 changed files with 64 additions and 6 deletions

27
acid.go
View File

@@ -93,10 +93,30 @@ func parseConfig(path string) error {
}
var err error
gNotifyScript, err = ttemplate.New("notify").Parse(gConfig.Notify)
gNotifyScript, err =
ttemplate.New("notify").Funcs(shellFuncs).Parse(gConfig.Notify)
return err
}
var shellFuncs = ttemplate.FuncMap{
"quote": func(word string) string {
// History expansion is annoying, don't let it cut us.
if strings.IndexRune(word, '!') >= 0 {
return "'" + strings.ReplaceAll(word, "'", `'"'"'`) + "'"
}
const special = "$`\"\\"
quoted := []rune{'"'}
for _, r := range word {
if strings.IndexRune(special, r) >= 0 {
quoted = append(quoted, '\\')
}
quoted = append(quoted, r)
}
return string(append(quoted, '"'))
},
}
// --- Utilities ---------------------------------------------------------------
func giteaSign(b []byte) string {
@@ -910,8 +930,9 @@ func executorRunTask(ctx context.Context, task Task) error {
// - we might have to clone submodules as well.
// Otherwise, we could download a source archive from Gitea,
// and use SFTP to upload it to the runner.
tmplScript, err := ttemplate.New("script").Parse(rt.Runner.Setup + "\n" +
rt.ProjectRunner.Setup + "\n" + rt.ProjectRunner.Build)
tmplScript, err := ttemplate.New("script").Funcs(shellFuncs).
Parse(rt.Runner.Setup + "\n" +
rt.ProjectRunner.Setup + "\n" + rt.ProjectRunner.Build)
if err != nil {
return fmt.Errorf("script: %w", err)
}