mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	fix sqlite and mssql lock (#5214)
This commit is contained in:
		
				
					committed by
					
						
						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