mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	fix sqlite and mssql lock (#5214)
This commit is contained in:
		
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							7694c99ab3
						
					
				
				
					commit
					70a80e31cf
				
			| @@ -460,21 +460,21 @@ func removeOrgUser(sess *xorm.Session, orgID, userID int64) error { | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	org, err := GetUserByID(orgID) | 	org, err := getUserByID(sess, orgID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("GetUserByID [%d]: %v", orgID, err) | 		return fmt.Errorf("GetUserByID [%d]: %v", orgID, err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Check if the user to delete is the last member in owner team. | 	// Check if the user to delete is the last member in owner team. | ||||||
| 	if isOwner, err := IsOrganizationOwner(orgID, userID); err != nil { | 	if isOwner, err := isOrganizationOwner(sess, orgID, userID); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if isOwner { | 	} else if isOwner { | ||||||
| 		t, err := org.GetOwnerTeam() | 		t, err := org.getOwnerTeam(sess) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		if t.NumMembers == 1 { | 		if t.NumMembers == 1 { | ||||||
| 			if err := t.GetMembers(); err != nil { | 			if err := t.getMembers(sess); err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| 			if t.Members[0].ID == userID { | 			if t.Members[0].ID == userID { | ||||||
| @@ -490,7 +490,7 @@ func removeOrgUser(sess *xorm.Session, orgID, userID int64) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Delete all repository accesses and unwatch them. | 	// Delete all repository accesses and unwatch them. | ||||||
| 	env, err := org.AccessibleReposEnv(userID) | 	env, err := org.accessibleReposEnv(sess, userID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("AccessibleReposEnv: %v", err) | 		return fmt.Errorf("AccessibleReposEnv: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -618,16 +618,26 @@ type accessibleReposEnv struct { | |||||||
| 	org     *User | 	org     *User | ||||||
| 	userID  int64 | 	userID  int64 | ||||||
| 	teamIDs []int64 | 	teamIDs []int64 | ||||||
|  | 	e       Engine | ||||||
| } | } | ||||||
|  |  | ||||||
| // AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org` | // AccessibleReposEnv an AccessibleReposEnvironment for the repositories in `org` | ||||||
| // that are accessible to the specified user. | // that are accessible to the specified user. | ||||||
| func (org *User) AccessibleReposEnv(userID int64) (AccessibleReposEnvironment, error) { | func (org *User) AccessibleReposEnv(userID int64) (AccessibleReposEnvironment, error) { | ||||||
| 	teamIDs, err := org.GetUserTeamIDs(userID) | 	return org.accessibleReposEnv(x, userID) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (org *User) accessibleReposEnv(e Engine, userID int64) (AccessibleReposEnvironment, error) { | ||||||
|  | 	teamIDs, err := org.getUserTeamIDs(e, userID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return &accessibleReposEnv{org: org, userID: userID, teamIDs: teamIDs}, nil | 	return &accessibleReposEnv{ | ||||||
|  | 		org:     org, | ||||||
|  | 		userID:  userID, | ||||||
|  | 		teamIDs: teamIDs, | ||||||
|  | 		e:       e, | ||||||
|  | 	}, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (env *accessibleReposEnv) cond() builder.Cond { | func (env *accessibleReposEnv) cond() builder.Cond { | ||||||
| @@ -642,7 +652,7 @@ func (env *accessibleReposEnv) cond() builder.Cond { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (env *accessibleReposEnv) CountRepos() (int64, error) { | func (env *accessibleReposEnv) CountRepos() (int64, error) { | ||||||
| 	repoCount, err := x. | 	repoCount, err := env.e. | ||||||
| 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | ||||||
| 		Where(env.cond()). | 		Where(env.cond()). | ||||||
| 		Distinct("`repository`.id"). | 		Distinct("`repository`.id"). | ||||||
| @@ -659,7 +669,7 @@ func (env *accessibleReposEnv) RepoIDs(page, pageSize int) ([]int64, error) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	repoIDs := make([]int64, 0, pageSize) | 	repoIDs := make([]int64, 0, pageSize) | ||||||
| 	return repoIDs, x. | 	return repoIDs, env.e. | ||||||
| 		Table("repository"). | 		Table("repository"). | ||||||
| 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id"). | ||||||
| 		Where(env.cond()). | 		Where(env.cond()). | ||||||
| @@ -681,14 +691,14 @@ func (env *accessibleReposEnv) Repos(page, pageSize int) ([]*Repository, error) | |||||||
| 		return repos, nil | 		return repos, nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return repos, x. | 	return repos, env.e. | ||||||
| 		In("`repository`.id", repoIDs). | 		In("`repository`.id", repoIDs). | ||||||
| 		Find(&repos) | 		Find(&repos) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (env *accessibleReposEnv) MirrorRepoIDs() ([]int64, error) { | func (env *accessibleReposEnv) MirrorRepoIDs() ([]int64, error) { | ||||||
| 	repoIDs := make([]int64, 0, 10) | 	repoIDs := make([]int64, 0, 10) | ||||||
| 	return repoIDs, x. | 	return repoIDs, env.e. | ||||||
| 		Table("repository"). | 		Table("repository"). | ||||||
| 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true). | 		Join("INNER", "team_repo", "`team_repo`.repo_id=`repository`.id AND `repository`.is_mirror=?", true). | ||||||
| 		Where(env.cond()). | 		Where(env.cond()). | ||||||
| @@ -709,7 +719,7 @@ func (env *accessibleReposEnv) MirrorRepos() ([]*Repository, error) { | |||||||
| 		return repos, nil | 		return repos, nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return repos, x. | 	return repos, env.e. | ||||||
| 		In("`repository`.id", repoIDs). | 		In("`repository`.id", repoIDs). | ||||||
| 		Find(&repos) | 		Find(&repos) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user