Fix API for branches with slashes (#2096)
This commit is contained in:
		
							parent
							
								
									fea902adc8
								
							
						
					
					
						commit
						f99489d5c5
					
				
					 4 changed files with 54 additions and 2 deletions
				
			
		
							
								
								
									
										44
									
								
								integrations/api_branch_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								integrations/api_branch_test.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| // Copyright 2017 The Gitea 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 integrations | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	api "code.gitea.io/sdk/gitea" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func testAPIGetBranch(t *testing.T, branchName string, exists bool) { | ||||
| 	prepareTestEnv(t) | ||||
| 
 | ||||
| 	session := loginUser(t, "user2") | ||||
| 	req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branches/%s", branchName) | ||||
| 	resp := session.MakeRequest(t, req) | ||||
| 	if !exists { | ||||
| 		assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode) | ||||
| 		return | ||||
| 	} | ||||
| 	assert.EqualValues(t, http.StatusOK, resp.HeaderCode) | ||||
| 	var branch api.Branch | ||||
| 	DecodeJSON(t, resp, &branch) | ||||
| 	assert.EqualValues(t, branchName, branch.Name) | ||||
| } | ||||
| 
 | ||||
| func TestAPIGetBranch(t *testing.T) { | ||||
| 	for _, test := range []struct { | ||||
| 		BranchName string | ||||
| 		Exists     bool | ||||
| 	}{ | ||||
| 		{"master", true}, | ||||
| 		{"master/doesnotexist", false}, | ||||
| 		{"feature/1", true}, | ||||
| 		{"feature/1/doesnotexist", false}, | ||||
| 	} { | ||||
| 		testAPIGetBranch(t, test.BranchName, test.Exists) | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1 @@ | |||
| 65f1bf27bc3bf70f64657658635e66094edbcb4d | ||||
|  | @ -364,7 +364,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| 					Post(bind(api.CreateForkOption{}), repo.CreateFork) | ||||
| 				m.Group("/branches", func() { | ||||
| 					m.Get("", repo.ListBranches) | ||||
| 					m.Get("/:branchname", repo.GetBranch) | ||||
| 					m.Get("/*", context.RepoRef(), repo.GetBranch) | ||||
| 				}) | ||||
| 				m.Group("/keys", func() { | ||||
| 					m.Combo("").Get(repo.ListDeployKeys). | ||||
|  |  | |||
|  | @ -15,7 +15,14 @@ import ( | |||
| // GetBranch get a branch of a repository
 | ||||
| // see https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch
 | ||||
| func GetBranch(ctx *context.APIContext) { | ||||
| 	branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname")) | ||||
| 	if ctx.Repo.TreePath != "" { | ||||
| 		// if TreePath != "", then URL contained extra slashes
 | ||||
| 		// (i.e. "master/subbranch" instead of "master"), so branch does
 | ||||
| 		// not exist
 | ||||
| 		ctx.Status(404) | ||||
| 		return | ||||
| 	} | ||||
| 	branch, err := ctx.Repo.Repository.GetBranch(ctx.Repo.BranchName) | ||||
| 	if err != nil { | ||||
| 		if models.IsErrBranchNotExist(err) { | ||||
| 			ctx.Error(404, "GetBranch", err) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue