summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-10-27 22:45:24 +0800
committerGitHub <noreply@github.com>2018-10-27 22:45:24 +0800
commit2b7c366f6489787aecff307732fb3ddfeed1915f (patch)
treebc9de66914ef7076e9cceb0733e1935d0d506e6b
parent99c09dfbfa818c753459e90db5ff12a323d2936f (diff)
downloadgitea-2b7c366f6489787aecff307732fb3ddfeed1915f.tar.gz
gitea-2b7c366f6489787aecff307732fb3ddfeed1915f.zip
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>
-rw-r--r--models/issue.go5
-rw-r--r--models/issue_dependency.go11
-rw-r--r--models/repo.go6
3 files changed, 17 insertions, 5 deletions
diff --git a/models/issue.go b/models/issue.go
index 8dc0466752..ab4fe3107b 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 157e9257c4..ffa972c106 100644
--- a/models/issue_dependency.go
+++ b/models/issue_dependency.go
@@ -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
}
diff --git a/models/repo.go b/models/repo.go
index 5a47812193..6fd7aca8b3 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -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 {