#1821 add actions for close and reopen issues
This commit is contained in:
parent
90fab0be6b
commit
912f7b51e9
|
@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
|
||||||
|
|
||||||
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)
|
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)
|
||||||
|
|
||||||
##### Current version: 0.8.41
|
##### Current version: 0.8.42
|
||||||
|
|
||||||
| Web | UI | Preview |
|
| Web | UI | Preview |
|
||||||
|:-------------:|:-------:|:-------:|
|
|:-------------:|:-------:|:-------:|
|
||||||
|
|
|
@ -88,7 +88,7 @@ func checkVersion() {
|
||||||
{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
|
{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"},
|
||||||
{"gopkg.in/ini.v1", ini.Version, "1.8.4"},
|
{"gopkg.in/ini.v1", ini.Version, "1.8.4"},
|
||||||
{"gopkg.in/macaron.v1", macaron.Version, "0.8.0"},
|
{"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"},
|
{"github.com/gogits/go-gogs-client", gogs.Version, "0.7.3"},
|
||||||
}
|
}
|
||||||
for _, c := range checkers {
|
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>
|
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>
|
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>`
|
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>`
|
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>`
|
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>`
|
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"
|
"github.com/gogits/gogs/modules/setting"
|
||||||
)
|
)
|
||||||
|
|
||||||
const APP_VER = "0.8.41.0221"
|
const APP_VER = "0.8.42.0222"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||||
|
|
|
@ -28,17 +28,19 @@ import (
|
||||||
type ActionType int
|
type ActionType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CREATE_REPO ActionType = iota + 1 // 1
|
ACTION_CREATE_REPO ActionType = iota + 1 // 1
|
||||||
RENAME_REPO // 2
|
ACTION_RENAME_REPO // 2
|
||||||
STAR_REPO // 3
|
ACTION_STAR_REPO // 3
|
||||||
FOLLOW_REPO // 4
|
ACTION_WATCH_REPO // 4
|
||||||
COMMIT_REPO // 5
|
ACTION_COMMIT_REPO // 5
|
||||||
CREATE_ISSUE // 6
|
ACTION_CREATE_ISSUE // 6
|
||||||
CREATE_PULL_REQUEST // 7
|
ACTION_CREATE_PULL_REQUEST // 7
|
||||||
TRANSFER_REPO // 8
|
ACTION_TRANSFER_REPO // 8
|
||||||
PUSH_TAG // 9
|
ACTION_PUSH_TAG // 9
|
||||||
COMMENT_ISSUE // 10
|
ACTION_COMMENT_ISSUE // 10
|
||||||
MERGE_PULL_REQUEST // 11
|
ACTION_MERGE_PULL_REQUEST // 11
|
||||||
|
ACTION_CLOSE_ISSUE // 12
|
||||||
|
ACTION_REOPEN_ISSUE // 13
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -178,7 +180,7 @@ func newRepoAction(e Engine, u *User, repo *Repository) (err error) {
|
||||||
ActUserID: u.Id,
|
ActUserID: u.Id,
|
||||||
ActUserName: u.Name,
|
ActUserName: u.Name,
|
||||||
ActEmail: u.Email,
|
ActEmail: u.Email,
|
||||||
OpType: CREATE_REPO,
|
OpType: ACTION_CREATE_REPO,
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: repo.Owner.Name,
|
RepoUserName: repo.Owner.Name,
|
||||||
RepoName: repo.Name,
|
RepoName: repo.Name,
|
||||||
|
@ -201,7 +203,7 @@ func renameRepoAction(e Engine, actUser *User, oldRepoName string, repo *Reposit
|
||||||
ActUserID: actUser.Id,
|
ActUserID: actUser.Id,
|
||||||
ActUserName: actUser.Name,
|
ActUserName: actUser.Name,
|
||||||
ActEmail: actUser.Email,
|
ActEmail: actUser.Email,
|
||||||
OpType: RENAME_REPO,
|
OpType: ACTION_RENAME_REPO,
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: repo.Owner.Name,
|
RepoUserName: repo.Owner.Name,
|
||||||
RepoName: repo.Name,
|
RepoName: repo.Name,
|
||||||
|
@ -443,10 +445,10 @@ func CommitRepoAction(
|
||||||
}
|
}
|
||||||
|
|
||||||
isNewBranch := false
|
isNewBranch := false
|
||||||
opType := COMMIT_REPO
|
opType := ACTION_COMMIT_REPO
|
||||||
// Check it's tag push or branch.
|
// Check it's tag push or branch.
|
||||||
if strings.HasPrefix(refFullName, "refs/tags/") {
|
if strings.HasPrefix(refFullName, "refs/tags/") {
|
||||||
opType = PUSH_TAG
|
opType = ACTION_PUSH_TAG
|
||||||
commit = &PushCommits{}
|
commit = &PushCommits{}
|
||||||
} else {
|
} else {
|
||||||
// if not the first commit, set the compareUrl
|
// if not the first commit, set the compareUrl
|
||||||
|
@ -502,7 +504,7 @@ func CommitRepoAction(
|
||||||
}
|
}
|
||||||
|
|
||||||
switch opType {
|
switch opType {
|
||||||
case COMMIT_REPO: // Push
|
case ACTION_COMMIT_REPO: // Push
|
||||||
p := &api.PushPayload{
|
p := &api.PushPayload{
|
||||||
Ref: refFullName,
|
Ref: refFullName,
|
||||||
Before: oldCommitID,
|
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{
|
return PrepareWebhooks(repo, HOOK_EVENT_CREATE, &api.CreatePayload{
|
||||||
Ref: refName,
|
Ref: refName,
|
||||||
RefType: "tag",
|
RefType: "tag",
|
||||||
|
@ -547,7 +549,7 @@ func transferRepoAction(e Engine, actUser, oldOwner, newOwner *User, repo *Repos
|
||||||
ActUserID: actUser.Id,
|
ActUserID: actUser.Id,
|
||||||
ActUserName: actUser.Name,
|
ActUserName: actUser.Name,
|
||||||
ActEmail: actUser.Email,
|
ActEmail: actUser.Email,
|
||||||
OpType: TRANSFER_REPO,
|
OpType: ACTION_TRANSFER_REPO,
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: newOwner.Name,
|
RepoUserName: newOwner.Name,
|
||||||
RepoName: repo.Name,
|
RepoName: repo.Name,
|
||||||
|
@ -578,7 +580,7 @@ func mergePullRequestAction(e Engine, actUser *User, repo *Repository, pull *Iss
|
||||||
ActUserID: actUser.Id,
|
ActUserID: actUser.Id,
|
||||||
ActUserName: actUser.Name,
|
ActUserName: actUser.Name,
|
||||||
ActEmail: actUser.Email,
|
ActEmail: actUser.Email,
|
||||||
OpType: MERGE_PULL_REQUEST,
|
OpType: ACTION_MERGE_PULL_REQUEST,
|
||||||
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
|
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: repo.Owner.Name,
|
RepoUserName: repo.Owner.Name,
|
||||||
|
|
|
@ -364,7 +364,7 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string)
|
||||||
ActUserID: issue.Poster.Id,
|
ActUserID: issue.Poster.Id,
|
||||||
ActUserName: issue.Poster.Name,
|
ActUserName: issue.Poster.Name,
|
||||||
ActEmail: issue.Poster.Email,
|
ActEmail: issue.Poster.Email,
|
||||||
OpType: CREATE_ISSUE,
|
OpType: ACTION_CREATE_ISSUE,
|
||||||
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Name),
|
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Name),
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: repo.Owner.Name,
|
RepoUserName: repo.Owner.Name,
|
||||||
|
@ -1564,9 +1564,24 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
|
||||||
return nil, err
|
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.
|
// Check comment type.
|
||||||
switch cmtType {
|
switch cmtType {
|
||||||
case COMMENT_TYPE_COMMENT:
|
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 {
|
if _, err = e.Exec("UPDATE `issue` SET num_comments=num_comments+1 WHERE id=?", issue.ID); err != nil {
|
||||||
return nil, err
|
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:
|
case COMMENT_TYPE_REOPEN:
|
||||||
|
act.OpType = ACTION_REOPEN_ISSUE
|
||||||
|
|
||||||
if issue.IsPull {
|
if issue.IsPull {
|
||||||
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", repo.ID)
|
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls-1 WHERE id=?", repo.ID)
|
||||||
} else {
|
} else {
|
||||||
|
@ -1619,6 +1620,8 @@ func createComment(e *xorm.Session, u *User, repo *Repository, issue *Issue, com
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
case COMMENT_TYPE_CLOSE:
|
case COMMENT_TYPE_CLOSE:
|
||||||
|
act.OpType = ACTION_CLOSE_ISSUE
|
||||||
|
|
||||||
if issue.IsPull {
|
if issue.IsPull {
|
||||||
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", repo.ID)
|
_, err = e.Exec("UPDATE `repository` SET num_closed_pulls=num_closed_pulls+1 WHERE id=?", repo.ID)
|
||||||
} else {
|
} 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
|
return comment, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -330,7 +330,7 @@ func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []str
|
||||||
ActUserID: pull.Poster.Id,
|
ActUserID: pull.Poster.Id,
|
||||||
ActUserName: pull.Poster.Name,
|
ActUserName: pull.Poster.Name,
|
||||||
ActEmail: pull.Poster.Email,
|
ActEmail: pull.Poster.Email,
|
||||||
OpType: CREATE_PULL_REQUEST,
|
OpType: ACTION_CREATE_PULL_REQUEST,
|
||||||
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
|
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Name),
|
||||||
RepoID: repo.ID,
|
RepoID: repo.ID,
|
||||||
RepoUserName: repo.Owner.Name,
|
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.
|
// and returns a icon class name.
|
||||||
func ActionIcon(opType int) string {
|
func ActionIcon(opType int) string {
|
||||||
switch opType {
|
switch opType {
|
||||||
case 1, 8: // Create, transfer repository
|
case 1, 8: // Create and transfer repository
|
||||||
return "repo"
|
return "repo"
|
||||||
case 5, 9: // Commit repository
|
case 5, 9: // Commit repository
|
||||||
return "git-commit"
|
return "git-commit"
|
||||||
case 6: // Create issue
|
case 6, 13: // Create and reopen issue
|
||||||
return "issue-opened"
|
return "issue-opened"
|
||||||
case 7: // New pull request
|
case 7: // New pull request
|
||||||
return "git-pull-request"
|
return "git-pull-request"
|
||||||
|
@ -241,6 +241,8 @@ func ActionIcon(opType int) string {
|
||||||
return "comment"
|
return "comment"
|
||||||
case 11: // Merge pull request
|
case 11: // Merge pull request
|
||||||
return "git-merge"
|
return "git-merge"
|
||||||
|
case 12: // Close issue
|
||||||
|
return "issue-closed"
|
||||||
default:
|
default:
|
||||||
return "invalid type"
|
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 {
|
if err = issue.ChangeStatus(ctx.User, form.Status == "close"); err != nil {
|
||||||
log.Error(4, "ChangeStatus: %v", err)
|
log.Error(4, "ChangeStatus: %v", err)
|
||||||
} else {
|
} 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}}
|
{{else if eq .GetOpType 11}}
|
||||||
{{ $index := index .GetIssueInfos 0}}
|
{{ $index := index .GetIssueInfos 0}}
|
||||||
{{$.i18n.Tr "action.merge_pull_request" .GetRepoLink $index .ShortRepoPath | Str2html}}
|
{{$.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}}
|
{{end}}
|
||||||
</p>
|
</p>
|
||||||
{{if eq .GetOpType 5}}
|
{{if eq .GetOpType 5}}
|
||||||
|
@ -55,6 +61,8 @@
|
||||||
<p class="text light grey">{{index .GetIssueInfos 1}}</p>
|
<p class="text light grey">{{index .GetIssueInfos 1}}</p>
|
||||||
{{else if eq .GetOpType 11}}
|
{{else if eq .GetOpType 11}}
|
||||||
<p class="text light grey">{{index .GetIssueInfos 1}}</p>
|
<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}}
|
{{end}}
|
||||||
<p class="text italic light grey">{{TimeSince .GetCreate $.i18n.Lang}}</p>
|
<p class="text italic light grey">{{TimeSince .GetCreate $.i18n.Lang}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue