Added create issue
This commit is contained in:
parent
23d103c721
commit
2fa8d0c8dd
14 changed files with 34 additions and 52 deletions
2
gogs.go
2
gogs.go
|
@ -19,7 +19,7 @@ import (
|
||||||
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
|
// Test that go1.2 tag above is included in builds. main.go refers to this definition.
|
||||||
const go12tag = true
|
const go12tag = true
|
||||||
|
|
||||||
const APP_VER = "0.1.7.0324"
|
const APP_VER = "0.1.7.0325"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
base.AppVer = APP_VER
|
base.AppVer = APP_VER
|
||||||
|
|
|
@ -17,9 +17,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateIssueForm struct {
|
type CreateIssueForm struct {
|
||||||
IssueName string `form:"name" binding:"Required;MaxSize(50)"`
|
IssueName string `form:"title" binding:"Required;MaxSize(50)"`
|
||||||
RepoId int64 `form:"repoid" binding:"Required"`
|
MilestoneId int64 `form:"milestoneid"`
|
||||||
MilestoneId int64 `form:"milestoneid" binding:"Required"`
|
|
||||||
AssigneeId int64 `form:"assigneeid"`
|
AssigneeId int64 `form:"assigneeid"`
|
||||||
Labels string `form:"labels"`
|
Labels string `form:"labels"`
|
||||||
Content string `form:"content"`
|
Content string `form:"content"`
|
||||||
|
@ -28,8 +27,6 @@ type CreateIssueForm struct {
|
||||||
func (f *CreateIssueForm) Name(field string) string {
|
func (f *CreateIssueForm) Name(field string) string {
|
||||||
names := map[string]string{
|
names := map[string]string{
|
||||||
"IssueName": "Issue name",
|
"IssueName": "Issue name",
|
||||||
"RepoId": "Repository ID",
|
|
||||||
"MilestoneId": "Milestone ID",
|
|
||||||
}
|
}
|
||||||
return names[field]
|
return names[field]
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,9 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gogits/gogs/modules/log"
|
|
||||||
"github.com/nfnt/resize"
|
"github.com/nfnt/resize"
|
||||||
|
|
||||||
|
"github.com/gogits/gogs/modules/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -102,8 +102,11 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string
|
||||||
|
|
||||||
// AvatarLink returns avatar link by given e-mail.
|
// AvatarLink returns avatar link by given e-mail.
|
||||||
func AvatarLink(email string) string {
|
func AvatarLink(email string) string {
|
||||||
|
if Service.EnableCacheAvatar {
|
||||||
return "/avatar/" + EncodeMd5(email)
|
return "/avatar/" + EncodeMd5(email)
|
||||||
}
|
}
|
||||||
|
return "http://1.gravatar.com/avatar/" + EncodeMd5(email)
|
||||||
|
}
|
||||||
|
|
||||||
// Seconds-based time units
|
// Seconds-based time units
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -76,6 +76,11 @@ func RepoAssignment(redirect bool) martini.Handler {
|
||||||
ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName)
|
ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName)
|
||||||
ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s://%s/%s/%s.git", scheme, base.Domain, user.LowerName, repo.LowerName)
|
ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s://%s/%s/%s.git", scheme, base.Domain, user.LowerName, repo.LowerName)
|
||||||
|
|
||||||
|
if len(params["branchname"]) == 0 {
|
||||||
|
params["branchname"] = "master"
|
||||||
|
}
|
||||||
|
ctx.Data["Branchname"] = params["branchname"]
|
||||||
|
|
||||||
ctx.Data["IsRepositoryValid"] = true
|
ctx.Data["IsRepositoryValid"] = true
|
||||||
ctx.Data["Repository"] = repo
|
ctx.Data["Repository"] = repo
|
||||||
ctx.Data["Owner"] = user
|
ctx.Data["Owner"] = user
|
||||||
|
|
|
@ -26,11 +26,6 @@ func Branches(ctx *middleware.Context, params martini.Params) {
|
||||||
|
|
||||||
ctx.Data["Username"] = params["username"]
|
ctx.Data["Username"] = params["username"]
|
||||||
ctx.Data["Reponame"] = params["reponame"]
|
ctx.Data["Reponame"] = params["reponame"]
|
||||||
|
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
ctx.Data["Branchname"] = params["branchname"]
|
|
||||||
ctx.Data["Branches"] = brs
|
ctx.Data["Branches"] = brs
|
||||||
ctx.Data["IsRepoToolbarBranches"] = true
|
ctx.Data["IsRepoToolbarBranches"] = true
|
||||||
|
|
||||||
|
|
|
@ -30,12 +30,7 @@ func Issues(ctx *middleware.Context, params martini.Params) {
|
||||||
ctx.Handle(200, "issue.Issues: %v", err)
|
ctx.Handle(200, "issue.Issues: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
ctx.HTML(200, "issue/list")
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
ctx.Data["Branchname"] = params["branchname"]
|
|
||||||
ctx.HTML(200, "issue/repo")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) {
|
func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) {
|
||||||
|
@ -57,10 +52,10 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
issue, err := models.CreateIssue(ctx.User.Id, form.RepoId, form.MilestoneId, form.AssigneeId,
|
issue, err := models.CreateIssue(ctx.User.Id, ctx.Repo.Repository.Id, form.MilestoneId, form.AssigneeId,
|
||||||
form.IssueName, form.Labels, form.Content, false)
|
form.IssueName, form.Labels, form.Content, false)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Trace("%s Issue created: %d", form.RepoId, issue.Id)
|
log.Trace("%d Issue created: %d", ctx.Repo.Repository.Id, issue.Id)
|
||||||
ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index))
|
ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,5 @@ import (
|
||||||
|
|
||||||
func Pulls(ctx *middleware.Context, params martini.Params) {
|
func Pulls(ctx *middleware.Context, params martini.Params) {
|
||||||
ctx.Data["IsRepoToolbarPulls"] = true
|
ctx.Data["IsRepoToolbarPulls"] = true
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.Data["Branchname"] = params["branchname"]
|
|
||||||
ctx.HTML(200, "repo/pulls")
|
ctx.HTML(200, "repo/pulls")
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,10 +57,6 @@ func Single(ctx *middleware.Context, params martini.Params) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get tree path
|
// Get tree path
|
||||||
treename := params["_1"]
|
treename := params["_1"]
|
||||||
|
|
||||||
|
@ -177,7 +173,6 @@ func Single(ctx *middleware.Context, params martini.Params) {
|
||||||
|
|
||||||
ctx.Data["Username"] = params["username"]
|
ctx.Data["Username"] = params["username"]
|
||||||
ctx.Data["Reponame"] = params["reponame"]
|
ctx.Data["Reponame"] = params["reponame"]
|
||||||
ctx.Data["Branchname"] = params["branchname"]
|
|
||||||
|
|
||||||
var treenames []string
|
var treenames []string
|
||||||
Paths := make([]string, 0)
|
Paths := make([]string, 0)
|
||||||
|
@ -216,10 +211,6 @@ func SingleDownload(ctx *middleware.Context, params martini.Params) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get tree path
|
// Get tree path
|
||||||
treename := params["_1"]
|
treename := params["_1"]
|
||||||
|
|
||||||
|
@ -290,11 +281,6 @@ func Setting(ctx *middleware.Context, params martini.Params) {
|
||||||
title = t
|
title = t
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(params["branchname"]) == 0 {
|
|
||||||
params["branchname"] = "master"
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.Data["Branchname"] = params["branchname"]
|
|
||||||
ctx.Data["Title"] = title + " - settings"
|
ctx.Data["Title"] = title + " - settings"
|
||||||
ctx.HTML(200, "repo/setting")
|
ctx.HTML(200, "repo/setting")
|
||||||
}
|
}
|
||||||
|
|
5
serve.go
5
serve.go
|
@ -249,8 +249,8 @@ func runServ(k *cli.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if refname == "" {
|
if refname == "" {
|
||||||
println("No find any reference name:", b.String())
|
println("Not found any reference name:", b.String())
|
||||||
log.Error("No find any reference name: " + b.String())
|
log.Error("Not found any reference name: " + b.String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +267,6 @@ func runServ(k *cli.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if ref, ok = refs[refname]; !ok {
|
if ref, ok = refs[refname]; !ok {
|
||||||
log.Error("unknow reference name -", refname, "-", b.String())
|
|
||||||
log.Error("unknow reference name -", refname, "-", b.String())
|
log.Error("unknow reference name -", refname, "-", b.String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,14 @@
|
||||||
{{template "repo/toolbar" .}}
|
{{template "repo/toolbar" .}}
|
||||||
<div id="body" class="container">
|
<div id="body" class="container">
|
||||||
<div id="issue">
|
<div id="issue">
|
||||||
<form class="form" action="#" method="post" id="issue-create-form">
|
<form class="form" action="/{{.RepositoryLink}}/issues/new" method="post" id="issue-create-form">
|
||||||
|
{{.CsrfTokenHtml}}
|
||||||
<div class="col-md-1">
|
<div class="col-md-1">
|
||||||
<img class="avatar" src="http://tp2.sinaimg.cn/5068084885/50/40050297589/1" alt=""/>
|
<img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-8 panel panel-default">
|
<div class="col-md-8 panel panel-default">
|
||||||
<div class="form-group panel-body">
|
<div class="form-group panel-body">
|
||||||
<input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title"/>
|
<input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title" value="{{.title}}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group panel-body">
|
<div class="form-group panel-body">
|
||||||
<div class="md-help pull-right"><!-- todo help link -->
|
<div class="md-help pull-right"><!-- todo help link -->
|
||||||
|
@ -23,7 +24,7 @@
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div class="tab-pane" id="issue-textarea">
|
<div class="tab-pane" id="issue-textarea">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content"></textarea>
|
<textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content">{{.content}}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane" id="issue-preview">preview</div>
|
<div class="tab-pane" id="issue-preview">preview</div>
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
<a class="btn btn-default issue-close" href="#">Close 128</a>
|
<a class="btn btn-default issue-close" href="#">Close 128</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="issues list-group">
|
||||||
|
{{range .Issues}}
|
||||||
|
<div class="list-group-item issue-item" id="{{.Id}}"></div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
<div class="issues list-group">
|
<div class="issues list-group">
|
||||||
<div class="list-group-item unread issue-item" id="issue-id">
|
<div class="list-group-item unread issue-item" id="issue-id">
|
||||||
<span class="number pull-right">#123</span>
|
<span class="number pull-right">#123</span>
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-7">
|
<div class="col-md-7">
|
||||||
<h3 class="name"><i class="fa fa-book fa-lg"></i><a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> / {{.Repository.Name}}</h3>
|
<h3 class="name"><i class="fa fa-book fa-lg"></i><a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> / <a href="/{{.Owner.Name}}/{{.Repository.Name}}">{{.Repository.Name}}</a></h3>
|
||||||
<p class="desc">{{.Repository.Description}}{{if .Repository.Website}} <a href="{{.Repository.Website}}">{{.Repository.Website}}</a>{{end}}</p>
|
<p class="desc">{{.Repository.Description}}{{if .Repository.Website}} <a href="{{.Repository.Website}}">{{.Repository.Website}}</a>{{end}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-5 actions text-right clone-group-btn">
|
<div class="col-md-5 actions text-right clone-group-btn">
|
||||||
|
|
4
web.go
4
web.go
|
@ -142,13 +142,13 @@ func runWeb(*cli.Context) {
|
||||||
r.Post("/settings", repo.SettingPost)
|
r.Post("/settings", repo.SettingPost)
|
||||||
r.Get("/settings", repo.Setting)
|
r.Get("/settings", repo.Setting)
|
||||||
r.Get("/action/:action", repo.Action)
|
r.Get("/action/:action", repo.Action)
|
||||||
|
r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue)
|
||||||
|
r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue)
|
||||||
}, reqSignIn, middleware.RepoAssignment(true))
|
}, reqSignIn, middleware.RepoAssignment(true))
|
||||||
m.Group("/:username/:reponame", func(r martini.Router) {
|
m.Group("/:username/:reponame", func(r martini.Router) {
|
||||||
r.Get("/commits/:branchname", repo.Commits)
|
r.Get("/commits/:branchname", repo.Commits)
|
||||||
r.Get("/issues", repo.Issues)
|
r.Get("/issues", repo.Issues)
|
||||||
r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue)
|
|
||||||
r.Get("/issues/:index", repo.ViewIssue)
|
r.Get("/issues/:index", repo.ViewIssue)
|
||||||
r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue)
|
|
||||||
r.Get("/pulls", repo.Pulls)
|
r.Get("/pulls", repo.Pulls)
|
||||||
r.Get("/branches", repo.Branches)
|
r.Get("/branches", repo.Branches)
|
||||||
r.Get("/src/:branchname", repo.Single)
|
r.Get("/src/:branchname", repo.Single)
|
||||||
|
|
Reference in a new issue