mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Fix sqlite lock (#5176)
* fix sqlite lock * fix sqlite lock on getUnitType
This commit is contained in:
		@@ -123,10 +123,10 @@ func createOrUpdateIssueNotifications(e Engine, issue *Issue, notificationAuthor
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, watch := range watches {
 | 
						for _, watch := range watches {
 | 
				
			||||||
		issue.Repo.Units = nil
 | 
							issue.Repo.Units = nil
 | 
				
			||||||
		if issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypePullRequests) {
 | 
							if issue.IsPull && !issue.Repo.checkUnitUser(e, watch.UserID, false, UnitTypePullRequests) {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if !issue.IsPull && !issue.Repo.CheckUnitUser(watch.UserID, false, UnitTypeIssues) {
 | 
							if !issue.IsPull && !issue.Repo.checkUnitUser(e, watch.UserID, false, UnitTypeIssues) {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -215,7 +215,11 @@ func (t *Team) RemoveRepository(repoID int64) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// UnitEnabled returns if the team has the given unit type enabled
 | 
					// UnitEnabled returns if the team has the given unit type enabled
 | 
				
			||||||
func (t *Team) UnitEnabled(tp UnitType) bool {
 | 
					func (t *Team) UnitEnabled(tp UnitType) bool {
 | 
				
			||||||
	if err := t.getUnits(x); err != nil {
 | 
						return t.unitEnabled(x, tp)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (t *Team) unitEnabled(e Engine, tp UnitType) bool {
 | 
				
			||||||
 | 
						if err := t.getUnits(e); err != nil {
 | 
				
			||||||
		log.Warn("Error loading repository (ID: %d) units: %s", t.ID, err.Error())
 | 
							log.Warn("Error loading repository (ID: %d) units: %s", t.ID, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -321,7 +321,11 @@ func (repo *Repository) getUnits(e Engine) (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// CheckUnitUser check whether user could visit the unit of this repository
 | 
					// CheckUnitUser check whether user could visit the unit of this repository
 | 
				
			||||||
func (repo *Repository) CheckUnitUser(userID int64, isAdmin bool, unitType UnitType) bool {
 | 
					func (repo *Repository) CheckUnitUser(userID int64, isAdmin bool, unitType UnitType) bool {
 | 
				
			||||||
	if err := repo.getUnitsByUserID(x, userID, isAdmin); err != nil {
 | 
						return repo.checkUnitUser(x, userID, isAdmin, unitType)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (repo *Repository) checkUnitUser(e Engine, userID int64, isAdmin bool, unitType UnitType) bool {
 | 
				
			||||||
 | 
						if err := repo.getUnitsByUserID(e, userID, isAdmin); err != nil {
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -369,7 +373,7 @@ func (repo *Repository) getUnitsByUserID(e Engine, userID int64, isAdmin bool) (
 | 
				
			|||||||
	var newRepoUnits = make([]*RepoUnit, 0, len(repo.Units))
 | 
						var newRepoUnits = make([]*RepoUnit, 0, len(repo.Units))
 | 
				
			||||||
	for _, u := range repo.Units {
 | 
						for _, u := range repo.Units {
 | 
				
			||||||
		for _, team := range teams {
 | 
							for _, team := range teams {
 | 
				
			||||||
			if team.UnitEnabled(u.Type) {
 | 
								if team.unitEnabled(e, u.Type) {
 | 
				
			||||||
				newRepoUnits = append(newRepoUnits, u)
 | 
									newRepoUnits = append(newRepoUnits, u)
 | 
				
			||||||
				break
 | 
									break
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user