mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 00:54:43 +01:00 
			
		
		
		
	Update User.NumRepos atomically in createRepository (#7493)
The update call on the user call races if there is more than one repository creation concurrently, leading to incorrect count of repos. Split things in two, so that we call the update for last visibility (which isn't problematic if it races, since it can only ever be best-effort anyway). This way we can atomically increment the count of repos.
This commit is contained in:
		
							parent
							
								
									0e2996caa1
								
							
						
					
					
						commit
						361607d831
					
				| @ -1306,13 +1306,17 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	u.NumRepos++ | ||||
| 	// Remember visibility preference. | ||||
| 	u.LastRepoVisibility = repo.IsPrivate | ||||
| 	if err = updateUser(e, u); err != nil { | ||||
| 	if err = updateUserCols(e, u, "last_repo_visibility"); err != nil { | ||||
| 		return fmt.Errorf("updateUser: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if _, err = e.Incr("num_repos").ID(u.ID).Update(new(User)); err != nil { | ||||
| 		return fmt.Errorf("increment user total_repos: %v", err) | ||||
| 	} | ||||
| 	u.NumRepos++ | ||||
| 
 | ||||
| 	// Give access to all members in owner team. | ||||
| 	if u.IsOrganization() { | ||||
| 		t, err := u.getOwnerTeam(e) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user