fix sqlite and mssql lock (#5214)

This commit is contained in:
Lunny Xiao 2018-10-29 21:48:37 +08:00 committed by techknowlogick
parent 7694c99ab3
commit 70a80e31cf
1 changed files with 22 additions and 12 deletions

View File

@ -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)
} }