Skip to content

Commit 0bcf77f

Browse files
committed
testscript,goproxytest: use filepath.WalkDir
This can easily save hundreds of stat calls per test script, particularly when testing Go tools. While here, remove a few uses of the deprecated io/ioutil in cmd, and check some missed errors in txtar-c.
1 parent 32ae337 commit 0bcf77f

File tree

6 files changed

+36
-31
lines changed

6 files changed

+36
-31
lines changed

cmd/txtar-addmod/addmod.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"bytes"
2222
"flag"
2323
"fmt"
24-
"io/ioutil"
2524
"log"
2625
"os"
2726
"os/exec"
@@ -82,7 +81,7 @@ func main1() int {
8281
log.SetFlags(0)
8382

8483
var err error
85-
tmpdir, err = ioutil.TempDir("", "txtar-addmod-")
84+
tmpdir, err = os.MkdirTemp("", "txtar-addmod-")
8685
if err != nil {
8786
log.Fatal(err)
8887
}
@@ -106,7 +105,7 @@ func main1() int {
106105

107106
exitCode := 0
108107
for _, arg := range modules {
109-
if err := ioutil.WriteFile(filepath.Join(tmpdir, "go.mod"), []byte("module m\n"), 0o666); err != nil {
108+
if err := os.WriteFile(filepath.Join(tmpdir, "go.mod"), []byte("module m\n"), 0o666); err != nil {
110109
fatalf("%v", err)
111110
}
112111
run(goCmd, "get", "-d", arg)
@@ -130,13 +129,13 @@ func main1() int {
130129
}
131130
path = encpath
132131

133-
mod, err := ioutil.ReadFile(filepath.Join(gopath, "pkg/mod/cache/download", path, "@v", vers+".mod"))
132+
mod, err := os.ReadFile(filepath.Join(gopath, "pkg/mod/cache/download", path, "@v", vers+".mod"))
134133
if err != nil {
135134
log.Printf("%s: %v", arg, err)
136135
exitCode = 1
137136
continue
138137
}
139-
info, err := ioutil.ReadFile(filepath.Join(gopath, "pkg/mod/cache/download", path, "@v", vers+".info"))
138+
info, err := os.ReadFile(filepath.Join(gopath, "pkg/mod/cache/download", path, "@v", vers+".info"))
140139
if err != nil {
141140
log.Printf("%s: %v", arg, err)
142141
exitCode = 1
@@ -149,7 +148,7 @@ func main1() int {
149148
title += "@" + vers
150149
}
151150
dir = filepath.Clean(dir)
152-
modDir := strings.Replace(path, "/", "_", -1) + "_" + vers
151+
modDir := strings.ReplaceAll(path, "/", "_") + "_" + vers
153152
filePrefix := ""
154153
if targetDir == "-" {
155154
filePrefix = ".gomodproxy/" + modDir + "/"
@@ -162,6 +161,9 @@ func main1() int {
162161
{Name: filePrefix + ".info", Data: info},
163162
}
164163
err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
164+
if err != nil {
165+
return err
166+
}
165167
if !info.Mode().IsRegular() {
166168
return nil
167169
}
@@ -177,7 +179,7 @@ func main1() int {
177179
// not including all files via -all
178180
return nil
179181
}
180-
data, err := ioutil.ReadFile(path)
182+
data, err := os.ReadFile(path)
181183
if err != nil {
182184
return err
183185
}
@@ -201,7 +203,7 @@ func main1() int {
201203
break
202204
}
203205
} else {
204-
if err := ioutil.WriteFile(filepath.Join(targetDir, modDir+".txtar"), data, 0o666); err != nil {
206+
if err := os.WriteFile(filepath.Join(targetDir, modDir+".txtar"), data, 0o666); err != nil {
205207
log.Printf("%s: %v", arg, err)
206208
exitCode = 1
207209
continue

cmd/txtar-c/savedir.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"bytes"
1717
stdflag "flag"
1818
"fmt"
19-
"io/ioutil"
2019
"log"
2120
"os"
2221
"path/filepath"
@@ -59,7 +58,10 @@ func main1() int {
5958

6059
a := new(txtar.Archive)
6160
dir = filepath.Clean(dir)
62-
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
61+
if err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
62+
if err != nil {
63+
return err
64+
}
6365
if path == dir {
6466
return nil
6567
}
@@ -73,9 +75,9 @@ func main1() int {
7375
if !info.Mode().IsRegular() {
7476
return nil
7577
}
76-
data, err := ioutil.ReadFile(path)
78+
data, err := os.ReadFile(path)
7779
if err != nil {
78-
log.Fatal(err)
80+
return err
7981
}
8082
if !utf8.Valid(data) {
8183
log.Printf("%s: ignoring file with invalid UTF-8 data", path)
@@ -103,7 +105,9 @@ func main1() int {
103105
Data: data,
104106
})
105107
return nil
106-
})
108+
}); err != nil {
109+
log.Fatal(err)
110+
}
107111

108112
data := txtar.Format(a)
109113
os.Stdout.Write(data)

cmd/txtar-x/extract.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ package main
1515
import (
1616
"flag"
1717
"fmt"
18-
"io/ioutil"
18+
"io"
1919
"log"
2020
"os"
2121

@@ -47,7 +47,7 @@ func main1() int {
4747

4848
var a *txtar.Archive
4949
if flag.NArg() == 0 {
50-
data, err := ioutil.ReadAll(os.Stdin)
50+
data, err := io.ReadAll(os.Stdin)
5151
if err != nil {
5252
log.Printf("cannot read stdin: %v", err)
5353
return 1

cmd/txtar-x/extract_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package main
66

77
import (
88
"bytes"
9-
"io/ioutil"
109
"os"
1110
"testing"
1211

@@ -34,11 +33,11 @@ func unquote(ts *testscript.TestScript, neg bool, args []string) {
3433
}
3534
for _, arg := range args {
3635
file := ts.MkAbs(arg)
37-
data, err := ioutil.ReadFile(file)
36+
data, err := os.ReadFile(file)
3837
ts.Check(err)
3938
data = bytes.Replace(data, []byte("\n>"), []byte("\n"), -1)
4039
data = bytes.TrimPrefix(data, []byte(">"))
41-
err = ioutil.WriteFile(file, data, 0o666)
40+
err = os.WriteFile(file, data, 0o666)
4241
ts.Check(err)
4342
}
4443
}

goproxytest/proxy.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
"bytes"
2727
"encoding/json"
2828
"fmt"
29-
"io/ioutil"
29+
"io/fs"
3030
"log"
3131
"net"
3232
"net/http"
@@ -91,26 +91,26 @@ func (srv *Server) Close() {
9191
}
9292

9393
func (srv *Server) readModList() error {
94-
infos, err := ioutil.ReadDir(srv.dir)
94+
entries, err := os.ReadDir(srv.dir)
9595
if err != nil {
9696
return err
9797
}
98-
for _, info := range infos {
99-
name := info.Name()
98+
for _, entry := range entries {
99+
name := entry.Name()
100100
switch {
101101
case strings.HasSuffix(name, ".txt"):
102102
name = strings.TrimSuffix(name, ".txt")
103103
case strings.HasSuffix(name, ".txtar"):
104104
name = strings.TrimSuffix(name, ".txtar")
105-
case info.IsDir():
105+
case entry.IsDir():
106106
default:
107107
continue
108108
}
109109
i := strings.LastIndex(name, "_v")
110110
if i < 0 {
111111
continue
112112
}
113-
encPath := strings.Replace(name[:i], "_", "/", -1)
113+
encPath := strings.ReplaceAll(name[:i], "_", "/")
114114
path, err := module.UnescapePath(encPath)
115115
if err != nil {
116116
return fmt.Errorf("cannot decode module path in %q: %v", name, err)
@@ -286,7 +286,7 @@ func (srv *Server) readArchive(path, vers string) *txtar.Archive {
286286
return nil
287287
}
288288

289-
prefix := strings.Replace(enc, "/", "_", -1)
289+
prefix := strings.ReplaceAll(enc, "/", "_")
290290
name := filepath.Join(srv.dir, prefix+"_"+encVers)
291291
txtName := name + ".txt"
292292
txtarName := name + ".txtar"
@@ -300,18 +300,18 @@ func (srv *Server) readArchive(path, vers string) *txtar.Archive {
300300
// fall back to trying a directory
301301
a = new(txtar.Archive)
302302

303-
err = filepath.Walk(name, func(path string, info os.FileInfo, err error) error {
303+
err = filepath.WalkDir(name, func(path string, entry fs.DirEntry, err error) error {
304304
if err != nil {
305305
return err
306306
}
307-
if path == name && !info.IsDir() {
307+
if path == name && !entry.IsDir() {
308308
return fmt.Errorf("expected a directory root")
309309
}
310-
if info.IsDir() {
310+
if entry.IsDir() {
311311
return nil
312312
}
313313
arpath := filepath.ToSlash(strings.TrimPrefix(path, name+string(os.PathSeparator)))
314-
data, err := ioutil.ReadFile(path)
314+
data, err := os.ReadFile(path)
315315
if err != nil {
316316
return err
317317
}

testscript/testscript.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,11 +1265,11 @@ func (ts *TestScript) parse(line string) []string {
12651265
func removeAll(dir string) error {
12661266
// module cache has 0o444 directories;
12671267
// make them writable in order to remove content.
1268-
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
1268+
filepath.WalkDir(dir, func(path string, entry fs.DirEntry, err error) error {
12691269
if err != nil {
12701270
return nil // ignore errors walking in file system
12711271
}
1272-
if info.IsDir() {
1272+
if entry.IsDir() {
12731273
os.Chmod(path, 0o777)
12741274
}
12751275
return nil

0 commit comments

Comments
 (0)