mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-04-22 03:34:12 +00:00
This allows the same SHA to have different builds on different branches, each separately viewable. This is useful for expressing a "pipeline" in terms of branches, e.g. a commit starts on branch A and progress through B and C to master, with the build script switching on branch name. Previously viewing each build would arbitrarily choose which branch's commit to show.
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/drone/drone/pkg/channel"
|
|
"github.com/drone/drone/pkg/database"
|
|
. "github.com/drone/drone/pkg/model"
|
|
)
|
|
|
|
// Display a specific Commit.
|
|
func CommitShow(w http.ResponseWriter, r *http.Request, u *User, repo *Repo) error {
|
|
branch := r.FormValue(":branch")
|
|
hash := r.FormValue(":commit")
|
|
labl := r.FormValue(":label")
|
|
|
|
// get the commit from the database
|
|
commit, err := database.GetCommitBranchHash(branch, hash, repo.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// get the builds from the database. a commit can have
|
|
// multiple sub-builds (or matrix builds)
|
|
builds, err := database.ListBuilds(commit.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data := struct {
|
|
User *User
|
|
Repo *Repo
|
|
Commit *Commit
|
|
Build *Build
|
|
Builds []*Build
|
|
Token string
|
|
}{u, repo, commit, builds[0], builds, ""}
|
|
|
|
// get the specific build requested by the user. instead
|
|
// of a database round trip, we can just loop through the
|
|
// list and extract the requested build.
|
|
for _, b := range builds {
|
|
if b.Slug == labl {
|
|
data.Build = b
|
|
break
|
|
}
|
|
}
|
|
|
|
// generate a token to connect with the websocket
|
|
// handler and stream output, if the build is running.
|
|
data.Token = channel.Token(fmt.Sprintf(
|
|
"%s/%s/%s/commit/%s/%s/builds/%s", repo.Host, repo.Owner, repo.Name, commit.Branch, commit.Hash, builds[0].Slug))
|
|
|
|
// render the repository template.
|
|
return RenderTemplate(w, "repo_commit.html", &data)
|
|
}
|