mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	The CheckRepoStats function missed the following counters: - label num_closed_issues & num_closed_pulls - milestone num_closed_issues & num_closed_pulls The update SQL statements for updating the repository num_closed_issues & num_closed_pulls fields were repeated in three functions (repo.CheckRepoStats, migrate.insertIssues and models.Issue.updateClosedNum) and were moved to a single helper. The UpdateRepoStats is implemented and called in the Finish migration method so that it happens immediately instead of wating for the CheckRepoStats to run. Signed-off-by: Loïc Dachary loic@dachary.org --- [source](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/34)
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 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"
 | |
| 	user_model "code.gitea.io/gitea/models/user"
 | |
| )
 | |
| 
 | |
| // IssueLockOptions defines options for locking and/or unlocking an issue/PR
 | |
| type IssueLockOptions struct {
 | |
| 	Doer   *user_model.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
 | |
| 	}
 | |
| 
 | |
| 	ctx, committer, err := db.TxContext()
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	defer committer.Close()
 | |
| 
 | |
| 	if err := updateIssueCols(ctx, 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(ctx, opt); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return committer.Commit()
 | |
| }
 |