From ab3df4bd652d09406330ecf0498b789482189df2 Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Fri, 10 Apr 2015 23:11:41 -0700 Subject: [PATCH] added some initial code for build list. will revisit. --- datastore/bolt/build.go | 30 ++++++++++++++++++++++++++---- datastore/bolt/build_test.go | 10 ++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/datastore/bolt/build.go b/datastore/bolt/build.go index 3339b7a69..7f002be7a 100644 --- a/datastore/bolt/build.go +++ b/datastore/bolt/build.go @@ -26,10 +26,32 @@ func (db *DB) GetBuild(repo string, build int) (*common.Build, error) { // GetBuildList gets a list of recent builds for the // named repository. func (db *DB) GetBuildList(repo string) ([]*common.Build, error) { - // get the last build sequence number (stored in key in `bucketBuildSeq`) - // get all builds where build number > sequent-20 - // github.com/foo/bar/{number} - return nil, nil + // TODO (bradrydzewski) we can do this more efficiently + var builds []*common.Build + build, err := db.GetBuildLast(repo) + if err == ErrKeyNotFound { + return builds, nil + } else if err != nil { + return nil, err + } + + err = db.View(func(t *bolt.Tx) error { + pos := build.Number - 25 + if pos < 1 { + pos = 1 + } + for i := pos; i <= build.Number; i++ { + key := []byte(repo + "/" + strconv.Itoa(i)) + build := &common.Build{} + err = get(t, bucketBuild, key, build) + if err != nil { + return err + } + builds = append(builds, build) + } + return nil + }) + return builds, err } // GetBuildLast gets the last executed build for the diff --git a/datastore/bolt/build_test.go b/datastore/bolt/build_test.go index 2c53d6939..89020df5a 100644 --- a/datastore/bolt/build_test.go +++ b/datastore/bolt/build_test.go @@ -52,5 +52,15 @@ func TestBuild(t *testing.T) { g.Assert(build.State).Equal("pending") g.Assert(build.Number).Equal(3) }) + + g.It("Should get the recent list of builds", func() { + db.InsertBuild(repo, &common.Build{State: "success"}) + db.InsertBuild(repo, &common.Build{State: "success"}) + db.InsertBuild(repo, &common.Build{State: "pending"}) + + builds, err := db.GetBuildList(repo) + g.Assert(err).Equal(nil) + g.Assert(len(builds)).Equal(3) + }) }) }