| @@ -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)"` | |||||
| RepoId int64 `form:"repoid" binding:"Required"` | |||||
| MilestoneId int64 `form:"milestoneid" binding:"Required"` | |||||
| IssueName string `form:"title" binding:"Required;MaxSize(50)"` | |||||
| MilestoneId int64 `form:"milestoneid"` | |||||
| AssigneeId int64 `form:"assigneeid"` | AssigneeId int64 `form:"assigneeid"` | ||||
| Labels string `form:"labels"` | Labels string `form:"labels"` | ||||
| Content string `form:"content"` | Content string `form:"content"` | ||||
| @@ -27,9 +26,7 @@ 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", | |||||
| "RepoId": "Repository ID", | |||||
| "MilestoneId": "Milestone ID", | |||||
| "IssueName": "Issue name", | |||||
| } | } | ||||
| 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,7 +102,10 @@ 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 { | ||||
| return "/avatar/" + EncodeMd5(email) | |||||
| if Service.EnableCacheAvatar { | |||||
| return "/avatar/" + EncodeMd5(email) | |||||
| } | |||||
| return "http://1.gravatar.com/avatar/" + EncodeMd5(email) | |||||
| } | } | ||||
| // Seconds-based time units | // Seconds-based time units | ||||
| @@ -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 | ||||
| } | } | ||||
| if len(params["branchname"]) == 0 { | |||||
| params["branchname"] = "master" | |||||
| } | |||||
| ctx.Data["Branchname"] = params["branchname"] | |||||
| ctx.HTML(200, "issue/repo") | |||||
| ctx.HTML(200, "issue/list") | |||||
| } | } | ||||
| 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") | ||||
| } | } | ||||
| @@ -249,8 +249,8 @@ func runServ(k *cli.Context) { | |||||
| } | } | ||||
| } | } | ||||
| if refname == "" { | if refname == "" { | ||||
| println("No find any reference name:", b.String()) | |||||
| log.Error("No find any reference name: " + b.String()) | |||||
| println("Not found 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"> | ||||
| @@ -90,7 +90,7 @@ func runWeb(*cli.Context) { | |||||
| // Routers. | // Routers. | ||||
| m.Get("/", ignSignIn, routers.Home) | m.Get("/", ignSignIn, routers.Home) | ||||
| m.Get("/install",routers.Install) | |||||
| m.Get("/install", routers.Install) | |||||
| m.Get("/issues", reqSignIn, user.Issues) | m.Get("/issues", reqSignIn, user.Issues) | ||||
| m.Get("/pulls", reqSignIn, user.Pulls) | m.Get("/pulls", reqSignIn, user.Pulls) | ||||
| m.Get("/stars", reqSignIn, user.Stars) | m.Get("/stars", reqSignIn, user.Stars) | ||||
| @@ -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) | ||||