![](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 tip version: 0.9.60 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | |||||
##### Current tip version: 0.9.61 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | |||||
| Web | UI | Preview | | | Web | UI | Preview | | ||||
|:-------------:|:-------:|:-------:| | |:-------------:|:-------:|:-------:| |
m.Get("/:username/:reponame/action/:action", reqSignIn, context.RepoAssignment(), repo.Action) | m.Get("/:username/:reponame/action/:action", reqSignIn, context.RepoAssignment(), repo.Action) | ||||
m.Group("/:username/:reponame", func() { | m.Group("/:username/:reponame", func() { | ||||
m.Group("/issues", func() { | m.Group("/issues", func() { | ||||
m.Combo("/new", repo.MustEnableIssues).Get(context.RepoRef(), repo.NewIssue). | |||||
m.Combo("/new").Get(context.RepoRef(), repo.NewIssue). | |||||
Post(bindIgnErr(auth.CreateIssueForm{}), repo.NewIssuePost) | Post(bindIgnErr(auth.CreateIssueForm{}), repo.NewIssuePost) | ||||
m.Combo("/:index/comments").Post(bindIgnErr(auth.CreateCommentForm{}), repo.NewComment) | m.Combo("/:index/comments").Post(bindIgnErr(auth.CreateCommentForm{}), repo.NewComment) | ||||
m.Post("/title", repo.UpdateIssueTitle) | m.Post("/title", repo.UpdateIssueTitle) | ||||
m.Post("/content", repo.UpdateIssueContent) | m.Post("/content", repo.UpdateIssueContent) | ||||
}) | }) | ||||
}) | |||||
}, repo.MustEnableIssues) | |||||
m.Group("/comments/:id", func() { | m.Group("/comments/:id", func() { | ||||
m.Post("", repo.UpdateCommentContent) | m.Post("", repo.UpdateCommentContent) | ||||
m.Post("/delete", repo.DeleteComment) | m.Post("/delete", repo.DeleteComment) | ||||
m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) | m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) | ||||
m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) | m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) | ||||
m.Post("/delete", repo.DeleteLabel) | m.Post("/delete", repo.DeleteLabel) | ||||
}, reqRepoWriter, context.RepoRef()) | |||||
}, repo.MustEnableIssues, reqRepoWriter, context.RepoRef()) | |||||
m.Group("/milestones", func() { | m.Group("/milestones", func() { | ||||
m.Combo("/new").Get(repo.NewMilestone). | m.Combo("/new").Get(repo.NewMilestone). | ||||
Post(bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) | Post(bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) | ||||
m.Post("/:id/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.EditMilestonePost) | m.Post("/:id/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.EditMilestonePost) | ||||
m.Get("/:id/:action", repo.ChangeMilestonStatus) | m.Get("/:id/:action", repo.ChangeMilestonStatus) | ||||
m.Post("/delete", repo.DeleteMilestone) | m.Post("/delete", repo.DeleteMilestone) | ||||
}, reqRepoWriter, context.RepoRef()) | |||||
}, repo.MustEnableIssues, reqRepoWriter, context.RepoRef()) | |||||
m.Group("/releases", func() { | m.Group("/releases", func() { | ||||
m.Get("/new", repo.NewRelease) | m.Get("/new", repo.NewRelease) |
"github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
) | ) | ||||
const APP_VER = "0.9.60.0803" | |||||
const APP_VER = "0.9.61.0804" | |||||
func init() { | func init() { | ||||
runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) |
} | } | ||||
} | } | ||||
func MustEnableIssues(ctx *context.APIContext) { | |||||
if !ctx.Repo.Repository.EnableIssues || ctx.Repo.Repository.EnableExternalTracker { | |||||
ctx.Status(404) | |||||
return | |||||
} | |||||
} | |||||
// RegisterRoutes registers all v1 APIs routes to web application. | // RegisterRoutes registers all v1 APIs routes to web application. | ||||
// FIXME: custom form error response | // FIXME: custom form error response | ||||
func RegisterRoutes(m *macaron.Macaron) { | func RegisterRoutes(m *macaron.Macaron) { | ||||
}) | }) | ||||
}) | }) | ||||
}) | |||||
}, MustEnableIssues) | |||||
m.Group("/labels", func() { | m.Group("/labels", func() { | ||||
m.Combo("").Get(repo.ListLabels). | m.Combo("").Get(repo.ListLabels). | ||||
Post(bind(api.CreateLabelOption{}), repo.CreateLabel) | Post(bind(api.CreateLabelOption{}), repo.CreateLabel) |
) | ) | ||||
func MustEnableIssues(ctx *context.Context) { | func MustEnableIssues(ctx *context.Context) { | ||||
if !ctx.Repo.Repository.EnableIssues { | |||||
if !ctx.Repo.Repository.EnableIssues || ctx.Repo.Repository.EnableExternalTracker { | |||||
ctx.Handle(404, "MustEnableIssues", nil) | ctx.Handle(404, "MustEnableIssues", nil) | ||||
return | return | ||||
} | } |
0.9.60.0803 | |||||
0.9.61.0804 |
<a class="{{if .PageIsViewCode}}active{{end}} item" href="{{.RepoLink}}"> | <a class="{{if .PageIsViewCode}}active{{end}} item" href="{{.RepoLink}}"> | ||||
<i class="octicon octicon-code"></i> {{.i18n.Tr "repo.code"}} | <i class="octicon octicon-code"></i> {{.i18n.Tr "repo.code"}} | ||||
</a> | </a> | ||||
{{if .Repository.EnableIssues}} | |||||
{{if and .Repository.EnableIssues (not .Repository.EnableExternalTracker)}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues"> | <a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues"> | ||||
<i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues"}} <span class="ui {{if not .Repository.NumOpenIssues}}gray{{else}}blue{{end}} small label">{{.Repository.NumOpenIssues}}</span> | <i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues"}} <span class="ui {{if not .Repository.NumOpenIssues}}gray{{else}}blue{{end}} small label">{{.Repository.NumOpenIssues}}</span> | ||||
</a> | </a> |