mirror of
https://github.com/go-gitea/gitea.git
synced 2024-05-11 05:55:29 +00:00
9302eba971
* DBContext is just a Context This PR removes some of the specialness from the DBContext and makes it context This allows us to simplify the GetEngine code to wrap around any context in future and means that we can change our loadRepo(e Engine) functions to simply take contexts. Signed-off-by: Andrew Thornton <[email protected]> * fix unit tests Signed-off-by: Andrew Thornton <[email protected]> * another place that needs to set the initial context Signed-off-by: Andrew Thornton <[email protected]> * avoid race Signed-off-by: Andrew Thornton <[email protected]> * change attachment error Signed-off-by: Andrew Thornton <[email protected]>
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package models
|
|
|
|
import "code.gitea.io/gitea/models/db"
|
|
|
|
// IssueLockOptions defines options for locking and/or unlocking an issue/PR
|
|
type IssueLockOptions struct {
|
|
Doer *User
|
|
Issue *Issue
|
|
Reason string
|
|
}
|
|
|
|
// LockIssue locks an issue. This would limit commenting abilities to
|
|
// users with write access to the repo
|
|
func LockIssue(opts *IssueLockOptions) error {
|
|
return updateIssueLock(opts, true)
|
|
}
|
|
|
|
// UnlockIssue unlocks a previously locked issue.
|
|
func UnlockIssue(opts *IssueLockOptions) error {
|
|
return updateIssueLock(opts, false)
|
|
}
|
|
|
|
func updateIssueLock(opts *IssueLockOptions, lock bool) error {
|
|
if opts.Issue.IsLocked == lock {
|
|
return nil
|
|
}
|
|
|
|
opts.Issue.IsLocked = lock
|
|
var commentType CommentType
|
|
if opts.Issue.IsLocked {
|
|
commentType = CommentTypeLock
|
|
} else {
|
|
commentType = CommentTypeUnlock
|
|
}
|
|
|
|
sess := db.NewSession(db.DefaultContext)
|
|
defer sess.Close()
|
|
if err := sess.Begin(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := updateIssueCols(sess, opts.Issue, "is_locked"); err != nil {
|
|
return err
|
|
}
|
|
|
|
opt := &CreateCommentOptions{
|
|
Doer: opts.Doer,
|
|
Issue: opts.Issue,
|
|
Repo: opts.Issue.Repo,
|
|
Type: commentType,
|
|
Content: opts.Reason,
|
|
}
|
|
if _, err := createComment(sess, opt); err != nil {
|
|
return err
|
|
}
|
|
|
|
return sess.Commit()
|
|
}
|