@ -21,6 +21,7 @@ import (
repo_model "code.gitea.io/gitea/models/repo"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/log"
api "code.gitea.io/gitea/modules/structs"
api "code.gitea.io/gitea/modules/structs"
@ -105,33 +106,46 @@ func ToBranch(ctx context.Context, repo *repo_model.Repository, branchName strin
return branch , nil
return branch , nil
}
}
// ToBranchProtection convert a ProtectedBranch to api.BranchProtection
// getWhitelistEntities returns the names of the entities that are in the whitelist
func ToBranchProtection ( ctx context . Context , bp * git_model . ProtectedBranch ) * api . BranchProtection {
func getWhitelistEntities [ T * user_model . User | * organization . Team ] ( entities [ ] T , whitelistIDs [ ] int64 ) [ ] string {
pushWhitelistUsernames , err := user_model . GetUserNamesByIDs ( ctx , bp . WhitelistUserIDs )
whitelistUserIDsSet := container . SetOf ( whitelistIDs ... )
if err != nil {
whitelistNames := make ( [ ] string , 0 )
log . Error ( "GetUserNamesByIDs (WhitelistUserIDs): %v" , err )
for _ , entity := range entities {
switch v := any ( entity ) . ( type ) {
case * user_model . User :
if whitelistUserIDsSet . Contains ( v . ID ) {
whitelistNames = append ( whitelistNames , v . Name )
}
}
mergeWhitelistUsernames , err := user_model . GetUserNamesByIDs ( ctx , bp . MergeWhitelistUserIDs )
case * organization . Team :
if err != nil {
if whitelistUserIDsSet . Contains ( v . ID ) {
log . Error ( "GetUserNamesByIDs (MergeWhitelistUserIDs): %v" , err )
whitelistNames = append ( whitelistNames , v . Name )
}
}
approvalsWhitelistUsernames , err := user_model . GetUserNamesByIDs ( ctx , bp . ApprovalsWhitelistUserIDs )
if err != nil {
log . Error ( "GetUserNamesByIDs (ApprovalsWhitelistUserIDs): %v" , err )
}
}
pushWhitelistTeams , err := organization . GetTeamNamesByID ( ctx , bp . WhitelistTeamIDs )
if err != nil {
log . Error ( "GetTeamNamesByID (WhitelistTeamIDs): %v" , err )
}
}
mergeWhitelistTeams , err := organization . GetTeamNamesByID ( ctx , bp . MergeWhitelistTeamIDs )
return whitelistNames
}
// ToBranchProtection convert a ProtectedBranch to api.BranchProtection
func ToBranchProtection ( ctx context . Context , bp * git_model . ProtectedBranch , repo * repo_model . Repository ) * api . BranchProtection {
readers , err := access_model . GetRepoReaders ( ctx , repo )
if err != nil {
if err != nil {
log . Error ( "GetTeamNamesByID (MergeWhitelistTeamIDs): %v" , err )
log . Error ( "GetRepoReaders : %v" , err )
}
}
approvalsWhitelistTeams , err := organization . GetTeamNamesByID ( ctx , bp . ApprovalsWhitelistTeamIDs )
pushWhitelistUsernames := getWhitelistEntities ( readers , bp . WhitelistUserIDs )
mergeWhitelistUsernames := getWhitelistEntities ( readers , bp . MergeWhitelistUserIDs )
approvalsWhitelistUsernames := getWhitelistEntities ( readers , bp . ApprovalsWhitelistUserIDs )
teamReaders , err := organization . OrgFromUser ( repo . Owner ) . TeamsWithAccessToRepo ( ctx , repo . ID , perm . AccessModeRead )
if err != nil {
if err != nil {
log . Error ( "GetTeamNamesByID (ApprovalsWhitelistTeamIDs): %v" , err )
log . Error ( "Repo.Owner.TeamsWithAccessToRepo : %v" , err )
}
}
pushWhitelistTeams := getWhitelistEntities ( teamReaders , bp . WhitelistTeamIDs )
mergeWhitelistTeams := getWhitelistEntities ( teamReaders , bp . MergeWhitelistTeamIDs )
approvalsWhitelistTeams := getWhitelistEntities ( teamReaders , bp . ApprovalsWhitelistTeamIDs )
branchName := ""
branchName := ""
if ! git_model . IsRuleNameSpecial ( bp . RuleName ) {
if ! git_model . IsRuleNameSpecial ( bp . RuleName ) {
branchName = bp . RuleName
branchName = bp . RuleName