Chromium Code Reviews| Index: milo/buildsource/buildbot/build.go |
| diff --git a/milo/buildsource/buildbot/build.go b/milo/buildsource/buildbot/build.go |
| index 6d5bb8e5eaff82d08f6c4f3b672af498790f12b1..726c2db8d65259b292ed8419494c0852a241e886 100644 |
| --- a/milo/buildsource/buildbot/build.go |
| +++ b/milo/buildsource/buildbot/build.go |
| @@ -16,7 +16,6 @@ package buildbot |
| import ( |
| "encoding/json" |
| - "errors" |
| "fmt" |
| "io/ioutil" |
| "math" |
| @@ -31,13 +30,13 @@ import ( |
| "github.com/luci/gae/service/datastore" |
| "github.com/luci/luci-go/common/data/stringset" |
| + "github.com/luci/luci-go/common/errors" |
| "github.com/luci/luci-go/common/logging" |
| "github.com/luci/luci-go/milo/api/resp" |
| + "github.com/luci/luci-go/milo/common" |
| "github.com/luci/luci-go/milo/common/model" |
| ) |
| -var errBuildNotFound = errors.New("Build not found") |
| - |
| // getBuild fetches a buildbot build from the datastore and checks ACLs. |
| // The return code matches the master responses. |
| func getBuild(c context.Context, master, builder string, buildNum int) (*buildbotBuild, error) { |
| @@ -53,7 +52,7 @@ func getBuild(c context.Context, master, builder string, buildNum int) (*buildbo |
| err := datastore.Get(c, result) |
| if err == datastore.ErrNoSuchEntity { |
| - err = errBuildNotFound |
| + err = errors.New("build not found", common.CodeNotFound) |
| } |
| return result, err |
| @@ -672,3 +671,45 @@ func promoteLogDogLinks(s *buildbotStep, isInitialStep bool, linkMap map[string] |
| } |
| s.Aliases = newAliases |
| } |
| + |
| +// BuildID is buildbots's notion of a Build. See buildsource.ID. |
|
Ryan Tseng
2017/07/13 22:00:46
Make a note of why there is an error in here. (Bec
iannucci
2017/07/14 19:00:22
Done.
|
| +type BuildID struct { |
| + Master string |
| + BuilderName string |
| + BuildNumber int |
| + |
| + err error |
| +} |
| + |
| +// GetLog implements buildsource.ID. |
| +func (b *BuildID) GetLog(context.Context, string) (string, bool, error) { panic("not implemented") } |
| + |
| +// Get implements buildsource.ID. |
| +func (b *BuildID) Get(ctx context.Context) (*resp.MiloBuild, error) { |
| + if b.err != nil { |
| + return nil, b.err |
| + } |
| + if b.Master == "" { |
| + return nil, errors.New("Master name is required", common.CodeParameterError) |
| + } |
| + if b.BuilderName == "" { |
| + return nil, errors.New("BuilderName name is required", common.CodeParameterError) |
| + } |
| + if b.BuildNumber <= 0 { |
| + return nil, errors.New("BuildNumber must be > 0", common.CodeParameterError) |
| + } |
| + |
| + return Build(ctx, b.Master, b.BuilderName, b.BuildNumber) |
| +} |
| + |
| +// NewBuildID generates a new BuildID. |
| +func NewBuildID(master, builder, build string) *BuildID { |
| + num, err := strconv.ParseInt(build, 10, 0) |
| + if err != nil { |
| + return &BuildID{err: errors. |
| + Annotate(err, "BuildNumber is not a number"). |
| + Tag(common.CodeParameterError). |
| + Err()} |
| + } |
| + return &BuildID{master, builder, int(num), nil} |
| +} |