]> source.dussan.org Git - gitea.git/commitdiff
fix sqlite lock (#5184)
authorLunny Xiao <xiaolunwen@gmail.com>
Sat, 27 Oct 2018 14:45:24 +0000 (22:45 +0800)
committerGitHub <noreply@github.com>
Sat, 27 Oct 2018 14:45:24 +0000 (22:45 +0800)
* fix sqlite lock

* fix bug

Co-Authored-By: lunny <xiaolunwen@gmail.com>
* fix bug

Co-Authored-By: lunny <xiaolunwen@gmail.com>
models/issue.go
models/issue_dependency.go
models/repo.go

index 8dc0466752dd3a50a106eec859839988b6e1c58a..ab4fe3107bac706cfdc192329b940e76d204bd88 100644 (file)
@@ -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 {
index 157e9257c47415c6e867ec8fead99c2709cbe28c..ffa972c1060b19dc1f66e96abbc0a125ce2725a1 100644 (file)
@@ -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
        }
index 5a47812193c1042fb65350a5db258a3727557733..6fd7aca8b38922462c81244a9bc145d5197f10e6 100644 (file)
@@ -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 {