diff --git a/internal/execext/exec.go b/internal/execext/exec.go index f62fd6a4..4d29cce8 100644 --- a/internal/execext/exec.go +++ b/internal/execext/exec.go @@ -72,6 +72,7 @@ func IsExitError(err error) bool { // Expand is a helper to mvdan.cc/shell.Fields that returns the first field // if available. func Expand(s string) (string, error) { + s = strings.Replace(s, " ", `\ `, -1) fields, err := shell.Fields(s, nil) if err != nil { return "", err diff --git a/task_test.go b/task_test.go index f3d8ed75..4b3b338f 100644 --- a/task_test.go +++ b/task_test.go @@ -274,16 +274,19 @@ func TestStatus(t *testing.T) { } func TestGenerates(t *testing.T) { - var srcTask = "sub/src.txt" - var relTask = "rel.txt" - var absTask = "abs.txt" + const ( + srcTask = "sub/src.txt" + relTask = "rel.txt" + absTask = "abs.txt" + fileWithSpaces = "my text file.txt" + ) // This test does not work with a relative dir. dir, err := filepath.Abs("testdata/generates") assert.NoError(t, err) var srcFile = filepath.Join(dir, srcTask) - for _, task := range []string{srcTask, relTask, absTask} { + for _, task := range []string{srcTask, relTask, absTask, fileWithSpaces} { path := filepath.Join(dir, task) _ = os.Remove(path) if _, err := os.Stat(path); err == nil { @@ -299,7 +302,7 @@ func TestGenerates(t *testing.T) { } assert.NoError(t, e.Setup()) - for _, theTask := range []string{relTask, absTask} { + for _, theTask := range []string{relTask, absTask, fileWithSpaces} { var destFile = filepath.Join(dir, theTask) var upToDate = fmt.Sprintf("task: Task \"%s\" is up to date\n", srcTask) + fmt.Sprintf("task: Task \"%s\" is up to date\n", theTask) diff --git a/testdata/generates/Taskfile.yml b/testdata/generates/Taskfile.yml index 97e20819..26987489 100644 --- a/testdata/generates/Taskfile.yml +++ b/testdata/generates/Taskfile.yml @@ -29,3 +29,13 @@ sub/src.txt: - echo "hello world" > sub/src.txt status: - test -f sub/src.txt + +'my text file.txt': + desc: generate file with spaces in the name + deps: [sub/src.txt] + cmds: + - cat sub/src.txt > 'my text file.txt' + sources: + - sub/src.txt + generates: + - 'my text file.txt'