lookDir := func(dir string) {
absDir, dir := pathRel(workDir, dir)
- fi, err := os.Stat(filepath.Join(absDir, "go.mod"))
+ fi, err := fsys.Stat(filepath.Join(absDir, "go.mod"))
if err != nil {
if os.IsNotExist(err) {
keepDirs[absDir] = ""
- return
+ } else {
+ base.Errorf("go: %v", err)
}
- base.Errorf("go: %v", err)
+ return
}
if !fi.Mode().IsRegular() {
}
for _, useDir := range args {
if !*useR {
- lookDir(useDir)
+ if target, err := fsys.Stat(useDir); err == nil && !target.IsDir() {
+ base.Errorf(`go: argument "%s" is not a directory`, useDir)
+ } else {
+ lookDir(useDir)
+ }
continue
}
--- /dev/null
+cp go.work go.work.orig
+
+# If an argument to 'go work use' is a file it should be handled gracefully as
+# an error and go.work should not be modified
+! go work use foo.txt
+stderr '^go: argument "foo\.txt" is not a directory$'
+cmp go.work go.work.orig
+
+
+-- go.work --
+go 1.18
+-- foo.txt --