Implement API for branches listingtags/v1.2.0-rc1
@@ -288,6 +288,20 @@ func (repo *Repository) GetMirror() (err error) { | |||||
return err | return err | ||||
} | } | ||||
func (repo *Repository) GetBranch(br string) (*Branch, error) { | |||||
if(!git.IsBranchExist(repo.RepoPath(), br)){ | |||||
return nil, fmt.Errorf("Branch does not exist: %s", br); | |||||
} | |||||
return &Branch{ | |||||
Path: repo.RepoPath(), | |||||
Name: br, | |||||
},nil | |||||
} | |||||
func (repo *Repository) GetBranches() ([]*Branch, error) { | |||||
return GetBranchesByPath(repo.RepoPath()) | |||||
} | |||||
func (repo *Repository) GetBaseRepo() (err error) { | func (repo *Repository) GetBaseRepo() (err error) { | ||||
if !repo.IsFork { | if !repo.IsFork { | ||||
return nil | return nil | ||||
@@ -0,0 +1,43 @@ | |||||
// 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 models | |||||
import ( | |||||
"github.com/gogits/git-module" | |||||
) | |||||
type Branch struct { | |||||
Path string | |||||
Name string | |||||
} | |||||
func GetBranchesByPath(path string) ([]*Branch, error) { | |||||
gitRepo, err := git.OpenRepository(path) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
brs, err := gitRepo.GetBranches() | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
Branches := make([]*Branch, len(brs)) | |||||
for i := range brs { | |||||
Branches[i] = &Branch{ | |||||
Path: path, | |||||
Name: brs[i], | |||||
} | |||||
} | |||||
return Branches, nil | |||||
} | |||||
func (br *Branch) GetCommit() (*git.Commit, error) { | |||||
gitRepo, err := git.OpenRepository(br.Path) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return gitRepo.GetBranchCommit(br.Name) | |||||
} |
@@ -183,7 +183,10 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
m.Patch("/hooks/:id:int", bind(api.EditHookOption{}), repo.EditHook) | m.Patch("/hooks/:id:int", bind(api.EditHookOption{}), repo.EditHook) | ||||
m.Get("/raw/*", middleware.RepoRef(), repo.GetRawFile) | m.Get("/raw/*", middleware.RepoRef(), repo.GetRawFile) | ||||
m.Get("/archive/*", repo.GetArchive) | m.Get("/archive/*", repo.GetArchive) | ||||
m.Group("/branches", func() { | |||||
m.Get("",repo.ListBranches) | |||||
m.Get("/:branchname",repo.GetBranch) | |||||
}) | |||||
m.Group("/keys", func() { | m.Group("/keys", func() { | ||||
m.Combo("").Get(repo.ListDeployKeys). | m.Combo("").Get(repo.ListDeployKeys). | ||||
Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey) | Post(bind(api.CreateKeyOption{}), repo.CreateDeployKey) | ||||
@@ -10,6 +10,7 @@ import ( | |||||
"github.com/Unknwon/com" | "github.com/Unknwon/com" | ||||
api "github.com/gogits/go-gogs-client" | api "github.com/gogits/go-gogs-client" | ||||
"github.com/gogits/git-module" | |||||
"github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
"github.com/gogits/gogs/modules/setting" | "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. | // ToApiPublicKey converts public key to its API format. | ||||
func ToApiPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { | func ToApiPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { | ||||
return &api.PublicKey{ | return &api.PublicKey{ | ||||
@@ -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) | |||||
} |