Prevents files to be used as input of dagger.#FS
Errors out in the PreRun phase of the clientfilesystemreader task since otherwise, dagger execution would hang Fixes #1977 Signed-off-by: Marcos Lilljedahl <marcosnils@gmail.com>
This commit is contained in:
parent
acc593f388
commit
66153c6194
@ -18,8 +18,7 @@ func init() {
|
|||||||
Register("ClientFilesystemRead", func() Task { return &clientFilesystemReadTask{} })
|
Register("ClientFilesystemRead", func() Task { return &clientFilesystemReadTask{} })
|
||||||
}
|
}
|
||||||
|
|
||||||
type clientFilesystemReadTask struct {
|
type clientFilesystemReadTask struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (t clientFilesystemReadTask) PreRun(_ context.Context, pctx *plancontext.Context, v *compiler.Value) error {
|
func (t clientFilesystemReadTask) PreRun(_ context.Context, pctx *plancontext.Context, v *compiler.Value) error {
|
||||||
path, err := t.parsePath(v)
|
path, err := t.parsePath(v)
|
||||||
@ -27,8 +26,10 @@ func (t clientFilesystemReadTask) PreRun(_ context.Context, pctx *plancontext.Co
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(path); errors.Is(err, os.ErrNotExist) {
|
if pi, err := os.Stat(path); errors.Is(err, os.ErrNotExist) {
|
||||||
return fmt.Errorf("path %q does not exist", path)
|
return fmt.Errorf("path %q does not exist", path)
|
||||||
|
} else if !pi.IsDir() && plancontext.IsFSValue(v.Lookup("contents")) {
|
||||||
|
return fmt.Errorf("path %q is not a directory", path)
|
||||||
}
|
}
|
||||||
|
|
||||||
if plancontext.IsFSValue(v.Lookup("contents")) {
|
if plancontext.IsFSValue(v.Lookup("contents")) {
|
||||||
|
@ -84,6 +84,15 @@ setup() {
|
|||||||
assert_output --partial 'path "/foobar" does not exist'
|
assert_output --partial 'path "/foobar" does not exist'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@test "plan/client/filesystem/read/fs/invalid" {
|
||||||
|
cd "$TESTDIR/plan/client/filesystem/read/fs/invalid"
|
||||||
|
|
||||||
|
run "$DAGGER" "do" -p . test
|
||||||
|
assert_failure
|
||||||
|
assert_output --partial 'test.txt" is not a directory'
|
||||||
|
}
|
||||||
|
|
||||||
@test "plan/client/filesystem/read/fs/relative" {
|
@test "plan/client/filesystem/read/fs/relative" {
|
||||||
cd "$TESTDIR/plan/client/filesystem/read/fs/relative"
|
cd "$TESTDIR/plan/client/filesystem/read/fs/relative"
|
||||||
|
|
||||||
|
11
tests/plan/client/filesystem/read/fs/invalid/test.cue
Normal file
11
tests/plan/client/filesystem/read/fs/invalid/test.cue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"dagger.io/dagger"
|
||||||
|
)
|
||||||
|
|
||||||
|
dagger.#Plan & {
|
||||||
|
client: filesystem: "../rootfs/test.txt": read: contents: dagger.#FS
|
||||||
|
actions: test: {
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user