mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 08:21:11 +00:00 
			
		
		
		
	#1821 add actions for close and reopen issues
This commit is contained in:
		
					parent
					
						
							
								90fab0be6b
							
						
					
				
			
			
				commit
				
					
						912f7b51e9
					
				
			
		
					 12 changed files with 68 additions and 46 deletions
				
			
		| 
						 | 
				
			
			@ -3,7 +3,7 @@ Gogs - Go Git Service [
 | 
			
		||||
 | 
			
		||||
##### Current version: 0.8.41
 | 
			
		||||
##### Current version: 0.8.42
 | 
			
		||||
 | 
			
		||||
| Web | UI  | Preview  |
 | 
			
		||||
|:-------------:|:-------:|:-------:|
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ func checkVersion() {
 | 
			
		|||
		{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
 | 
			
		||||
		{"gopkg.in/ini.v1", ini.Version, "1.8.4"},
 | 
			
		||||
		{"gopkg.in/macaron.v1", macaron.Version, "0.8.0"},
 | 
			
		||||
		{"github.com/gogits/git-module", git.Version, "0.2.5"},
 | 
			
		||||
		{"github.com/gogits/git-module", git.Version, "0.2.6"},
 | 
			
		||||
		{"github.com/gogits/go-gogs-client", gogs.Version, "0.7.3"},
 | 
			
		||||
	}
 | 
			
		||||
	for _, c := range checkers {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1040,6 +1040,8 @@ create_repo = created repository <a href="%s">%s</a>
 | 
			
		|||
rename_repo = renamed repository from <code>%[1]s</code> to <a href="%[2]s">%[3]s</a>
 | 
			
		||||
commit_repo = pushed to <a href="%[1]s/src/%[2]s">%[3]s</a> at <a href="%[1]s">%[4]s</a>
 | 
			
		||||
create_issue = `opened issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
			
		||||
close_issue = `closed issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
			
		||||
reopen_issue = `reopened issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
			
		||||
create_pull_request = `created pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
			
		||||
comment_issue = `commented on issue <a href="%s/issues/%s">%s#%[2]s</a>`
 | 
			
		||||
merge_pull_request = `merged pull request <a href="%s/pulls/%s">%s#%[2]s</a>`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								gogs.go
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -17,7 +17,7 @@ import (
 | 
			
		|||
	"github.com/gogits/gogs/modules/setting"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const APP_VER = "0.8.41.0221"
 | 
			
		||||
const APP_VER = "0.8.42.0222"
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	runtime.GOMAXPROCS(runtime.NumCPU())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,17 +28,19 @@ import (
 | 
			
		|||
type ActionType int
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	CREATE_REPO         ActionType = iota + 1 // 1
 | 
			
		||||
	RENAME_REPO                               // 2
 | 
			
		||||
	STAR_REPO                                 // 3
 | 
			
		||||
	FOLLOW_REPO                               // 4
 | 
			
		||||
	COMMIT_REPO                               // 5
 | 
			
		||||
	CREATE_ISSUE                              // 6
 | 
			
		||||
	CREATE_PULL_REQUEST                       // 7
 | 
			
		||||
	TRANSFER_REPO                             // 8
 | 
			
		||||
	PUSH_TAG                                  // 9
 | 
			
		||||
	COMMENT_ISSUE                             // 10
 | 
			
		||||
	MERGE_PULL_REQUEST                        // 11
 | 
			
		||||
	ACTION_CREATE_REPO         ActionType = iota + 1 // 1
 | 
			
		||||
	ACTION_RENAME_REPO                               // 2
 | 
			
		||||
	ACTION_STAR_REPO                                 // 3
 | 
			
		||||
	ACTION_WATCH_REPO                                // 4
 | 
			
		||||
	ACTION_COMMIT_REPO                               // 5
 | 
			
		||||
	ACTION_CREATE_ISSUE                              // 6
 | 
			
		||||
	ACTION_CREATE_PULL_REQUEST                       // 7
 | 
			
		||||
	ACTION_TRANSFER_REPO                             // 8
 | 
			
		||||
	ACTION_PUSH_TAG                                  // 9
 | 
			
		||||
	ACTION_COMMENT_ISSUE                             // 10
 | 
			
		||||
	ACTION_MERGE_PULL_REQUEST                        // 11
 | 
			
		||||
	ACTION_CLOSE_ISSUE                               // 12
 | 
			
		||||
	ACTION_REOPEN_ISSUE                              // 13
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +180,7 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
 | 
			
		|||
		ActUserID:    u.Id,
 | 
			
		||||
		ActUserName:  u.Name,
 | 
			
		||||
		ActEmail:     u.Email,
 | 
			
		||||
		OpType:       CREATE_REPO,
 | 
			
		||||
		OpType:       ACTION_CREATE_REPO,
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
		RepoName:     repo.Name,
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +203,7 @@ func renameRepoAction(e Engine, actUser *User, oldRepoName string, repo *Reposit
 | 
			
		|||
		ActUserID:    actUser.Id,
 | 
			
		||||
		ActUserName:  actUser.Name,
 | 
			
		||||
		ActEmail:     actUser.Email,
 | 
			
		||||
		OpType:       RENAME_REPO,
 | 
			
		||||
		OpType:       ACTION_RENAME_REPO,
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
		RepoName:     repo.Name,
 | 
			
		||||
| 
						 | 
				
			
			@ -443,10 +445,10 @@ func CommitRepoAction(
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	isNewBranch := false
 | 
			
		||||
	opType := COMMIT_REPO
 | 
			
		||||
	opType := ACTION_COMMIT_REPO
 | 
			
		||||
	// Check it's tag push or branch.
 | 
			
		||||
	if strings.HasPrefix(refFullName, "refs/tags/") {
 | 
			
		||||
		opType = PUSH_TAG
 | 
			
		||||
		opType = ACTION_PUSH_TAG
 | 
			
		||||
		commit = &PushCommits{}
 | 
			
		||||
	} else {
 | 
			
		||||
		// if not the first commit, set the compareUrl
 | 
			
		||||
| 
						 | 
				
			
			@ -502,7 +504,7 @@ func CommitRepoAction(
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	switch opType {
 | 
			
		||||
	case COMMIT_REPO: // Push
 | 
			
		||||
	case ACTION_COMMIT_REPO: // Push
 | 
			
		||||
		p := &api.PushPayload{
 | 
			
		||||
			Ref:        refFullName,
 | 
			
		||||
			Before:     oldCommitID,
 | 
			
		||||
| 
						 | 
				
			
			@ -530,7 +532,7 @@ func CommitRepoAction(
 | 
			
		|||
			})
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	case PUSH_TAG: // Create
 | 
			
		||||
	case ACTION_PUSH_TAG: // Create
 | 
			
		||||
		return PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
 | 
			
		||||
			Ref:     refName,
 | 
			
		||||
			RefType: "tag",
 | 
			
		||||
| 
						 | 
				
			
			@ -547,7 +549,7 @@ func transferRepoAction(e Engine, actUser, oldOwner, newOwner *User, repo *Repos
 | 
			
		|||
		ActUserID:    actUser.Id,
 | 
			
		||||
		ActUserName:  actUser.Name,
 | 
			
		||||
		ActEmail:     actUser.Email,
 | 
			
		||||
		OpType:       TRANSFER_REPO,
 | 
			
		||||
		OpType:       ACTION_TRANSFER_REPO,
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: newOwner.Name,
 | 
			
		||||
		RepoName:     repo.Name,
 | 
			
		||||
| 
						 | 
				
			
			@ -578,7 +580,7 @@ func mergePullRequestAction(e Engine, actUser *User, repo *Repository, pull *Iss
 | 
			
		|||
		ActUserID:    actUser.Id,
 | 
			
		||||
		ActUserName:  actUser.Name,
 | 
			
		||||
		ActEmail:     actUser.Email,
 | 
			
		||||
		OpType:       MERGE_PULL_REQUEST,
 | 
			
		||||
		OpType:       ACTION_MERGE_PULL_REQUEST,
 | 
			
		||||
		Content:      fmt.Sprintf("%d|%s", pull.Index, pull.Name),
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -364,7 +364,7 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string)
 | 
			
		|||
		ActUserID:    issue.Poster.Id,
 | 
			
		||||
		ActUserName:  issue.Poster.Name,
 | 
			
		||||
		ActEmail:     issue.Poster.Email,
 | 
			
		||||
		OpType:       CREATE_ISSUE,
 | 
			
		||||
		OpType:       ACTION_CREATE_ISSUE,
 | 
			
		||||
		Content:      fmt.Sprintf("%d|%s", issue.Index, issue.Name),
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
| 
						 | 
				
			
			@ -1564,9 +1564,24 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
 | 
			
		|||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Compose comment action, could be plain comment, close or reopen issue.
 | 
			
		||||
	// This object will be used to notify watchers in the end of function.
 | 
			
		||||
	act := &Action{
 | 
			
		||||
		ActUserID:    u.Id,
 | 
			
		||||
		ActUserName:  u.Name,
 | 
			
		||||
		ActEmail:     u.Email,
 | 
			
		||||
		Content:      fmt.Sprintf("%d|%s", issue.Index, strings.Split(content, "\n")[0]),
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
		RepoName:     repo.Name,
 | 
			
		||||
		IsPrivate:    repo.IsPrivate,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Check comment type.
 | 
			
		||||
	switch cmtType {
 | 
			
		||||
	case COMMENT_TYPE_COMMENT:
 | 
			
		||||
		act.OpType = ACTION_COMMENT_ISSUE
 | 
			
		||||
 | 
			
		||||
		if _, err = e.Exec("UPDATE `issue` SET num_comments=num_comments+1 WHERE id=?", issue.ID); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -1593,23 +1608,9 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Notify watchers.
 | 
			
		||||
		act := &Action{
 | 
			
		||||
			ActUserID:    u.Id,
 | 
			
		||||
			ActUserName:  u.Name,
 | 
			
		||||
			ActEmail:     u.Email,
 | 
			
		||||
			OpType:       COMMENT_ISSUE,
 | 
			
		||||
			Content:      fmt.Sprintf("%d|%s", issue.Index, strings.Split(content, "\n")[0]),
 | 
			
		||||
			RepoID:       repo.ID,
 | 
			
		||||
			RepoUserName: repo.Owner.Name,
 | 
			
		||||
			RepoName:     repo.Name,
 | 
			
		||||
			IsPrivate:    repo.IsPrivate,
 | 
			
		||||
		}
 | 
			
		||||
		if err = notifyWatchers(e, act); err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	case COMMENT_TYPE_REOPEN:
 | 
			
		||||
		act.OpType = ACTION_REOPEN_ISSUE
 | 
			
		||||
 | 
			
		||||
		if issue.IsPull {
 | 
			
		||||
			_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", repo.ID)
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1619,6 +1620,8 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
 | 
			
		|||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	case COMMENT_TYPE_CLOSE:
 | 
			
		||||
		act.OpType = ACTION_CLOSE_ISSUE
 | 
			
		||||
 | 
			
		||||
		if issue.IsPull {
 | 
			
		||||
			_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", repo.ID)
 | 
			
		||||
		} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -1629,6 +1632,11 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Notify watchers for whatever action comes in.
 | 
			
		||||
	if err = notifyWatchers(e, act); err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("notifyWatchers: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return comment, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -330,7 +330,7 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str
 | 
			
		|||
		ActUserID:    pull.Poster.Id,
 | 
			
		||||
		ActUserName:  pull.Poster.Name,
 | 
			
		||||
		ActEmail:     pull.Poster.Email,
 | 
			
		||||
		OpType:       CREATE_PULL_REQUEST,
 | 
			
		||||
		OpType:       ACTION_CREATE_PULL_REQUEST,
 | 
			
		||||
		Content:      fmt.Sprintf("%d|%s", pull.Index, pull.Name),
 | 
			
		||||
		RepoID:       repo.ID,
 | 
			
		||||
		RepoUserName: repo.Owner.Name,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -229,11 +229,11 @@ type Actioner interface {
 | 
			
		|||
// and returns a icon class name.
 | 
			
		||||
func ActionIcon(opType int) string {
 | 
			
		||||
	switch opType {
 | 
			
		||||
	case 1, 8: // Create, transfer repository
 | 
			
		||||
	case 1, 8: // Create and transfer repository
 | 
			
		||||
		return "repo"
 | 
			
		||||
	case 5, 9: // Commit repository
 | 
			
		||||
		return "git-commit"
 | 
			
		||||
	case 6: // Create issue
 | 
			
		||||
	case 6, 13: // Create and reopen issue
 | 
			
		||||
		return "issue-opened"
 | 
			
		||||
	case 7: // New pull request
 | 
			
		||||
		return "git-pull-request"
 | 
			
		||||
| 
						 | 
				
			
			@ -241,6 +241,8 @@ func ActionIcon(opType int) string {
 | 
			
		|||
		return "comment"
 | 
			
		||||
	case 11: // Merge pull request
 | 
			
		||||
		return "git-merge"
 | 
			
		||||
	case 12: // Close issue
 | 
			
		||||
		return "issue-closed"
 | 
			
		||||
	default:
 | 
			
		||||
		return "invalid type"
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -918,7 +918,7 @@ func NewComment(ctx *middleware.Context, form auth.CreateCommentForm) {
 | 
			
		|||
				if err = issue.ChangeStatus(ctx.User, form.Status == "close"); err != nil {
 | 
			
		||||
					log.Error(4, "ChangeStatus: %v", err)
 | 
			
		||||
				} else {
 | 
			
		||||
					log.Trace("Issue[%d] status changed to closed: %v", issue.ID, issue.IsClosed)
 | 
			
		||||
					log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
0.8.41.0221
 | 
			
		||||
0.8.42.0222
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +31,12 @@
 | 
			
		|||
						{{else if eq .GetOpType 11}}
 | 
			
		||||
							{{ $index := index .GetIssueInfos 0}}
 | 
			
		||||
							{{$.i18n.Tr "action.merge_pull_request" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
			
		||||
						{{else if eq .GetOpType 12}}
 | 
			
		||||
							{{ $index := index .GetIssueInfos 0}}
 | 
			
		||||
							{{$.i18n.Tr "action.close_issue" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
			
		||||
						{{else if eq .GetOpType 13}}
 | 
			
		||||
							{{ $index := index .GetIssueInfos 0}}
 | 
			
		||||
							{{$.i18n.Tr "action.reopen_issue" .GetRepoLink $index .ShortRepoPath | Str2html}}
 | 
			
		||||
						{{end}}
 | 
			
		||||
					</p>
 | 
			
		||||
					{{if eq .GetOpType 5}}
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +61,8 @@
 | 
			
		|||
						<p class="text light grey">{{index .GetIssueInfos 1}}</p>
 | 
			
		||||
					{{else if eq .GetOpType 11}}
 | 
			
		||||
						<p class="text light grey">{{index .GetIssueInfos 1}}</p>
 | 
			
		||||
					{{else if (or (eq .GetOpType 12) (eq .GetOpType 13))}}
 | 
			
		||||
						<span class="text truncate issue title">{{.GetIssueTitle}}</span>
 | 
			
		||||
					{{end}}
 | 
			
		||||
					<p class="text italic light grey">{{TimeSince .GetCreate $.i18n.Lang}}</p>
 | 
			
		||||
				</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue