diff options
Diffstat (limited to 'routers')
-rw-r--r-- | routers/repo/repo.go | 54 | ||||
-rw-r--r-- | routers/repo/single.go | 77 | ||||
-rw-r--r-- | routers/user/user.go | 2 |
3 files changed, 94 insertions, 39 deletions
diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 116c199b..edd88627 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -20,49 +20,35 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) { return } - if ctx.HasError() { - ctx.Render.HTML(200, "repo/create", ctx.Data) + if _, err := models.CreateRepository(ctx.User, + form.RepoName, form.Description, form.Language, form.License, + form.Visibility == "private", form.InitReadme == "on"); err == nil { + ctx.Render.Redirect("/"+ctx.User.Name+"/"+form.RepoName, 302) return - } - - // TODO: access check - - user, err := models.GetUserById(form.UserId) - if err != nil { - if err.Error() == models.ErrUserNotExist.Error() { - ctx.RenderWithErr("User does not exist", "repo/create", &form) - return - } - } - - if err == nil { - if _, err = models.CreateRepository(user, - form.RepoName, form.Description, form.Language, form.License, - form.Visibility == "private", form.InitReadme == "on"); err == nil { - ctx.Render.Redirect("/"+user.Name+"/"+form.RepoName, 302) - return - } - } - - if err.Error() == models.ErrRepoAlreadyExist.Error() { + } else if err == models.ErrRepoAlreadyExist { ctx.RenderWithErr("Repository name has already been used", "repo/create", &form) return } - - ctx.Handle(200, "repo.Create", err) } -func Delete(ctx *middleware.Context, form auth.DeleteRepoForm) { - ctx.Data["Title"] = "Delete repository" - - if ctx.Req.Method == "GET" { - ctx.Render.HTML(200, "repo/delete", ctx.Data) +func SettingPost(ctx *middleware.Context) { + if !ctx.Repo.IsOwner { + ctx.Render.Error(404) return } - if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil { - ctx.Handle(200, "repo.Delete", err) - return + switch ctx.Query("action") { + case "delete": + if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") { + ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct." + ctx.Render.HTML(200, "repo/setting", ctx.Data) + return + } + + if err := models.DeleteRepository(ctx.User.Id, ctx.Repo.Repository.Id, ctx.User.LowerName); err != nil { + ctx.Handle(200, "repo.Delete", err) + return + } } ctx.Render.Redirect("/", 302) diff --git a/routers/repo/single.go b/routers/repo/single.go index 6bf03ca2..f47a2f7b 100644 --- a/routers/repo/single.go +++ b/routers/repo/single.go @@ -9,10 +9,33 @@ import ( "github.com/codegangsta/martini" + "github.com/gogits/git" + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/middleware" ) +func Branches(ctx *middleware.Context, params martini.Params) { + if !ctx.Repo.IsValid { + return + } + + ctx.Data["Username"] = params["username"] + ctx.Data["Reponame"] = params["reponame"] + + brs, err := models.GetBranches(params["username"], params["reponame"]) + if err != nil { + ctx.Handle(200, "repo.Branches", err) + return + } + + ctx.Data["Branches"] = brs + ctx.Data["IsRepoToolbarBranches"] = true + + ctx.Render.HTML(200, "repo/branches", ctx.Data) +} + func Single(ctx *middleware.Context, params martini.Params) { if !ctx.Repo.IsValid { return @@ -22,17 +45,28 @@ func Single(ctx *middleware.Context, params martini.Params) { params["branchname"] = "master" } + // Get tree path treename := params["_1"] + + // Directory and file list. files, err := models.GetReposFiles(params["username"], params["reponame"], params["branchname"], treename) if err != nil { - ctx.Handle(200, "repo.Single", err) + ctx.Render.Error(404) return } ctx.Data["Username"] = params["username"] ctx.Data["Reponame"] = params["reponame"] ctx.Data["Branchname"] = params["branchname"] + // Branches. + brs, err := models.GetBranches(params["username"], params["reponame"]) + if err != nil { + ctx.Render.Error(404) + return + } + ctx.Data["Branches"] = brs + var treenames []string Paths := make([]string, 0) @@ -43,16 +77,52 @@ func Single(ctx *middleware.Context, params martini.Params) { } } + // Get latest commit according username and repo name + commit, err := models.GetLastestCommit(params["username"], params["reponame"]) + if err != nil { + ctx.Render.Error(404) + return + } + ctx.Data["LatestCommit"] = commit + + var readmeFile *models.RepoFile + + for _, f := range files { + if !f.IsFile() { + continue + } + + if len(f.Name) < 6 { + continue + } + + if strings.ToLower(f.Name[:6]) == "readme" { + readmeFile = f + break + } + } + + if readmeFile != nil { + // if file large than 1M not show it + if readmeFile.Size > 1024*1024 || readmeFile.Filemode != git.FileModeBlob { + ctx.Data["FileIsLarge"] = true + } else if blob, err := readmeFile.LookupBlob(); err != nil { + ctx.Data["FileIsLarge"] = true + } else { + ctx.Data["ReadmeContent"] = string(base.RenderMarkdown(blob.Contents())) + } + } + ctx.Data["Paths"] = Paths ctx.Data["Treenames"] = treenames ctx.Data["IsRepoToolbarSource"] = true - ctx.Data["IsRepositoryOwner"] = strings.ToLower(params["username"]) == ctx.User.LowerName ctx.Data["Files"] = files ctx.Render.HTML(200, "repo/single", ctx.Data) } func Setting(ctx *middleware.Context, params martini.Params) { - if !ctx.Repo.IsValid { + if !ctx.Repo.IsOwner { + ctx.Render.Error(404) return } @@ -63,7 +133,6 @@ func Setting(ctx *middleware.Context, params martini.Params) { ctx.Data["Title"] = title + " - settings" ctx.Data["IsRepoToolbarSetting"] = true - ctx.Data["IsRepositoryOwner"] = strings.ToLower(params["username"]) == ctx.User.LowerName ctx.Render.HTML(200, "repo/setting", ctx.Data) } diff --git a/routers/user/user.go b/routers/user/user.go index 0ff5058d..c43cf84a 100644 --- a/routers/user/user.go +++ b/routers/user/user.go @@ -195,7 +195,7 @@ func Feeds(ctx *middleware.Context, form auth.FeedsForm) { feeds := make([]string, len(actions)) for i := range actions { feeds[i] = fmt.Sprintf(feedTpl, base.ActionIcon(actions[i].OpType), - base.TimeSince(actions[i].Created), base.ActionDesc(actions[i])) + base.TimeSince(actions[i].Created), base.ActionDesc(actions[i], ctx.User.AvatarLink())) } ctx.Render.JSON(200, &feeds) } |