mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:02:14 +01:00 
			
		
		
		
	Merge pull request #2506 from sapk/add-branche-api-support
Implement API for branches listing
This commit is contained in:
		
						commit
						5e97693e0e
					
				| @ -288,6 +288,20 @@ func (repo *Repository) GetMirror() (err error) { | ||||
| 	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) { | ||||
| 	if !repo.IsFork { | ||||
| 		return nil | ||||
|  | ||||
							
								
								
									
										43
									
								
								models/repo_branch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								models/repo_branch.go
									
									
									
									
									
										Normal file
									
								
							| @ -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.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) | ||||
|  | ||||
| @ -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{ | ||||
|  | ||||
							
								
								
									
										55
									
								
								routers/api/v1/repo/branch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								routers/api/v1/repo/branch.go
									
									
									
									
									
										Normal file
									
								
							| @ -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) | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user