@@ -12,7 +12,6 @@ import (
12
12
"cmd/go/internal/modload"
13
13
"cmd/go/internal/str"
14
14
"context"
15
- "errors"
16
15
"fmt"
17
16
"io/fs"
18
17
"os"
@@ -109,17 +108,33 @@ func runUse(ctx context.Context, cmd *base.Command, args []string) {
109
108
base .Fatalf ("go: 'go work use' requires one or more directory arguments" )
110
109
}
111
110
for _ , useDir := range args {
112
- if ! * useR {
113
- if target , err := fsys .Stat (useDir ); err == nil && ! target .IsDir () {
114
- base .Errorf (`go: argument "%s" is not a directory` , useDir )
111
+ absArg , _ := pathRel (workDir , useDir )
112
+
113
+ info , err := fsys .Stat (absArg )
114
+ if err != nil {
115
+ // Errors raised from os.Stat are formatted to be more user-friendly.
116
+ if os .IsNotExist (err ) {
117
+ base .Errorf ("go: directory %v does not exist" , absArg )
115
118
} else {
116
- lookDir ( useDir )
119
+ base . Errorf ( "go: %v" , err )
117
120
}
118
121
continue
122
+ } else if ! info .IsDir () {
123
+ base .Errorf ("go: %s is not a directory" , absArg )
124
+ continue
125
+ }
126
+
127
+ if ! * useR {
128
+ lookDir (useDir )
129
+ continue
119
130
}
120
131
121
132
// Add or remove entries for any subdirectories that still exist.
122
- err := fsys .Walk (useDir , func (path string , info fs.FileInfo , err error ) error {
133
+ fsys .Walk (useDir , func (path string , info fs.FileInfo , err error ) error {
134
+ if err != nil {
135
+ return err
136
+ }
137
+
123
138
if ! info .IsDir () {
124
139
if info .Mode ()& fs .ModeSymlink != 0 {
125
140
if target , err := fsys .Stat (path ); err == nil && target .IsDir () {
@@ -131,13 +146,9 @@ func runUse(ctx context.Context, cmd *base.Command, args []string) {
131
146
lookDir (path )
132
147
return nil
133
148
})
134
- if err != nil && ! errors .Is (err , os .ErrNotExist ) {
135
- base .Errorf ("go: %v" , err )
136
- }
137
149
138
150
// Remove entries for subdirectories that no longer exist.
139
151
// Because they don't exist, they will be skipped by Walk.
140
- absArg , _ := pathRel (workDir , useDir )
141
152
for absDir , _ := range haveDirs {
142
153
if str .HasFilePathPrefix (absDir , absArg ) {
143
154
if _ , ok := keepDirs [absDir ]; ! ok {
0 commit comments