Fix branch api canPush and canMerge (#10776)
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							parent
							
								
									b3f4f812d8
								
							
						
					
					
						commit
						dcaa5643d7
					
				|  | @ -28,6 +28,8 @@ func testAPIGetBranch(t *testing.T, branchName string, exists bool) { | |||
| 	var branch api.Branch | ||||
| 	DecodeJSON(t, resp, &branch) | ||||
| 	assert.EqualValues(t, branchName, branch.Name) | ||||
| 	assert.True(t, branch.UserCanPush) | ||||
| 	assert.True(t, branch.UserCanMerge) | ||||
| } | ||||
| 
 | ||||
| func testAPIGetBranchProtection(t *testing.T, branchName string, expectedHTTPStatus int) { | ||||
|  |  | |||
|  | @ -30,8 +30,17 @@ func ToEmail(email *models.EmailAddress) *api.Email { | |||
| } | ||||
| 
 | ||||
| // ToBranch convert a git.Commit and git.Branch to an api.Branch
 | ||||
| func ToBranch(repo *models.Repository, b *git.Branch, c *git.Commit, bp *models.ProtectedBranch, user *models.User, isRepoAdmin bool) *api.Branch { | ||||
| func ToBranch(repo *models.Repository, b *git.Branch, c *git.Commit, bp *models.ProtectedBranch, user *models.User, isRepoAdmin bool) (*api.Branch, error) { | ||||
| 	if bp == nil { | ||||
| 		var hasPerm bool | ||||
| 		var err error | ||||
| 		if user != nil { | ||||
| 			hasPerm, err = models.HasAccessUnit(user, repo, models.UnitTypeCode, models.AccessModeWrite) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		return &api.Branch{ | ||||
| 			Name:                b.Name, | ||||
| 			Commit:              ToCommit(repo, c), | ||||
|  | @ -39,14 +48,9 @@ func ToBranch(repo *models.Repository, b *git.Branch, c *git.Commit, bp *models. | |||
| 			RequiredApprovals:   0, | ||||
| 			EnableStatusCheck:   false, | ||||
| 			StatusCheckContexts: []string{}, | ||||
| 			UserCanPush:                   true, | ||||
| 			UserCanMerge:                  true, | ||||
| 			EffectiveBranchProtectionName: "", | ||||
| 		} | ||||
| 	} | ||||
| 	branchProtectionName := "" | ||||
| 	if isRepoAdmin { | ||||
| 		branchProtectionName = bp.BranchName | ||||
| 			UserCanPush:         hasPerm, | ||||
| 			UserCanMerge:        hasPerm, | ||||
| 		}, nil | ||||
| 	} | ||||
| 
 | ||||
| 	branch := &api.Branch{ | ||||
|  | @ -56,14 +60,18 @@ func ToBranch(repo *models.Repository, b *git.Branch, c *git.Commit, bp *models. | |||
| 		RequiredApprovals:   bp.RequiredApprovals, | ||||
| 		EnableStatusCheck:   bp.EnableStatusCheck, | ||||
| 		StatusCheckContexts: bp.StatusCheckContexts, | ||||
| 		EffectiveBranchProtectionName: branchProtectionName, | ||||
| 	} | ||||
| 
 | ||||
| 	if isRepoAdmin { | ||||
| 		branch.EffectiveBranchProtectionName = bp.BranchName | ||||
| 	} | ||||
| 
 | ||||
| 	if user != nil { | ||||
| 		branch.UserCanPush = bp.CanUserPush(user.ID) | ||||
| 		branch.UserCanMerge = bp.IsUserMergeWhitelisted(user.ID) | ||||
| 	} | ||||
| 	return branch | ||||
| 
 | ||||
| 	return branch, nil | ||||
| } | ||||
| 
 | ||||
| // ToBranchProtection convert a ProtectedBranch to api.BranchProtection
 | ||||
|  |  | |||
|  | @ -72,7 +72,13 @@ func GetBranch(ctx *context.APIContext) { | |||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.JSON(http.StatusOK, convert.ToBranch(ctx.Repo.Repository, branch, c, branchProtection, ctx.User, ctx.Repo.IsAdmin())) | ||||
| 	br, err := convert.ToBranch(ctx.Repo.Repository, branch, c, branchProtection, ctx.User, ctx.Repo.IsAdmin()) | ||||
| 	if err != nil { | ||||
| 		ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.JSON(http.StatusOK, br) | ||||
| } | ||||
| 
 | ||||
| // ListBranches list all the branches of a repository
 | ||||
|  | @ -115,7 +121,11 @@ func ListBranches(ctx *context.APIContext) { | |||
| 			ctx.Error(http.StatusInternalServerError, "GetBranchProtection", err) | ||||
| 			return | ||||
| 		} | ||||
| 		apiBranches[i] = convert.ToBranch(ctx.Repo.Repository, branches[i], c, branchProtection, ctx.User, ctx.Repo.IsAdmin()) | ||||
| 		apiBranches[i], err = convert.ToBranch(ctx.Repo.Repository, branches[i], c, branchProtection, ctx.User, ctx.Repo.IsAdmin()) | ||||
| 		if err != nil { | ||||
| 			ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.JSON(http.StatusOK, &apiBranches) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue