mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	fix sqlite lock (#5184)
* fix sqlite lock * fix bug Co-Authored-By: lunny <xiaolunwen@gmail.com> * fix bug Co-Authored-By: lunny <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -655,9 +655,9 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check for open dependencies
 | 
			
		||||
	if isClosed && issue.Repo.IsDependenciesEnabled() {
 | 
			
		||||
	if isClosed && issue.Repo.isDependenciesEnabled(e) {
 | 
			
		||||
		// only check if dependencies are enabled and we're about to close an issue, otherwise reopening an issue would fail when there are unsatisfied dependencies
 | 
			
		||||
		noDeps, err := IssueNoDependenciesLeft(issue)
 | 
			
		||||
		noDeps, err := issueNoDependenciesLeft(e, issue)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -721,6 +721,7 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
 | 
			
		||||
	if err = sess.Commit(); err != nil {
 | 
			
		||||
		return fmt.Errorf("Commit: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	sess.Close()
 | 
			
		||||
 | 
			
		||||
	mode, _ := AccessLevel(issue.Poster.ID, issue.Repo)
 | 
			
		||||
	if issue.IsPull {
 | 
			
		||||
 
 | 
			
		||||
@@ -113,8 +113,11 @@ func issueDepExists(e Engine, issueID int64, depID int64) (bool, error) {
 | 
			
		||||
 | 
			
		||||
// IssueNoDependenciesLeft checks if issue can be closed
 | 
			
		||||
func IssueNoDependenciesLeft(issue *Issue) (bool, error) {
 | 
			
		||||
	return issueNoDependenciesLeft(x, issue)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	exists, err := x.
 | 
			
		||||
func issueNoDependenciesLeft(e Engine, issue *Issue) (bool, error) {
 | 
			
		||||
	exists, err := e.
 | 
			
		||||
		Table("issue_dependency").
 | 
			
		||||
		Select("issue.*").
 | 
			
		||||
		Join("INNER", "issue", "issue.id = issue_dependency.dependency_id").
 | 
			
		||||
@@ -127,9 +130,13 @@ func IssueNoDependenciesLeft(issue *Issue) (bool, error) {
 | 
			
		||||
 | 
			
		||||
// IsDependenciesEnabled returns if dependecies are enabled and returns the default setting if not set.
 | 
			
		||||
func (repo *Repository) IsDependenciesEnabled() bool {
 | 
			
		||||
	return repo.isDependenciesEnabled(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (repo *Repository) isDependenciesEnabled(e Engine) bool {
 | 
			
		||||
	var u *RepoUnit
 | 
			
		||||
	var err error
 | 
			
		||||
	if u, err = repo.GetUnit(UnitTypeIssues); err != nil {
 | 
			
		||||
	if u, err = repo.getUnit(e, UnitTypeIssues); err != nil {
 | 
			
		||||
		log.Trace("%s", err)
 | 
			
		||||
		return setting.Service.DefaultEnableDependencies
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -448,7 +448,11 @@ func (repo *Repository) MustGetUnit(tp UnitType) *RepoUnit {
 | 
			
		||||
 | 
			
		||||
// GetUnit returns a RepoUnit object
 | 
			
		||||
func (repo *Repository) GetUnit(tp UnitType) (*RepoUnit, error) {
 | 
			
		||||
	if err := repo.getUnits(x); err != nil {
 | 
			
		||||
	return repo.getUnit(x, tp)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (repo *Repository) getUnit(e Engine, tp UnitType) (*RepoUnit, error) {
 | 
			
		||||
	if err := repo.getUnits(e); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	for _, unit := range repo.Units {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user