mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-29 21:41:02 +00:00 
			
		
		
		
	improve protected branch to add whitelist support (#2451)
* improve protected branch to add whitelist support * fix lint * fix style check * fix tests * fix description on UI and import * fix test * bug fixed * fix tests and languages * move isSliceInt64Eq to util pkg; improve function names & typo
This commit is contained in:
		
					parent
					
						
							
								be3319b3d5
							
						
					
				
			
			
				commit
				
					
						1739e84ac0
					
				
			
		
					 29 changed files with 736 additions and 303 deletions
				
			
		|  | @ -656,6 +656,42 @@ func (repo *Repository) CanEnableEditor() bool { | |||
| 	return !repo.IsMirror | ||||
| } | ||||
| 
 | ||||
| // GetWriters returns all users that have write access to the repository. | ||||
| func (repo *Repository) GetWriters() (_ []*User, err error) { | ||||
| 	return repo.getUsersWithAccessMode(x, AccessModeWrite) | ||||
| } | ||||
| 
 | ||||
| // getUsersWithAccessMode returns users that have at least given access mode to the repository. | ||||
| func (repo *Repository) getUsersWithAccessMode(e Engine, mode AccessMode) (_ []*User, err error) { | ||||
| 	if err = repo.getOwner(e); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accesses := make([]*Access, 0, 10) | ||||
| 	if err = e.Where("repo_id = ? AND mode >= ?", repo.ID, mode).Find(&accesses); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	// Leave a seat for owner itself to append later, but if owner is an organization | ||||
| 	// and just waste 1 unit is cheaper than re-allocate memory once. | ||||
| 	users := make([]*User, 0, len(accesses)+1) | ||||
| 	if len(accesses) > 0 { | ||||
| 		userIDs := make([]int64, len(accesses)) | ||||
| 		for i := 0; i < len(accesses); i++ { | ||||
| 			userIDs[i] = accesses[i].UserID | ||||
| 		} | ||||
| 
 | ||||
| 		if err = e.In("id", userIDs).Find(&users); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 	if !repo.Owner.IsOrganization() { | ||||
| 		users = append(users, repo.Owner) | ||||
| 	} | ||||
| 
 | ||||
| 	return users, nil | ||||
| } | ||||
| 
 | ||||
| // NextIssueIndex returns the next issue index | ||||
| // FIXME: should have a mutex to prevent producing same index for two issues that are created | ||||
| // closely enough. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue