fix sqlite and mssql lock (#5214)
This commit is contained in:
parent
7694c99ab3
commit
70a80e31cf
1 changed files with 22 additions and 12 deletions
|
@ -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 a new issue