summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2016-02-02 16:51:14 -0500
committerUnknwon <u@gogs.io>2016-02-02 16:51:14 -0500
commit5e97693e0e44037bdf60c6399f957102fed7c93c (patch)
tree5ae0320a24427cd766591abd69bddb5e4d0b9f8d /routers
parent452bc385febe2fbf45bbc258299e1dafe48a5b1e (diff)
parentb7b30cd85e5cabd9d643013ffb10dafd133b18ea (diff)
downloadgitea-5e97693e0e44037bdf60c6399f957102fed7c93c.tar.gz
gitea-5e97693e0e44037bdf60c6399f957102fed7c93c.zip
Merge pull request #2506 from sapk/add-branche-api-support
Implement API for branches listing
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/api.go5
-rw-r--r--routers/api/v1/convert/convert.go23
-rw-r--r--routers/api/v1/repo/branch.go55
3 files changed, 82 insertions, 1 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 6fe11a07e8..04b392fc9b 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -183,7 +183,10 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Patch("/hooks/:id:int", bind(api.EditHookOption{}), repo.EditHook)
m.Get("/raw/*", middleware.RepoRef(), repo.GetRawFile)
m.Get("/archive/*", repo.GetArchive)
-
+ m.Group("/branches", func() {
+ m.Get("",repo.ListBranches)
+ m.Get("/:branchname",repo.GetBranch)
+ })
m.Group("/keys", func() {
m.Combo("").Get(repo.ListDeployKeys).
Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey)
diff --git a/routers/api/v1/convert/convert.go b/routers/api/v1/convert/convert.go
index b91abbdd39..57b3d44e2c 100644
--- a/routers/api/v1/convert/convert.go
+++ b/routers/api/v1/convert/convert.go
@@ -10,6 +10,7 @@ import (
"github.com/Unknwon/com"
api "github.com/gogits/go-gogs-client"
+ "github.com/gogits/git-module"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/setting"
@@ -50,6 +51,28 @@ func ToApiRepository(owner *models.User, repo *models.Repository, permission api
}
}
+// ToApiBranch converts user to its API format.
+func ToApiBranch(b *models.Branch,c *git.Commit) *api.Branch {
+ return &api.Branch{
+ Name: b.Name,
+ Commit: ToApiCommit(c),
+ }
+}
+
+// ToApiCommit converts user to its API format.
+func ToApiCommit(c *git.Commit) *api.PayloadCommit {
+ return &api.PayloadCommit{
+ ID: c.ID.String(),
+ Message: c.Message(),
+ URL: "Not implemented",
+ Author: &api.PayloadAuthor{
+ Name: c.Committer.Name,
+ Email: c.Committer.Email,
+ /* UserName: c.Committer.UserName, */
+ },
+ }
+}
+
// ToApiPublicKey converts public key to its API format.
func ToApiPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey {
return &api.PublicKey{
diff --git a/routers/api/v1/repo/branch.go b/routers/api/v1/repo/branch.go
new file mode 100644
index 0000000000..d322b6b592
--- /dev/null
+++ b/routers/api/v1/repo/branch.go
@@ -0,0 +1,55 @@
+// Copyright 2016 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package repo
+
+import (
+ api "github.com/gogits/go-gogs-client"
+
+ "github.com/gogits/gogs/modules/middleware"
+ "github.com/gogits/gogs/routers/api/v1/convert"
+)
+
+// Temporary: https://gist.github.com/sapk/df64347ff218baf4a277#get-a-branch
+// https://github.com/gogits/go-gogs-client/wiki/Repositories-Branches#get-a-branch
+func GetBranch(ctx *middleware.Context) {
+ // Getting the branch requested
+ branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname"))
+ if err != nil {
+ ctx.APIError(500, "Repository.GetBranch", err)
+ return
+ }
+ // Getting the last commit of the branch
+ c, err := branch.GetCommit()
+ if err != nil {
+ ctx.APIError(500, "Branch.GetCommit", err)
+ return
+ }
+ // Converting to API format and send payload
+ ctx.JSON(200, convert.ToApiBranch(branch,c))
+}
+
+// Temporary: https://gist.github.com/sapk/df64347ff218baf4a277#list-branches
+// https://github.com/gogits/go-gogs-client/wiki/Repositories-Branches#list-branches
+func ListBranches(ctx *middleware.Context) {
+ // Listing of branches
+ Branches, err := ctx.Repo.Repository.GetBranches()
+ if err != nil {
+ ctx.APIError(500, "Repository.GetBranches", err)
+ return
+ }
+ // Getting the last commit of each branch
+ apiBranches := make([]*api.Branch, len(Branches))
+ for i := range Branches {
+ c, err := Branches[i].GetCommit()
+ if err != nil {
+ ctx.APIError(500, "Branch.GetCommit", err)
+ return
+ }
+ // Converting to API format
+ apiBranches[i] = convert.ToApiBranch(Branches[i],c)
+ }
+ // Sending the payload
+ ctx.JSON(200, &apiBranches)
+}