From 782771a82ccf2c22d0fdf09c7e3d30efcdb1e976 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 26 Oct 2018 00:13:20 +0800 Subject: [PATCH 1/3] fix sqlite lock --- models/issue.go | 5 +++-- models/issue_dependency.go | 9 ++++++++- models/repo.go | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/models/issue.go b/models/issue.go index 8dc0466752dd3..ab4fe3107bac7 100644 --- a/models/issue.go +++ b/models/issue.go @@ -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 { diff --git a/models/issue_dependency.go b/models/issue_dependency.go index 157e9257c4741..94b000169875c 100644 --- a/models/issue_dependency.go +++ b/models/issue_dependency.go @@ -113,7 +113,10 @@ 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) +} +func issueNoDependenciesLeft(e Engine, issue *Issue) (bool, error) { exists, err := x. Table("issue_dependency"). Select("issue.*"). @@ -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 } diff --git a/models/repo.go b/models/repo.go index 61e1e26ae7d04..74a3220b36acd 100644 --- a/models/repo.go +++ b/models/repo.go @@ -448,6 +448,10 @@ func (repo *Repository) MustGetUnit(tp UnitType) *RepoUnit { // GetUnit returns a RepoUnit object func (repo *Repository) GetUnit(tp UnitType) (*RepoUnit, error) { + return repo.getUnit(x, tp) +} + +func (repo *Repository) getUnit(e Engine, tp UnitType) (*RepoUnit, error) { if err := repo.getUnits(x); err != nil { return nil, err } From 1dfc7cbe63a19b69ba857c73ac698f29d504dd64 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 27 Oct 2018 21:07:50 +0800 Subject: [PATCH 2/3] fix bug Co-Authored-By: lunny --- models/issue_dependency.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/issue_dependency.go b/models/issue_dependency.go index 94b000169875c..ffa972c1060b1 100644 --- a/models/issue_dependency.go +++ b/models/issue_dependency.go @@ -117,7 +117,7 @@ func IssueNoDependenciesLeft(issue *Issue) (bool, error) { } func issueNoDependenciesLeft(e Engine, issue *Issue) (bool, error) { - exists, err := x. + exists, err := e. Table("issue_dependency"). Select("issue.*"). Join("INNER", "issue", "issue.id = issue_dependency.dependency_id"). From 65ae2009c972417e6a894910ac7398d313fd0895 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 27 Oct 2018 21:08:06 +0800 Subject: [PATCH 3/3] fix bug Co-Authored-By: lunny --- models/repo.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/repo.go b/models/repo.go index 74a3220b36acd..a9e9e13416853 100644 --- a/models/repo.go +++ b/models/repo.go @@ -452,7 +452,7 @@ func (repo *Repository) GetUnit(tp UnitType) (*RepoUnit, error) { } func (repo *Repository) getUnit(e Engine, tp UnitType) (*RepoUnit, error) { - if err := repo.getUnits(x); err != nil { + if err := repo.getUnits(e); err != nil { return nil, err } for _, unit := range repo.Units {