From c6aba53e516a945c72f6fb5ce3bf285a7513d692 Mon Sep 17 00:00:00 2001 From: Adrian Macneil Date: Fri, 27 Nov 2015 14:27:44 -0800 Subject: [PATCH] Add errcheck and fix unchecked errors --- Dockerfile | 3 ++- Makefile | 1 + commands.go | 18 ++++++++++++++---- commands_test.go | 3 ++- driver/postgres/postgres.go | 15 +++++++++++---- driver/postgres/postgres_test.go | 11 +++++++++-- main.go | 2 +- 7 files changed, 40 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index dde4c2c..7620c14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,9 +4,10 @@ ENV GOPATH /go ENV PATH /go/bin:$PATH # install build dependencies -RUN apk add -U --no-progress go git ca-certificates +RUN apk add -U --no-progress alpine-sdk go RUN go get \ github.com/golang/lint/golint \ + github.com/kisielk/errcheck \ golang.org/x/tools/cmd/vet # copy source files diff --git a/Makefile b/Makefile index 3a97880..ed1bfd6 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ build: lint: $(DOCKER) golint ./... $(DOCKER) go vet ./... + $(DOCKER) errcheck ./... test: $(DOCKER) go test ./... diff --git a/commands.go b/commands.go index 223e89f..7ee9c82 100644 --- a/commands.go +++ b/commands.go @@ -6,6 +6,7 @@ import ( "github.com/adrianmacneil/dbmate/driver" "github.com/adrianmacneil/dbmate/driver/shared" "github.com/codegangsta/cli" + "io" "io/ioutil" "net/url" "os" @@ -72,6 +73,12 @@ func DropCommand(ctx *cli.Context) error { const migrationTemplate = "-- migrate:up\n\n\n-- migrate:down\n\n" +func mustClose(c io.Closer) { + if err := c.Close(); err != nil { + panic(err) + } +} + // NewCommand creates a new migration file func NewCommand(ctx *cli.Context) error { // new migration name @@ -102,7 +109,7 @@ func NewCommand(ctx *cli.Context) error { return err } - defer file.Close() + defer mustClose(file) _, err = file.WriteString(migrationTemplate) if err != nil { return err @@ -126,7 +133,10 @@ func doTransaction(db *sql.DB, txFunc func(shared.Transaction) error) error { } if err := txFunc(tx); err != nil { - tx.Rollback() + if err1 := tx.Rollback(); err1 != nil { + return err1 + } + return err } @@ -170,7 +180,7 @@ func MigrateCommand(ctx *cli.Context) error { drv, db, err := openDatabaseForMigration(ctx) if db != nil { - defer db.Close() + defer mustClose(db) } if err != nil { return err @@ -323,7 +333,7 @@ func parseMigration(path string) (map[string]string, error) { func RollbackCommand(ctx *cli.Context) error { drv, db, err := openDatabaseForMigration(ctx) if db != nil { - defer db.Close() + defer mustClose(db) } if err != nil { return err diff --git a/commands_test.go b/commands_test.go index 65ddd85..9874326 100644 --- a/commands_test.go +++ b/commands_test.go @@ -20,7 +20,8 @@ func newContext() *cli.Context { } func TestGetDatabaseUrl_Default(t *testing.T) { - os.Setenv("DATABASE_URL", "postgres://example.org/db") + err := os.Setenv("DATABASE_URL", "postgres://example.org/db") + require.Nil(t, err) ctx := newContext() u, err := main.GetDatabaseURL(ctx) diff --git a/driver/postgres/postgres.go b/driver/postgres/postgres.go index 947b2dc..077552b 100644 --- a/driver/postgres/postgres.go +++ b/driver/postgres/postgres.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/adrianmacneil/dbmate/driver/shared" pq "github.com/lib/pq" + "io" "net/url" ) @@ -26,6 +27,12 @@ func (postgres Driver) openPostgresDB(u *url.URL) (*sql.DB, error) { return postgres.Open(&postgresURL) } +func mustClose(c io.Closer) { + if err := c.Close(); err != nil { + panic(err) + } +} + // CreateDatabase creates the specified database func (postgres Driver) CreateDatabase(u *url.URL) error { name := shared.DatabaseName(u) @@ -35,7 +42,7 @@ func (postgres Driver) CreateDatabase(u *url.URL) error { if err != nil { return err } - defer db.Close() + defer mustClose(db) _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", pq.QuoteIdentifier(name))) @@ -52,7 +59,7 @@ func (postgres Driver) DropDatabase(u *url.URL) error { if err != nil { return err } - defer db.Close() + defer mustClose(db) _, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", pq.QuoteIdentifier(name))) @@ -68,7 +75,7 @@ func (postgres Driver) DatabaseExists(u *url.URL) (bool, error) { if err != nil { return false, err } - defer db.Close() + defer mustClose(db) exists := false err = db.QueryRow("SELECT true FROM pg_database WHERE datname = $1", name). @@ -105,7 +112,7 @@ func (postgres Driver) SelectMigrations(db *sql.DB, limit int) (map[string]struc return nil, err } - defer rows.Close() + defer mustClose(rows) migrations := map[string]struct{}{} for rows.Next() { diff --git a/driver/postgres/postgres_test.go b/driver/postgres/postgres_test.go index 55cb5c2..2b299f2 100644 --- a/driver/postgres/postgres_test.go +++ b/driver/postgres/postgres_test.go @@ -4,6 +4,7 @@ import ( "database/sql" "github.com/adrianmacneil/dbmate/driver/postgres" "github.com/stretchr/testify/require" + "io" "net/url" "os" "testing" @@ -24,6 +25,12 @@ func testURL(t *testing.T) *url.URL { return u } +func mustClose(c io.Closer) { + if err := c.Close(); err != nil { + panic(err) + } +} + func TestCreateDropDatabase(t *testing.T) { d := postgres.Driver{} u := testURL(t) @@ -40,7 +47,7 @@ func TestCreateDropDatabase(t *testing.T) { func() { db, err := sql.Open("postgres", u.String()) require.Nil(t, err) - defer db.Close() + defer mustClose(db) err = db.Ping() require.Nil(t, err) @@ -54,7 +61,7 @@ func TestCreateDropDatabase(t *testing.T) { func() { db, err := sql.Open("postgres", u.String()) require.Nil(t, err) - defer db.Close() + defer mustClose(db) err = db.Ping() require.NotNil(t, err) diff --git a/main.go b/main.go index 668fb62..2f90321 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,7 @@ func main() { loadDotEnv() app := NewApp() - app.Run(os.Args) + app.RunAndExitOnError() } // NewApp creates a new command line app