Skip to content

Commit 7f8dd56

Browse files
authored
Merge pull request #5 from WillAbides/cleaner
better tests and cleanup
2 parents 99abcec + 4391e85 commit 7f8dd56

36 files changed

+1853
-124
lines changed

cmd/benchdiff/internal/benchdiff.go

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,6 @@ func fileExists(path string) bool {
4646
return true
4747
}
4848

49-
func (c *Benchdiff) gitRunner() *gitRunner {
50-
return &gitRunner{
51-
gitExecutable: c.GitCmd,
52-
repoPath: c.Path,
53-
}
54-
}
55-
56-
func (c *Benchdiff) baseRefRunner() *refRunner {
57-
gr := c.gitRunner()
58-
return &refRunner{
59-
ref: c.BaseRef,
60-
gitRunner: *gr,
61-
}
62-
}
63-
6449
func (c *Benchdiff) cacheKey() string {
6550
var b []byte
6651
b = append(b, []byte(c.BenchCmd)...)
@@ -70,6 +55,11 @@ func (c *Benchdiff) cacheKey() string {
7055
}
7156

7257
func (c *Benchdiff) runBenchmarks() (result *runBenchmarksResults, err error) {
58+
gitCmd := c.GitCmd
59+
if gitCmd == "" {
60+
gitCmd = "git"
61+
}
62+
7363
result = new(runBenchmarksResults)
7464
worktreeFilename := filepath.Join(c.ResultsDir, "benchdiff-worktree.out")
7565
worktreeFile, err := os.Create(worktreeFilename)
@@ -91,19 +81,21 @@ func (c *Benchdiff) runBenchmarks() (result *runBenchmarksResults, err error) {
9181
return nil, err
9282
}
9383

94-
headSHA, err := c.gitRunner().getRefSha("HEAD")
84+
headSHA, err := runGitCmd(gitCmd, c.Path, "rev-parse", "HEAD")
9585
if err != nil {
9686
return nil, err
9787
}
98-
baseSHA, err := c.gitRunner().getRefSha(c.BaseRef)
88+
result.headSHA = strings.TrimSpace(string(headSHA))
89+
90+
baseSHA, err := runGitCmd(gitCmd, c.Path, "rev-parse", c.BaseRef)
9991
if err != nil {
10092
return nil, err
10193
}
94+
result.baseSHA = strings.TrimSpace(string(baseSHA))
10295

10396
baseFilename := fmt.Sprintf("benchdiff-%s-%s.out", baseSHA, c.cacheKey())
10497
baseFilename = filepath.Join(c.ResultsDir, baseFilename)
105-
result.headSHA = headSHA
106-
result.baseSHA = baseSHA
98+
10799
result.baseOutputFile = baseFilename
108100
result.worktreeOutputFile = worktreeFilename
109101

@@ -126,7 +118,7 @@ func (c *Benchdiff) runBenchmarks() (result *runBenchmarksResults, err error) {
126118
baseCmd.Stdout = baseFile
127119
var baseCmdErr error
128120

129-
err = c.baseRefRunner().run(func() {
121+
err = runAtGitRef(gitCmd, c.Path, c.BaseRef, func() {
130122
baseCmdErr = baseCmd.Run()
131123
})
132124
if err != nil {

cmd/benchdiff/internal/benchdiff_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,12 @@ func testInDir(t *testing.T, dir string) {
4040
})
4141
}
4242

43-
func TestBenchstat_Run(t *testing.T) {
43+
func TestBenchdiff_Run(t *testing.T) {
4444
dir := tmpDir(t)
4545
setupTestRepo(t, dir)
4646
testInDir(t, dir)
4747
differ := Benchdiff{
48+
GitCmd: "git",
4849
BenchCmd: "go",
4950
BenchArgs: "test -bench . -benchmem -count 10 -benchtime 10x .",
5051
ResultsDir: "./tmp",

cmd/benchdiff/internal/gitrunner.go

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,10 @@ import (
77
"path/filepath"
88
)
99

10-
type gitRunner struct {
11-
repoPath string
12-
gitExecutable string
13-
}
14-
15-
func (r *gitRunner) getRefSha(ref string) (string, error) {
16-
b, err := r.run("rev-parse", ref)
17-
if err != nil {
18-
return "", err
19-
}
20-
b = bytes.TrimSpace(b)
21-
return string(b), nil
22-
}
23-
24-
func (r *gitRunner) run(args ...string) ([]byte, error) {
25-
executable := "git"
26-
if r.gitExecutable != "" {
27-
executable = r.gitExecutable
28-
}
29-
cmd := exec.Command(executable, args...) //nolint:gosec // this is fine
10+
func runGitCmd(gitCmd, repoPath string, args ...string) ([]byte, error) {
11+
cmd := exec.Command(gitCmd, args...) //nolint:gosec // this is fine
3012
var err error
31-
cmd.Dir, err = filepath.Abs(r.repoPath)
13+
cmd.Dir, err = filepath.Abs(repoPath)
3214
if err != nil {
3315
return nil, err
3416
}
@@ -37,43 +19,39 @@ func (r *gitRunner) run(args ...string) ([]byte, error) {
3719
if exitErr, ok := err.(*exec.ExitError); ok {
3820
err = fmt.Errorf("error running git command: %s", string(exitErr.Stderr))
3921
}
22+
b = bytes.TrimSpace(b)
4023
return b, err
4124
}
4225

43-
type refRunner struct {
44-
gitRunner gitRunner
45-
ref string
46-
}
47-
48-
func (r *refRunner) stashAndReset() (revert func() error, err error) {
26+
func stashAndReset(gitCmd, repoPath string) (revert func() error, err error) {
4927
revert = func() error {
5028
return nil
5129
}
52-
stash, err := r.gitRunner.run("stash", "create", "--quiet")
30+
stash, err := runGitCmd(gitCmd, repoPath, "stash", "create", "--quiet")
5331
if err != nil {
5432
return nil, err
5533
}
5634
stash = bytes.TrimSpace(stash)
5735
if len(stash) > 0 {
5836
revert = func() error {
59-
_, revertErr := r.gitRunner.run("stash", "apply", "--quiet", string(stash))
37+
_, revertErr := runGitCmd(gitCmd, repoPath, "stash", "apply", "--quiet", string(stash))
6038
return revertErr
6139
}
6240
}
63-
_, err = r.gitRunner.run("reset", "--hard", "--quiet")
41+
_, err = runGitCmd(gitCmd, repoPath, "reset", "--hard", "--quiet")
6442
if err != nil {
6543
return nil, err
6644
}
6745
return revert, nil
6846
}
6947

70-
func (r *refRunner) run(fn func()) error {
71-
origRef, err := r.gitRunner.run("rev-parse", "--abbrev-ref", "HEAD")
48+
func runAtGitRef(gitCmd, repoPath, ref string, fn func()) error {
49+
origRef, err := runGitCmd(gitCmd, repoPath, "rev-parse", "--abbrev-ref", "HEAD")
7250
if err != nil {
7351
return err
7452
}
7553
origRef = bytes.TrimSpace(origRef)
76-
unstash, err := r.stashAndReset()
54+
unstash, err := stashAndReset(gitCmd, repoPath)
7755
if err != nil {
7856
return err
7957
}
@@ -83,12 +61,12 @@ func (r *refRunner) run(fn func()) error {
8361
panic(unstashErr)
8462
}
8563
}()
86-
_, err = r.gitRunner.run("checkout", "--quiet", r.ref)
64+
_, err = runGitCmd(gitCmd, repoPath, "checkout", "--quiet", ref)
8765
if err != nil {
8866
return err
8967
}
9068
defer func() {
91-
_, cerr := r.gitRunner.run("checkout", "--quiet", string(origRef))
69+
_, cerr := runGitCmd(gitCmd, repoPath, "checkout", "--quiet", string(origRef))
9270
if cerr != nil {
9371
if exitErr, ok := cerr.(*exec.ExitError); ok {
9472
fmt.Println(string(exitErr.Stderr))

cmd/benchdiff/internal/gitrunner_test.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/stretchr/testify/require"
99
)
1010

11-
func Test_refRunner_run(t *testing.T) {
11+
func Test_runAtGitRef(t *testing.T) {
1212
dir := tmpDir(t)
1313
fooPath := filepath.Join(dir, "foo")
1414
err := ioutil.WriteFile(fooPath, []byte("OG content"), 0o600)
@@ -30,13 +30,7 @@ func Test_refRunner_run(t *testing.T) {
3030
require.NoError(t, err)
3131
require.Equal(t, "OG content", string(got))
3232
}
33-
runner := &refRunner{
34-
ref: "HEAD",
35-
gitRunner: gitRunner{
36-
repoPath: dir,
37-
},
38-
}
39-
err = runner.run(fn)
33+
err = runAtGitRef("git", dir, "HEAD", fn)
4034
require.NoError(t, err)
4135
got, err := ioutil.ReadFile(fooPath)
4236
require.NoError(t, err)

cmd/benchdiff/internal/testutil_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,22 @@ func tmpDir(t *testing.T) string {
2929
return tmpdir
3030
}
3131

32-
func mustSetEnv(t *testing.T, key, value string) {
32+
func mustSetEnv(t *testing.T, env map[string]string) {
3333
t.Helper()
34-
assert.NoError(t, os.Setenv(key, value))
34+
for k, v := range env {
35+
assert.NoError(t, os.Setenv(k, v))
36+
}
3537
}
3638

3739
func mustGit(t *testing.T, repoPath string, args ...string) []byte {
3840
t.Helper()
39-
mustSetEnv(t, "GIT_AUTHOR_NAME", "author")
40-
mustSetEnv(t, "GIT_AUTHOR_EMAIL", "author@localhost")
41-
mustSetEnv(t, "GIT_COMMITTER_NAME", "committer")
42-
mustSetEnv(t, "GIT_COMMITTER_EMAIL", "committer@localhost")
43-
runner := &gitRunner{
44-
repoPath: repoPath,
45-
}
46-
got, err := runner.run(args...)
41+
mustSetEnv(t, map[string]string{
42+
"GIT_AUTHOR_NAME": "author",
43+
"GIT_AUTHOR_EMAIL": "author@localhost",
44+
"GIT_COMMITTER_NAME": "committer",
45+
"GIT_COMMITTER_EMAIL": "committer@localhost",
46+
})
47+
got, err := runGitCmd("git", repoPath, args...)
4748
assert.NoErrorf(t, err, "error running git:\noutput: %v", string(got))
4849
return got
4950
}

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAG
3333
golang.org/x/perf v0.0.0-20201207232921-bdcc6220ee90 h1:P+M61+mQKVHzooHFlNUTNBfj+TqHiQOGgx2kKL7mHbA=
3434
golang.org/x/perf v0.0.0-20201207232921-bdcc6220ee90/go.mod h1:KRSrLY7jerMEa0Ih7gBheQ3FYDiSx6liMnniX1o3j2g=
3535
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
36+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
3637
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
3738
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
3839
google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=

pkg/benchstatter/benchstat.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,12 @@ func HTMLFormatter(opts *HTMLFormatterOptions) OutputFormatter {
147147
}
148148
var buf bytes.Buffer
149149
benchstat.FormatHTML(&buf, tables)
150+
_, err := w.Write(buf.Bytes())
151+
if err != nil {
152+
return err
153+
}
150154
if footer != "" {
151-
_, err := w.Write([]byte(footer))
155+
_, err = w.Write([]byte(footer))
152156
if err != nil {
153157
return err
154158
}

0 commit comments

Comments
 (0)