diff --git a/pkg/database/commits.go b/pkg/database/commits.go
index 743f32d1..7a6d59b2 100644
--- a/pkg/database/commits.go
+++ b/pkg/database/commits.go
@@ -38,7 +38,7 @@ FROM commits
WHERE id = ?
`
-// SQL Queries to retrieve a Commit by name and repo id.
+// SQL Queries to retrieve a Commit by hash and repo id.
const commitFindHashStmt = `
SELECT id, repo_id, status, started, finished, duration,
hash, branch, pull_request, author, gravatar, timestamp, message, created, updated
@@ -47,6 +47,15 @@ WHERE hash = ? AND repo_id = ?
LIMIT 1
`
+// SQL Queries to retrieve a Commit by branch, hash, and repo id.
+const commitFindBranchHashStmt = `
+SELECT id, repo_id, status, started, finished, duration,
+hash, branch, pull_request, author, gravatar, timestamp, message, created, updated
+FROM commits
+WHERE branch = ? AND hash = ? AND repo_id = ?
+LIMIT 1
+`
+
// SQL Query to retrieve a list of recent commits by user.
const userCommitRecentStmt = `
SELECT r.slug, r.host, r.owner, r.name,
@@ -127,6 +136,13 @@ func GetCommitHash(hash string, repo int64) (*Commit, error) {
return &commit, err
}
+// Returns the Commit on the given branch with the given hash.
+func GetCommitBranchHash(branch string, hash string, repo int64) (*Commit, error) {
+ commit := Commit{}
+ err := meddler.QueryRow(db, &commit, commitFindBranchHashStmt, branch, hash, repo)
+ return &commit, err
+}
+
// Returns the most recent Commit for the given branch.
func GetBranch(repo int64, branch string) (*Commit, error) {
commit := Commit{}
diff --git a/pkg/database/testing/commits_test.go b/pkg/database/testing/commits_test.go
index 59c7f53c..b115a8da 100644
--- a/pkg/database/testing/commits_test.go
+++ b/pkg/database/testing/commits_test.go
@@ -44,6 +44,32 @@ func TestGetCommit(t *testing.T) {
}
}
+func TestGetCommitBranchHash(t *testing.T) {
+ Setup()
+ defer Teardown()
+
+ commit, err := database.GetCommitBranchHash("develop", "5f32ec7b08dfe3a097c1a5316de5b5069fb35ff9", 2)
+ if err != nil {
+ t.Error(err)
+ }
+
+ if commit.ID != 5 {
+ t.Errorf("Exepected ID %d, got %d", 5, commit.ID)
+ }
+
+ if commit.Branch != "develop" {
+ t.Errorf("Exepected Branch %s, got %s", "develop", commit.Branch)
+ }
+
+ if commit.Hash != "5f32ec7b08dfe3a097c1a5316de5b5069fb35ff9" {
+ t.Errorf("Exepected Hash %s, got %s", "5f32ec7b08dfe3a097c1a5316de5b5069fb35ff9", commit.Hash)
+ }
+
+ if commit.Status != "Success" {
+ t.Errorf("Exepected Status %s, got %s", "Success", commit.Status)
+ }
+}
+
func TestGetCommitHash(t *testing.T) {
Setup()
defer Teardown()
diff --git a/pkg/database/testing/testing.go b/pkg/database/testing/testing.go
index c252204c..27d6b6bf 100644
--- a/pkg/database/testing/testing.go
+++ b/pkg/database/testing/testing.go
@@ -179,12 +179,22 @@ func Setup() {
Gravatar: user1.Gravatar,
Message: "commit message",
}
+ commit5 := Commit{
+ RepoID: repo2.ID,
+ Status: "Success",
+ Hash: "5f32ec7b08dfe3a097c1a5316de5b5069fb35ff9",
+ Branch: "develop",
+ Author: user1.Email,
+ Gravatar: user1.Gravatar,
+ Message: "commit message",
+ }
// create dummy commit data
database.SaveCommit(&commit1)
database.SaveCommit(&commit2)
database.SaveCommit(&commit3)
database.SaveCommit(&commit4)
+ database.SaveCommit(&commit5)
// create dummy build data
database.SaveBuild(&Build{CommitID: commit1.ID, Slug: "node_0.10", Status: "Success", Duration: 60})
diff --git a/pkg/handler/builds.go b/pkg/handler/builds.go
index 090ce50b..be524a41 100644
--- a/pkg/handler/builds.go
+++ b/pkg/handler/builds.go
@@ -9,11 +9,16 @@ import (
// Returns the combined stdout / stderr for an individual Build.
func BuildOut(w http.ResponseWriter, r *http.Request, u *User, repo *Repo) error {
+ branch := r.FormValue("branch")
+ if branch == "" {
+ branch = "master"
+ }
+
hash := r.FormValue(":commit")
labl := r.FormValue(":label")
// get the commit from the database
- commit, err := database.GetCommitHash(hash, repo.ID)
+ commit, err := database.GetCommitBranchHash(branch, hash, repo.ID)
if err != nil {
return err
}
diff --git a/pkg/handler/commits.go b/pkg/handler/commits.go
index 15f82bc8..39ed0d7d 100644
--- a/pkg/handler/commits.go
+++ b/pkg/handler/commits.go
@@ -11,11 +11,16 @@ import (
// Display a specific Commit.
func CommitShow(w http.ResponseWriter, r *http.Request, u *User, repo *Repo) error {
+ branch := r.FormValue("branch")
+ if branch == "" {
+ branch = "master"
+ }
+
hash := r.FormValue(":commit")
labl := r.FormValue(":label")
// get the commit from the database
- commit, err := database.GetCommitHash(hash, repo.ID)
+ commit, err := database.GetCommitBranchHash(branch, hash, repo.ID)
if err != nil {
return err
}
@@ -49,7 +54,7 @@ func CommitShow(w http.ResponseWriter, r *http.Request, u *User, repo *Repo) err
// 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/builds/%s", repo.Host, repo.Owner, repo.Name, commit.Hash, builds[0].Slug))
+ "%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)
diff --git a/pkg/handler/hooks.go b/pkg/handler/hooks.go
index 85da90ae..61a284a1 100644
--- a/pkg/handler/hooks.go
+++ b/pkg/handler/hooks.go
@@ -75,7 +75,7 @@ func (h *HookHandler) HookGithub(w http.ResponseWriter, r *http.Request) error {
// Verify that the commit doesn't already exist.
// We should never build the same commit twice.
- _, err = database.GetCommitHash(hook.Head.Id, repo.ID)
+ _, err = database.GetCommitBranchHash(hook.Branch(), hook.Head.Id, repo.ID)
if err != nil && err != sql.ErrNoRows {
println("commit already exists")
return RenderText(w, http.StatusText(http.StatusBadGateway), http.StatusBadGateway)
diff --git a/pkg/queue/worker.go b/pkg/queue/worker.go
index 26612aad..8c9b4a51 100644
--- a/pkg/queue/worker.go
+++ b/pkg/queue/worker.go
@@ -95,8 +95,8 @@ func (w *worker) execute(task *BuildTask) error {
// make sure a channel exists for the repository,
// the commit, and the commit output (TODO)
reposlug := fmt.Sprintf("%s/%s/%s", task.Repo.Host, task.Repo.Owner, task.Repo.Name)
- commitslug := fmt.Sprintf("%s/%s/%s/commit/%s", task.Repo.Host, task.Repo.Owner, task.Repo.Name, task.Commit.Hash)
- consoleslug := fmt.Sprintf("%s/%s/%s/commit/%s/builds/%s", task.Repo.Host, task.Repo.Owner, task.Repo.Name, task.Commit.Hash, task.Build.Slug)
+ commitslug := fmt.Sprintf("%s/%s/%s/commit/%s/%s", task.Repo.Host, task.Repo.Owner, task.Repo.Name, task.Commit.Branch, task.Commit.Hash)
+ consoleslug := fmt.Sprintf("%s/%s/%s/commit/%s/%s/builds/%s", task.Repo.Host, task.Repo.Owner, task.Repo.Name, task.Commit.Branch, task.Commit.Hash, task.Build.Slug)
channel.Create(reposlug)
channel.Create(commitslug)
channel.CreateStream(consoleslug)
@@ -224,7 +224,7 @@ func updateGitHubStatus(repo *Repo, commit *Commit) error {
client.ApiUrl = settings.GitHubApiUrl
var url string
- url = settings.URL().String() + "/" + repo.Slug + "/commit/" + commit.Hash
+ url = settings.URL().String() + "/" + repo.Slug + "/commit/" + commit.Branch + "/" + commit.Hash
return client.Repos.CreateStatus(repo.Owner, repo.Name, status, url, message, commit.Hash)
}
diff --git a/pkg/template/emails/failure.html b/pkg/template/emails/failure.html
index fd674fa6..2a7f7478 100644
--- a/pkg/template/emails/failure.html
+++ b/pkg/template/emails/failure.html
@@ -10,7 +10,7 @@
-{{ end }}
\ No newline at end of file
+{{ end }}
diff --git a/pkg/template/emails/success.html b/pkg/template/emails/success.html
index 31facdfe..7933d820 100644
--- a/pkg/template/emails/success.html
+++ b/pkg/template/emails/success.html
@@ -10,7 +10,7 @@
commit: |
- {{ .Commit.HashShort }} |
+ {{ .Commit.HashShort }} |
branch: |
diff --git a/pkg/template/pages/repo_commit.html b/pkg/template/pages/repo_commit.html
index a5b0f181..2dfd38b3 100644
--- a/pkg/template/pages/repo_commit.html
+++ b/pkg/template/pages/repo_commit.html
@@ -5,7 +5,7 @@
@@ -18,7 +18,7 @@
-
+
{{ if .Commit.PullRequest }}
opened pull request # {{ .Commit.PullRequest }}
{{ else }}
@@ -78,7 +78,7 @@
});
{{ else }}
- $.get("/{{ .Repo.Slug }}/commit/{{ .Commit.Hash }}/build/{{ .Build.Slug }}/out.txt", function( data ) {
+ $.get("/{{ .Repo.Slug }}/commit/{{ .Commit.Hash }}/build/{{ .Build.Slug }}/out.txt?branch={{ .Commit.Branch }}", function( data ) {
var lineFormatter = new Drone.LineFormatter();
$( "#stdout" ).html(lineFormatter.format(data));
});
diff --git a/pkg/template/pages/repo_dashboard.html b/pkg/template/pages/repo_dashboard.html
index 110c4119..c7819d7c 100644
--- a/pkg/template/pages/repo_dashboard.html
+++ b/pkg/template/pages/repo_dashboard.html
@@ -28,12 +28,12 @@