cmd/bent, benchmarks/copy: replace rsync exec's with sweet's copyDir
Turns out "cp -a" is not the same as rsync (if the target
already exists, is identical, but not writeable). This was
a problem for gomotes, and adding rsync to the gomote bundle
is a big hammer actually, so, do this instead.
This probably helps on Windows. Definitely won't hurt.
Change-Id: Iab9be3460cd79be7358f91341b7fb4b2e1b56645
Reviewed-on: https://go-review.googlesource.com/c/benchmarks/+/617555
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
diff --git a/cmd/bent/bent.go b/cmd/bent/bent.go
index 78f8277..69b80af 100644
--- a/cmd/bent/bent.go
+++ b/cmd/bent/bent.go
@@ -23,6 +23,8 @@
"strings"
"time"
+ "golang.org/x/benchmarks/sweet/common/fileutil"
+
"github.com/BurntSushi/toml"
)
@@ -78,7 +80,6 @@
var wikiTable = false // emit the tests in a form usable in a wiki table
var explicitAll counterFlag // Include "-a" on "go test -c" test build ; repeating flag causes multiple rebuilds, useful for build benchmarking.
var shuffle = 2 // Dimensionality of (build) shuffling; 0 = none, 1 = per-benchmark, configuration ordering, 2 = bench, config pairs, 3 = across repetitions.
-var haveRsync = true
var reportBuildTime = true
var experiment = false // Don't reset go.mod, for testing purposes
var minGoVersion = "1.22" // This is the release the toolchain started caring about versions of Go that are too new.
@@ -234,12 +235,6 @@
os.Exit(1)
}
- _, errRsync := exec.LookPath("rsync")
- if errRsync != nil {
- haveRsync = false
- fmt.Println("Warning: using cp instead of rsync")
- }
-
if requireSandbox {
_, errDocker := exec.LookPath("docker")
if errDocker != nil {
@@ -680,23 +675,9 @@
todo.Configurations[ci] = config
docopy := func(from, to string) {
- mkdir := exec.Command("mkdir", "-p", to)
- s, _ := config.runBinary("", mkdir, false)
- if s != "" {
- fmt.Println("Error creating directory, ", to)
- config.Disabled = true
- }
-
- var cp *exec.Cmd
- if haveRsync {
- cp = exec.Command("rsync", "-a", from+"/", to)
- } else {
- cp = exec.Command("cp", "-a", from+"/.", to)
- }
- s, _ = config.runBinary("", cp, false)
- if s != "" {
- fmt.Println("Error copying directory tree, ", from, to)
- // Not disabling because gollvm uses a different directory structure
+ fileutil.CopyDir(to, from, nil)
+ if verbose > 0 || err != nil {
+ fmt.Printf("rsync -a %s %s, error=%v\n", from, to, err)
}
}
@@ -926,23 +907,29 @@
testdata := path.Join(rundir, subdir)
if stat, err := os.Stat(testdata); err == nil {
testdataCopy := path.Join(bench.RunDir, subdir)
- var cp *exec.Cmd
+ var err error
+ var commandLine string
os.RemoveAll(testdataCopy) // clean out what can be cleaned
if stat.IsDir() {
if verbose > 0 {
fmt.Printf("mkdir -p %s\n", testdataCopy)
}
os.Mkdir(testdataCopy, fs.FileMode(0755))
- cp = copyCommand(testdata, testdataCopy)
+ err = fileutil.CopyDir(testdataCopy, testdata, nil)
+ if verbose > 0 || err != nil {
+ commandLine = fmt.Sprintf("rsync -a %s/ %s", testdata, testdataCopy)
+ }
} else {
- cp = copyFile(testdata, testdataCopy)
+ err = fileutil.CopyFile(testdataCopy, testdata, nil, nil)
+ if verbose > 0 || err != nil {
+ commandLine = fmt.Sprintf("cp -p %s %s", testdata, testdataCopy)
+ }
}
if verbose > 0 {
- fmt.Println(asCommandLine(dirs.wd, cp))
+ fmt.Println(commandLine)
}
- _, err := cp.Output()
if err != nil {
- s := fmt.Sprintf(`could not %s, err=%v`, asCommandLine(dirs.wd, cp), err)
+ s := fmt.Sprintf(`could not %s, err=%v`, commandLine, err)
fmt.Println(s + "\nDISABLING benchmark " + bench.Name)
getAndBuildFailures = append(getAndBuildFailures, s+"("+bench.Name+")\n")
todo.Benchmarks[i].Disabled = true
@@ -1294,18 +1281,6 @@
return nil
}
-func copyCommand(from, to string) *exec.Cmd {
- if haveRsync {
- return exec.Command("rsync", "-a", from+"/", to)
- } else {
- return exec.Command("cp", "-a", from+"/.", to)
- }
-}
-
-func copyFile(from, to string) *exec.Cmd {
- return exec.Command("cp", "-p", from, to)
-}
-
func copyAsset(fs embed.FS, dir, file string) {
f, err := fs.Open(path.Join(dir, file))
if err != nil {