diff options
author | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-03-16 01:22:27 +0800 |
---|---|---|
committer | ᴜɴᴋɴᴡᴏɴ <u@gogs.io> | 2020-03-16 01:22:27 +0800 |
commit | 9e9ca66467116e9079a2639c00e9e623aca23015 (patch) | |
tree | dacdef5392608ff7107e4dd498959d4899e13e54 /internal/route/repo | |
parent | 82ff0c5852f29daa5f95d965fd50665581e7ea3c (diff) |
refactor: unify error handling in routing layer
Diffstat (limited to 'internal/route/repo')
-rw-r--r-- | internal/route/repo/branch.go | 10 | ||||
-rw-r--r-- | internal/route/repo/commit.go | 22 | ||||
-rw-r--r-- | internal/route/repo/download.go | 4 | ||||
-rw-r--r-- | internal/route/repo/editor.go | 36 | ||||
-rw-r--r-- | internal/route/repo/http.go | 21 | ||||
-rw-r--r-- | internal/route/repo/issue.go | 179 | ||||
-rw-r--r-- | internal/route/repo/pull.go | 84 | ||||
-rw-r--r-- | internal/route/repo/release.go | 50 | ||||
-rw-r--r-- | internal/route/repo/repo.go | 41 | ||||
-rw-r--r-- | internal/route/repo/setting.go | 96 | ||||
-rw-r--r-- | internal/route/repo/view.go | 30 | ||||
-rw-r--r-- | internal/route/repo/webhook.go | 120 | ||||
-rw-r--r-- | internal/route/repo/wiki.go | 44 |
13 files changed, 351 insertions, 386 deletions
diff --git a/internal/route/repo/branch.go b/internal/route/repo/branch.go index 2ee353b3..17630554 100644 --- a/internal/route/repo/branch.go +++ b/internal/route/repo/branch.go @@ -31,13 +31,13 @@ type Branch struct { func loadBranches(c *context.Context) []*Branch { rawBranches, err := c.Repo.Repository.GetBranches() if err != nil { - c.Handle(500, "GetBranches", err) + c.Error(err, "get branches") return nil } protectBranches, err := db.GetProtectBranchesByRepoID(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "GetProtectBranchesByRepoID", err) + c.Error(err, "get protect branches by repository ID") return nil } @@ -45,7 +45,7 @@ func loadBranches(c *context.Context) []*Branch { for i := range rawBranches { commit, err := rawBranches[i].GetCommit() if err != nil { - c.Handle(500, "GetCommit", err) + c.Error(err, "get commit") return nil } @@ -91,7 +91,7 @@ func Branches(c *context.Context) { c.Data["ActiveBranches"] = activeBranches c.Data["StaleBranches"] = staleBranches - c.HTML(200, BRANCHES_OVERVIEW) + c.Success( BRANCHES_OVERVIEW) } func AllBranches(c *context.Context) { @@ -104,7 +104,7 @@ func AllBranches(c *context.Context) { } c.Data["Branches"] = branches - c.HTML(200, BRANCHES_ALL) + c.Success( BRANCHES_ALL) } func DeleteBranchPost(c *context.Context) { diff --git a/internal/route/repo/commit.go b/internal/route/repo/commit.go index 7b11e89a..e8ff3380 100644 --- a/internal/route/repo/commit.go +++ b/internal/route/repo/commit.go @@ -54,7 +54,7 @@ func renderCommits(c *context.Context, filename string) { commits, err := c.Repo.Commit.CommitsByPage(page, pageSize, git.CommitsByPageOptions{Path: filename}) if err != nil { - c.ServerError("paging commits", err) + c.Error(err, "paging commits") return } @@ -73,7 +73,7 @@ func renderCommits(c *context.Context, filename string) { c.Data["Username"] = c.Repo.Owner.Name c.Data["Reponame"] = c.Repo.Repository.Name - c.HTML(200, COMMITS) + c.Success(COMMITS) } func Commits(c *context.Context) { @@ -91,7 +91,7 @@ func SearchCommits(c *context.Context) { commits, err := c.Repo.Commit.SearchCommits(keyword) if err != nil { - c.ServerError("SearchCommits", err) + c.Error(err, "search commits") return } @@ -102,7 +102,7 @@ func SearchCommits(c *context.Context) { c.Data["Username"] = c.Repo.Owner.Name c.Data["Reponame"] = c.Repo.Repository.Name c.Data["Branch"] = c.Repo.BranchName - c.HTML(200, COMMITS) + c.Success(COMMITS) } func FileHistory(c *context.Context) { @@ -119,7 +119,7 @@ func Diff(c *context.Context) { commit, err := c.Repo.GitRepo.CatFileCommit(commitID) if err != nil { - c.NotFoundOrServerError("get commit by ID", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get commit by ID") return } @@ -127,7 +127,7 @@ func Diff(c *context.Context) { commitID, conf.Git.MaxDiffFiles, conf.Git.MaxDiffLines, conf.Git.MaxDiffLineChars, ) if err != nil { - c.NotFoundOrServerError("get diff", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get diff") return } @@ -171,7 +171,7 @@ func RawDiff(c *context.Context) { git.RawDiffFormat(c.Params(":ext")), c.Resp, ); err != nil { - c.NotFoundOrServerError("get raw diff", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get raw diff") return } } @@ -185,7 +185,7 @@ func CompareDiff(c *context.Context) { commit, err := c.Repo.GitRepo.CatFileCommit(afterCommitID) if err != nil { - c.Handle(404, "GetCommit", err) + c.NotFoundOrError(gitutil.NewError(err), "get head commit") return } @@ -194,13 +194,13 @@ func CompareDiff(c *context.Context) { git.DiffOptions{Base: beforeCommitID}, ) if err != nil { - c.ServerError("get diff", err) + c.NotFoundOrError(gitutil.NewError(err), "get diff") return } commits, err := commit.CommitsAfter(beforeCommitID) if err != nil { - c.ServerError("get commits after", err) + c.NotFoundOrError(gitutil.NewError(err), "get commits after") return } @@ -220,5 +220,5 @@ func CompareDiff(c *context.Context) { c.Data["SourcePath"] = conf.Server.Subpath + "/" + path.Join(userName, repoName, "src", afterCommitID) c.Data["BeforeSourcePath"] = conf.Server.Subpath + "/" + path.Join(userName, repoName, "src", beforeCommitID) c.Data["RawPath"] = conf.Server.Subpath + "/" + path.Join(userName, repoName, "raw", afterCommitID) - c.HTML(200, DIFF) + c.Success(DIFF) } diff --git a/internal/route/repo/download.go b/internal/route/repo/download.go index 4bf27e20..6e29c10e 100644 --- a/internal/route/repo/download.go +++ b/internal/route/repo/download.go @@ -51,12 +51,12 @@ func ServeBlob(c *context.Context, blob *git.Blob) error { func SingleDownload(c *context.Context) { blob, err := c.Repo.Commit.Blob(c.Repo.TreePath) if err != nil { - c.NotFoundOrServerError("get blob", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get blob") return } if err = ServeBlob(c, blob); err != nil { - c.ServerError("serve blob", err) + c.Error(err, "serve blob") return } } diff --git a/internal/route/repo/editor.go b/internal/route/repo/editor.go index 17434dff..cd71ff79 100644 --- a/internal/route/repo/editor.go +++ b/internal/route/repo/editor.go @@ -56,7 +56,7 @@ func editFile(c *context.Context, isNewFile bool) { if !isNewFile { entry, err := c.Repo.Commit.TreeEntry(c.Repo.TreePath) if err != nil { - c.NotFoundOrServerError("get tree entry", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get tree entry") return } @@ -69,7 +69,7 @@ func editFile(c *context.Context, isNewFile bool) { blob := entry.Blob() p, err := blob.Bytes() if err != nil { - c.ServerError("blob.Data", err) + c.Error(err, "get blob data") return } @@ -182,7 +182,7 @@ func editFilePost(c *context.Context, f form.EditRepoFile, isNewFile bool) { break } - c.ServerError("Repo.Commit.GetTreeEntryByPath", err) + c.Error(err, "get tree entry") return } if index != len(treeNames)-1 { @@ -211,14 +211,14 @@ func editFilePost(c *context.Context, f form.EditRepoFile, isNewFile bool) { c.FormErr("TreePath") c.RenderWithErr(c.Tr("repo.editor.file_editing_no_longer_exists", oldTreePath), EDIT_FILE, &f) } else { - c.ServerError("GetTreeEntryByPath", err) + c.Error(err, "get tree entry") } return } if lastCommit != c.Repo.CommitID { files, err := c.Repo.Commit.FilesChangedAfter(lastCommit) if err != nil { - c.ServerError("GetFilesChangedSinceCommit", err) + c.Error(err, "get changed files") return } @@ -236,7 +236,7 @@ func editFilePost(c *context.Context, f form.EditRepoFile, isNewFile bool) { entry, err := c.Repo.Commit.TreeEntry(f.TreePath) if err != nil { if !gitutil.IsErrRevisionNotExist(err) { - c.ServerError("GetTreeEntryByPath", err) + c.Error(err, "get tree entry") return } } @@ -297,26 +297,26 @@ func DiffPreviewPost(c *context.Context, f form.EditPreviewDiff) { entry, err := c.Repo.Commit.TreeEntry(treePath) if err != nil { - c.Error(500, "GetTreeEntryByPath: "+err.Error()) + c.Error(err, "get tree entry") return } else if entry.IsTree() { - c.Error(422) + c.Status(http.StatusUnprocessableEntity) return } diff, err := c.Repo.Repository.GetDiffPreview(c.Repo.BranchName, treePath, f.Content) if err != nil { - c.Error(500, "GetDiffPreview: "+err.Error()) + c.Error(err, "get diff preview") return } if diff.NumFiles() == 0 { - c.PlainText(200, []byte(c.Tr("repo.editor.no_changes_to_show"))) + c.PlainText(http.StatusOK, c.Tr("repo.editor.no_changes_to_show")) return } c.Data["File"] = diff.Files[0] - c.HTML(200, EDIT_DIFF_PREVIEW) + c.Success(EDIT_DIFF_PREVIEW) } func DeleteFile(c *context.Context) { @@ -468,7 +468,7 @@ func UploadFilePost(c *context.Context, f form.UploadRepoFile) { break } - c.ServerError("GetTreeEntryByPath", err) + c.Error(err, "get tree entry") return } @@ -514,7 +514,7 @@ func UploadFilePost(c *context.Context, f form.UploadRepoFile) { func UploadFileToServer(c *context.Context) { file, header, err := c.Req.FormFile("file") if err != nil { - c.Error(http.StatusInternalServerError, fmt.Sprintf("FormFile: %v", err)) + c.Error(err, "get file") return } defer file.Close() @@ -537,14 +537,14 @@ func UploadFileToServer(c *context.Context) { } if !allowed { - c.Error(http.StatusBadRequest, ErrFileTypeForbidden.Error()) + c.PlainText(http.StatusBadRequest, ErrFileTypeForbidden.Error()) return } } upload, err := db.NewUpload(header.Filename, buf, file) if err != nil { - c.Error(http.StatusInternalServerError, fmt.Sprintf("NewUpload: %v", err)) + c.Error(err, "new upload") return } @@ -556,15 +556,15 @@ func UploadFileToServer(c *context.Context) { func RemoveUploadFileFromServer(c *context.Context, f form.RemoveUploadFile) { if len(f.File) == 0 { - c.Status(204) + c.Status(http.StatusNoContent) return } if err := db.DeleteUploadByUUID(f.File); err != nil { - c.Error(500, fmt.Sprintf("DeleteUploadByUUID: %v", err)) + c.Error(err, "delete upload by UUID") return } log.Trace("Upload file removed: %s", f.File) - c.Status(204) + c.Status(http.StatusNoContent) } diff --git a/internal/route/repo/http.go b/internal/route/repo/http.go index 59aea393..e63bc872 100644 --- a/internal/route/repo/http.go +++ b/internal/route/repo/http.go @@ -22,7 +22,6 @@ import ( "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" "gogs.io/gogs/internal/db" - "gogs.io/gogs/internal/db/errors" "gogs.io/gogs/internal/lazyregexp" "gogs.io/gogs/internal/tool" ) @@ -39,7 +38,7 @@ type HTTPContext struct { // askCredentials responses HTTP header and status which informs client to provide credentials. func askCredentials(c *context.Context, status int, text string) { c.Resp.Header().Set("WWW-Authenticate", "Basic realm=\".\"") - c.HandleText(status, text) + c.PlainText(status, text) } func HTTPContexter() macaron.Handler { @@ -66,13 +65,13 @@ func HTTPContexter() macaron.Handler { owner, err := db.GetUserByName(ownerName) if err != nil { - c.NotFoundOrServerError("GetUserByName", errors.IsUserNotExist, err) + c.NotFoundOrError(err, "get user by name") return } repo, err := db.GetRepositoryByName(owner.ID, repoName) if err != nil { - c.NotFoundOrServerError("GetRepositoryByName", errors.IsRepoNotExist, err) + c.NotFoundOrError(err, "get repository by name") return } @@ -113,8 +112,8 @@ func HTTPContexter() macaron.Handler { } authUser, err := db.UserLogin(authUsername, authPassword, -1) - if err != nil && !errors.IsUserNotExist(err) { - c.Handle(http.StatusInternalServerError, "UserLogin", err) + if err != nil && !db.IsErrUserNotExist(err) { + c.Error(err, "authenticate user") return } @@ -125,7 +124,7 @@ func HTTPContexter() macaron.Handler { if db.IsErrAccessTokenEmpty(err) || db.IsErrAccessTokenNotExist(err) { askCredentials(c, http.StatusUnauthorized, "") } else { - c.Handle(http.StatusInternalServerError, "GetAccessTokenBySHA", err) + c.Error(err, "get access token by SHA") } return } @@ -136,7 +135,7 @@ func HTTPContexter() macaron.Handler { if err != nil { // Once we found token, we're supposed to find its related user, // thus any error is unexpected. - c.Handle(http.StatusInternalServerError, "GetUserByID", err) + c.Error(err, "get user by ID") return } } else if authUser.IsEnabledTwoFactor() { @@ -153,7 +152,7 @@ Please create and use personal access token on user settings page`) } has, err := db.HasAccess(authUser.ID, repo, mode) if err != nil { - c.Handle(http.StatusInternalServerError, "HasAccess", err) + c.Error(err, "check access") return } else if !has { askCredentials(c, http.StatusForbidden, "User permission denied") @@ -161,7 +160,7 @@ Please create and use personal access token on user settings page`) } if !isPull && repo.IsMirror { - c.HandleText(http.StatusForbidden, "Mirror repository is read-only") + c.PlainText(http.StatusForbidden, "Mirror repository is read-only") return } @@ -388,7 +387,7 @@ func HTTP(c *HTTPContext) { // but we only want to output this message only if user is really trying to access // Git HTTP endpoints. if conf.Repository.DisableHTTPGit { - c.HandleText(http.StatusForbidden, "Interacting with repositories by HTTP protocol is not disabled") + c.PlainText(http.StatusForbidden, "Interacting with repositories by HTTP protocol is disabled") return } diff --git a/internal/route/repo/issue.go b/internal/route/repo/issue.go index fea9af98..1b64cfe2 100644 --- a/internal/route/repo/issue.go +++ b/internal/route/repo/issue.go @@ -51,7 +51,7 @@ var ( func MustEnableIssues(c *context.Context) { if !c.Repo.Repository.EnableIssues { - c.Handle(404, "MustEnableIssues", nil) + c.NotFound() return } @@ -63,7 +63,7 @@ func MustEnableIssues(c *context.Context) { func MustAllowPulls(c *context.Context) { if !c.Repo.Repository.AllowsPulls() { - c.Handle(404, "MustAllowPulls", nil) + c.NotFound() return } @@ -77,7 +77,7 @@ func MustAllowPulls(c *context.Context) { func RetrieveLabels(c *context.Context) { labels, err := db.GetLabelsByRepoID(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "RetrieveLabels.GetLabels", err) + c.Error(err, "get labels by repository ID") return } for _, l := range labels { @@ -182,14 +182,14 @@ func issues(c *context.Context, isPullList bool) { SortType: sortType, }) if err != nil { - c.Handle(500, "Issues", err) + c.Error(err, "list issues") return } // Get issue-user relations. pairs, err := db.GetIssueUsers(repo.ID, posterID, isShowClosed) if err != nil { - c.Handle(500, "GetIssueUsers", err) + c.Error(err, "get issue-user relations") return } @@ -213,14 +213,14 @@ func issues(c *context.Context, isPullList bool) { // Get milestones. c.Data["Milestones"], err = db.GetMilestonesByRepoID(repo.ID) if err != nil { - c.Handle(500, "GetAllRepoMilestones", err) + c.Error(err, "get milestone by repository ID") return } // Get assignees. c.Data["Assignees"], err = repo.GetAssignees() if err != nil { - c.Handle(500, "GetAssignees", err) + c.Error(err, "get assignees") return } @@ -241,7 +241,7 @@ func issues(c *context.Context, isPullList bool) { c.Data["State"] = "open" } - c.HTML(200, ISSUES) + c.Success(ISSUES) } func Issues(c *context.Context) { @@ -264,18 +264,18 @@ func RetrieveRepoMilestonesAndAssignees(c *context.Context, repo *db.Repository) var err error c.Data["OpenMilestones"], err = db.GetMilestones(repo.ID, -1, false) if err != nil { - c.Handle(500, "GetMilestones", err) + c.Error(err, "get open milestones") return } c.Data["ClosedMilestones"], err = db.GetMilestones(repo.ID, -1, true) if err != nil { - c.Handle(500, "GetMilestones", err) + c.Error(err, "get closed milestones") return } c.Data["Assignees"], err = repo.GetAssignees() if err != nil { - c.Handle(500, "GetAssignees", err) + c.Error(err, "get assignees") return } } @@ -287,7 +287,7 @@ func RetrieveRepoMetas(c *context.Context, repo *db.Repository) []*db.Label { labels, err := db.GetLabelsByRepoID(repo.ID) if err != nil { - c.Handle(500, "GetLabelsByRepoID", err) + c.Error(err, "get labels by repository ID") return nil } c.Data["Labels"] = labels @@ -345,7 +345,7 @@ func NewIssue(c *context.Context) { return } - c.HTML(200, ISSUE_NEW) + c.Success(ISSUE_NEW) } func ValidateRepoMetas(c *context.Context, f form.NewIssue) ([]int64, int64, int64) { @@ -382,7 +382,7 @@ func ValidateRepoMetas(c *context.Context, f form.NewIssue) ([]int64, int64, int if milestoneID > 0 { c.Data["Milestone"], err = repo.GetMilestoneByID(milestoneID) if err != nil { - c.Handle(500, "GetMilestoneByID", err) + c.Error(err, "get milestone by ID") return nil, 0, 0 } c.Data["milestone_id"] = milestoneID @@ -393,7 +393,7 @@ func ValidateRepoMetas(c *context.Context, f form.NewIssue) ([]int64, int64, int if assigneeID > 0 { c.Data["Assignee"], err = repo.GetAssigneeByID(assigneeID) if err != nil { - c.Handle(500, "GetAssigneeByID", err) + c.Error(err, "get assignee by ID") return nil, 0, 0 } c.Data["assignee_id"] = assigneeID @@ -415,7 +415,7 @@ func NewIssuePost(c *context.Context, f form.NewIssue) { } if c.HasError() { - c.HTML(200, ISSUE_NEW) + c.Success(ISSUE_NEW) return } @@ -434,7 +434,7 @@ func NewIssuePost(c *context.Context, f form.NewIssue) { Content: f.Content, } if err := db.NewIssue(c.Repo.Repository, issue, labelIDs, attachments); err != nil { - c.Handle(500, "NewIssue", err) + c.Error(err, "new issue") return } @@ -445,7 +445,7 @@ func NewIssuePost(c *context.Context, f form.NewIssue) { func uploadAttachment(c *context.Context, allowedTypes []string) { file, header, err := c.Req.FormFile("file") if err != nil { - c.Error(500, fmt.Sprintf("FormFile: %v", err)) + c.Error(err, "get file") return } defer file.Close() @@ -467,18 +467,18 @@ func uploadAttachment(c *context.Context, allowedTypes []string) { } if !allowed { - c.Error(400, ErrFileTypeForbidden.Error()) + c.PlainText(http.StatusBadRequest, ErrFileTypeForbidden.Error()) return } attach, err := db.NewAttachment(header.Filename, buf, file) if err != nil { - c.Error(500, fmt.Sprintf("NewAttachment: %v", err)) + c.Error(err, "new attachment") return } log.Trace("New attachment uploaded: %s", attach.UUID) - c.JSON(200, map[string]string{ + c.JSONSuccess(map[string]string{ "uuid": attach.UUID, }) } @@ -505,7 +505,7 @@ func viewIssue(c *context.Context, isPullList bool) { issue, err := db.GetIssueByIndex(c.Repo.Repository.ID, index) if err != nil { - c.NotFoundOrServerError("GetIssueByIndex", errors.IsIssueNotExist, err) + c.NotFoundOrError(err, "get issue by index") return } c.Data["Title"] = issue.Title @@ -559,7 +559,7 @@ func viewIssue(c *context.Context, isPullList bool) { } labels, err := db.GetLabelsByRepoID(repo.ID) if err != nil { - c.Handle(500, "GetLabelsByRepoID", err) + c.Error(err, "get labels by repository ID") return } hasSelected := false @@ -583,7 +583,7 @@ func viewIssue(c *context.Context, isPullList bool) { if c.IsLogged { // Update issue-user. if err = issue.ReadBy(c.User.ID); err != nil { - c.Handle(500, "ReadBy", err) + c.Error(err, "mark read by") return } } @@ -638,8 +638,8 @@ func viewIssue(c *context.Context, isPullList bool) { branchProtected := false protectBranch, err := db.GetProtectBranchOfRepoByName(pull.BaseRepoID, pull.HeadBranch) if err != nil { - if !errors.IsErrBranchNotExist(err) { - c.ServerError("GetProtectBranchOfRepoByName", err) + if !db.IsErrBranchNotExist(err) { + c.Error(err, "get protect branch of repository by name") return } } else { @@ -661,7 +661,7 @@ func viewIssue(c *context.Context, isPullList bool) { c.Data["Issue"] = issue c.Data["IsIssueOwner"] = c.Repo.IsWriter() || (c.IsLogged && issue.IsPoster(c.User.ID)) c.Data["SignInLink"] = conf.Server.Subpath + "/user/login?redirect_to=" + c.Data["Link"].(string) - c.HTML(200, ISSUE_VIEW) + c.Success(ISSUE_VIEW) } func ViewIssue(c *context.Context) { @@ -675,7 +675,7 @@ func ViewPull(c *context.Context) { func getActionIssue(c *context.Context) *db.Issue { issue, err := db.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index")) if err != nil { - c.NotFoundOrServerError("GetIssueByIndex", errors.IsIssueNotExist, err) + c.NotFoundOrError(err, "get issue by index") return nil } @@ -695,22 +695,22 @@ func UpdateIssueTitle(c *context.Context) { } if !c.IsLogged || (!issue.IsPoster(c.User.ID) && !c.Repo.IsWriter()) { - c.Error(403) + c.Status(http.StatusForbidden) return } title := c.QueryTrim("title") if len(title) == 0 { - c.Error(204) + c.Status(http.StatusNoContent) return } if err := issue.ChangeTitle(c.User, title); err != nil { - c.Handle(500, "ChangeTitle", err) + c.Error(err, "change title") return } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "title": issue.Title, }) } @@ -722,17 +722,17 @@ func UpdateIssueContent(c *context.Context) { } if !c.IsLogged || (c.User.ID != issue.PosterID && !c.Repo.IsWriter()) { - c.Error(403) + c.Status(http.StatusForbidden) return } content := c.Query("content") if err := issue.ChangeContent(c.User, content); err != nil { - c.Handle(500, "ChangeContent", err) + c.Error(err, "change content") return } - c.JSON(200, map[string]string{ + c.JSONSuccess(map[string]string{ "content": string(markup.Markdown(issue.Content, c.Query("context"), c.Repo.Repository.ComposeMetas())), }) } @@ -745,35 +745,31 @@ func UpdateIssueLabel(c *context.Context) { if c.Query("action") == "clear" { if err := issue.ClearLabels(c.User); err != nil { - c.Handle(500, "ClearLabels", err) + c.Error(err, "clear labels") return } } else { isAttach := c.Query("action") == "attach" label, err := db.GetLabelOfRepoByID(c.Repo.Repository.ID, c.QueryInt64("id")) if err != nil { - if db.IsErrLabelNotExist(err) { - c.Error(404, "GetLabelByID") - } else { - c.Handle(500, "GetLabelByID", err) - } + c.NotFoundOrError(err, "get label by ID") return } if isAttach && !issue.HasLabel(label.ID) { if err = issue.AddLabel(c.User, label); err != nil { - c.Handle(500, "AddLabel", err) + c.Error(err, "add label") return } } else if !isAttach && issue.HasLabel(label.ID) { if err = issue.RemoveLabel(c.User, label); err != nil { - c.Handle(500, "RemoveLabel", err) + c.Error(err, "remove label") return } } } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "ok": true, }) } @@ -787,7 +783,7 @@ func UpdateIssueMilestone(c *context.Context) { oldMilestoneID := issue.MilestoneID milestoneID := c.QueryInt64("id") if oldMilestoneID == milestoneID { - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "ok": true, }) return @@ -796,11 +792,11 @@ func UpdateIssueMilestone(c *context.Context) { // Not check for invalid milestone id and give responsibility to owners. issue.MilestoneID = milestoneID if err := db.ChangeMilestoneAssign(c.User, issue, oldMilestoneID); err != nil { - c.Handle(500, "ChangeMilestoneAssign", err) + c.Error(err, "change milestone assign") return } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "ok": true, }) } @@ -813,18 +809,18 @@ func UpdateIssueAssignee(c *context.Context) { assigneeID := c.QueryInt64("id") if issue.AssigneeID == assigneeID { - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "ok": true, }) return } if err := issue.ChangeAssignee(c.User, assigneeID); err != nil { - c.Handle(500, "ChangeAssignee", err) + c.Error(err, "change assignee") return } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "ok": true, }) } @@ -862,7 +858,7 @@ func NewComment(c *context.Context, f form.CreateComment) { pr, err = db.GetUnmergedPullRequest(pull.HeadRepoID, pull.BaseRepoID, pull.HeadBranch, pull.BaseBranch) if err != nil { if !db.IsErrPullRequestNotExist(err) { - c.ServerError("GetUnmergedPullRequest", err) + c.Error(err, "get unmerged pull request") return } } @@ -870,7 +866,7 @@ func NewComment(c *context.Context, f form.CreateComment) { // Regenerate patch and test conflict. if pr == nil { if err = issue.PullRequest.UpdatePatch(); err != nil { - c.ServerError("UpdatePatch", err) + c.Error(err, "update patch") return } @@ -913,7 +909,7 @@ func NewComment(c *context.Context, f form.CreateComment) { comment, err = db.CreateIssueComment(c.User, c.Repo.Repository, issue, f.Content, attachments) if err != nil { - c.ServerError("CreateIssueComment", err) + c.Error(err, "create issue comment") return } @@ -923,32 +919,32 @@ func NewComment(c *context.Context, f form.CreateComment) { func UpdateCommentContent(c *context.Context) { comment, err := db.GetCommentByID(c.ParamsInt64(":id")) if err != nil { - c.NotFoundOrServerError("GetCommentByID", db.IsErrCommentNotExist, err) + c.NotFoundOrError(err, "get comment by ID") return } if c.UserID() != comment.PosterID && !c.Repo.IsAdmin() { - c.Error(404) + c.NotFound() return } else if comment.Type != db.COMMENT_TYPE_COMMENT { - c.Error(204) + c.Status(http.StatusNoContent) return } oldContent := comment.Content comment.Content = c.Query("content") if len(comment.Content) == 0 { - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "content": "", }) return } if err = db.UpdateComment(c.User, comment, oldContent); err != nil { - c.Handle(500, "UpdateComment", err) + c.Error(err, "update comment") return } - c.JSON(200, map[string]string{ + c.JSONSuccess(map[string]string{ "content": string(markup.Markdown(comment.Content, c.Query("context"), c.Repo.Repository.ComposeMetas())), }) } @@ -956,24 +952,24 @@ func UpdateCommentContent(c *context.Context) { func DeleteComment(c *context.Context) { comment, err := db.GetCommentByID(c.ParamsInt64(":id")) if err != nil { - c.NotFoundOrServerError("GetCommentByID", db.IsErrCommentNotExist, err) + c.NotFoundOrError(err, "get comment by ID") return } if c.UserID() != comment.PosterID && !c.Repo.IsAdmin() { - c.Error(404) + c.NotFound() return } else if comment.Type != db.COMMENT_TYPE_COMMENT { - c.Error(204) + c.Status(http.StatusNoContent) return } if err = db.DeleteCommentByID(c.User, comment.ID); err != nil { - c.Handle(500, "DeleteCommentByID", err) + c.Error(err, "delete comment by ID") return } - c.Status(200) + c.Status(http.StatusOK) } func Labels(c *context.Context) { @@ -982,7 +978,7 @@ func Labels(c *context.Context) { c.Data["PageIsLabels"] = true c.Data["RequireMinicolors"] = true c.Data["LabelTemplates"] = db.LabelTemplates - c.HTML(200, LABELS) + c.Success(LABELS) } func InitializeLabels(c *context.Context, f form.InitializeLabels) { @@ -1006,7 +1002,7 @@ func InitializeLabels(c *context.Context, f form.InitializeLabels) { } } if err := db.NewLabels(labels...); err != nil { - c.Handle(500, "NewLabels", err) + c.Error(err, "new labels") return } c.RawRedirect(c.Repo.MakeURL("labels")) @@ -1028,7 +1024,7 @@ func NewLabel(c *context.Context, f form.CreateLabel) { Color: f.Color, } if err := db.NewLabels(l); err != nil { - c.Handle(500, "NewLabel", err) + c.Error(err, "new labels") return } c.RawRedirect(c.Repo.MakeURL("labels")) @@ -1037,19 +1033,14 @@ func NewLabel(c *context.Context, f form.CreateLabel) { func UpdateLabel(c *context.Context, f form.CreateLabel) { l, err := db.GetLabelByID(f.ID) if err != nil { - switch { - case db.IsErrLabelNotExist(err): - c.Error(404) - default: - c.Handle(500, "UpdateLabel", err) - } + c.NotFoundOrError(err, "get label by ID") return } l.Name = f.Title l.Color = f.Color if err := db.UpdateLabel(l); err != nil { - c.Handle(500, "UpdateLabel", err) + c.Error(err, "update label") return } c.RawRedirect(c.Repo.MakeURL("labels")) @@ -1092,7 +1083,7 @@ func Milestones(c *context.Context) { miles, err := db.GetMilestones(c.Repo.Repository.ID, page, isShowClosed) if err != nil { - c.Handle(500, "GetMilestones", err) + c.Error(err, "get milestones") return } for _, m := range miles { @@ -1112,7 +1103,7 @@ func Milestones(c *context.Context) { } c.Data["IsShowClosed"] = isShowClosed - c.HTML(200, MILESTONE) + c.Success(MILESTONE) } func NewMilestone(c *context.Context) { @@ -1121,7 +1112,7 @@ func NewMilestone(c *context.Context) { c.Data["PageIsMilestones"] = true c.Data["RequireDatetimepicker"] = true c.Data["DateLang"] = conf.I18n.DateLang(c.Locale.Language()) - c.HTML(200, MILESTONE_NEW) + c.Success(MILESTONE_NEW) } func NewMilestonePost(c *context.Context, f form.CreateMilestone) { @@ -1132,7 +1123,7 @@ func NewMilestonePost(c *context.Context, f form.CreateMilestone) { c.Data["DateLang"] = conf.I18n.DateLang(c.Locale.Language()) if c.HasError() { - c.HTML(200, MILESTONE_NEW) + c.Success(MILESTONE_NEW) return } @@ -1152,7 +1143,7 @@ func NewMilestonePost(c *context.Context, f form.CreateMilestone) { Content: f.Content, Deadline: deadline, }); err != nil { - c.Handle(500, "NewMilestone", err) + c.Error(err, "new milestone") return } @@ -1169,11 +1160,7 @@ func EditMilestone(c *context.Context) { m, err := db.GetMilestoneByRepoID(c.Repo.Repository.ID, c.ParamsInt64(":id")) if err != nil { - if db.IsErrMilestoneNotExist(err) { - c.Handle(404, "", nil) - } else { - c.Handle(500, "GetMilestoneByRepoID", err) - } + c.NotFoundOrError(err, "get milestone by repository ID") return } c.Data["title"] = m.Name @@ -1181,7 +1168,7 @@ func EditMilestone(c *context.Context) { if len(m.DeadlineString) > 0 { c.Data["deadline"] = m.DeadlineString } - c.HTML(200, MILESTONE_NEW) + c.Success(MILESTONE_NEW) } func EditMilestonePost(c *context.Context, f form.CreateMilestone) { @@ -1192,7 +1179,7 @@ func EditMilestonePost(c *context.Context, f form.CreateMilestone) { c.Data["DateLang"] = conf.I18n.DateLang(c.Locale.Language()) if c.HasError() { - c.HTML(200, MILESTONE_NEW) + c.Success(MILESTONE_NEW) return } @@ -1208,18 +1195,14 @@ func EditMilestonePost(c *context.Context, f form.CreateMilestone) { m, err := db.GetMilestoneByRepoID(c.Repo.Repository.ID, c.ParamsInt64(":id")) if err != nil { - if db.IsErrMilestoneNotExist(err) { - c.Handle(404, "", nil) - } else { - c.Handle(500, "GetMilestoneByRepoID", err) - } + c.NotFoundOrError(err, "get milestone by repository ID") return } m.Name = f.Title m.Content = f.Content m.Deadline = deadline if err = db.UpdateMilestone(m); err != nil { - c.Handle(500, "UpdateMilestone", err) + c.Error(err, "update milestone") return } @@ -1230,11 +1213,7 @@ func EditMilestonePost(c *context.Context, f form.CreateMilestone) { func ChangeMilestonStatus(c *context.Context) { m, err := db.GetMilestoneByRepoID(c.Repo.Repository.ID, c.ParamsInt64(":id")) if err != nil { - if db.IsErrMilestoneNotExist(err) { - c.Handle(404, "", err) - } else { - c.Handle(500, "GetMilestoneByRepoID", err) - } + c.NotFoundOrError(err, "get milestone by repository ID") return } @@ -1246,7 +1225,7 @@ func ChangeMilestonStatus(c *context.Context) { case "open": if m.IsClosed { if err = db.ChangeMilestoneStatus(m, false); err != nil { - c.Handle(500, "ChangeMilestoneStatus", err) + c.Error(err, "change milestone status to open") return } } @@ -1255,7 +1234,7 @@ func ChangeMilestonStatus(c *context.Context) { if !m.IsClosed { m.ClosedDate = time.Now() if err = db.ChangeMilestoneStatus(m, true); err != nil { - c.Handle(500, "ChangeMilestoneStatus", err) + c.Error(err, "change milestone status to closed") return } } @@ -1272,7 +1251,7 @@ func DeleteMilestone(c *context.Context) { c.Flash.Success(c.Tr("repo.milestones.deletion_success")) } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "redirect": c.Repo.MakeURL("milestones"), }) } diff --git a/internal/route/repo/pull.go b/internal/route/repo/pull.go index a1b47480..14e9a5c3 100644 --- a/internal/route/repo/pull.go +++ b/internal/route/repo/pull.go @@ -5,6 +5,7 @@ package repo import ( + "net/http" "path" "strings" @@ -16,7 +17,6 @@ import ( "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" "gogs.io/gogs/internal/db" - "gogs.io/gogs/internal/db/errors" "gogs.io/gogs/internal/form" "gogs.io/gogs/internal/gitutil" "gogs.io/gogs/internal/tool" @@ -49,7 +49,7 @@ var ( func parseBaseRepository(c *context.Context) *db.Repository { baseRepo, err := db.GetRepositoryByID(c.ParamsInt64(":repoid")) if err != nil { - c.NotFoundOrServerError("GetRepositoryByID", errors.IsRepoNotExist, err) + c.NotFoundOrError(err, "get repository by ID") return nil } @@ -63,13 +63,13 @@ func parseBaseRepository(c *context.Context) *db.Repository { c.Data["IsPrivate"] = baseRepo.IsPrivate if err = baseRepo.GetOwner(); err != nil { - c.ServerError("GetOwner", err) + c.Error(err, "get owner") return nil } c.Data["ForkFrom"] = baseRepo.Owner.Name + "/" + baseRepo.Name if err := c.User.GetOrganizations(true); err != nil { - c.ServerError("GetOrganizations", err) + c.Error(err, "get organizations") return nil } c.Data["Orgs"] = c.User.Orgs @@ -110,7 +110,7 @@ func ForkPost(c *context.Context, f form.CreateRepo) { repo, has, err := db.HasForkedRepo(ctxUser.ID, baseRepo.ID) if err != nil { - c.ServerError("HasForkedRepo", err) + c.Error(err, "check forked repository") return } else if has { c.Redirect(repo.Link()) @@ -119,7 +119,7 @@ func ForkPost(c *context.Context, f form.CreateRepo) { // Check ownership of organization. if ctxUser.IsOrganization() && !ctxUser.IsOwnedBy(c.User.ID) { - c.Error(403) + c.Status(http.StatusForbidden) return } @@ -133,7 +133,7 @@ func ForkPost(c *context.Context, f form.CreateRepo) { if err != nil { c.Data["Err_RepoName"] = true switch { - case errors.IsReachLimitOfRepo(err): + case db.IsErrReachLimitOfRepo(err): c.RenderWithErr(c.Tr("repo.form.reach_limit_of_creation", c.User.RepoCreationNum()), FORK, &f) case db.IsErrRepoAlreadyExist(err): c.RenderWithErr(c.Tr("repo.settings.new_owner_has_same_repo"), FORK, &f) @@ -142,7 +142,7 @@ func ForkPost(c *context.Context, f form.CreateRepo) { case db.IsErrNamePatternNotAllowed(err): c.RenderWithErr(c.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), FORK, &f) default: - c.ServerError("ForkPost", err) + c.Error(err, "fork repository") } return } @@ -154,21 +154,21 @@ func ForkPost(c *context.Context, f form.CreateRepo) { func checkPullInfo(c *context.Context) *db.Issue { issue, err := db.GetIssueByIndex(c.Repo.Repository.ID, c.ParamsInt64(":index")) if err != nil { - c.NotFoundOrServerError("GetIssueByIndex", errors.IsIssueNotExist, err) + c.NotFoundOrError(err, "get issue by index") return nil } c.Data["Title"] = issue.Title c.Data["Issue"] = issue if !issue.IsPull { - c.Handle(404, "ViewPullCommits", nil) + c.NotFound() return nil } if c.IsLogged { // Update issue-user. if err = issue.ReadBy(c.User.ID); err != nil { - c.ServerError("ReadBy", err) + c.Error(err, "mark read by") return nil } } @@ -185,14 +185,14 @@ func PrepareMergedViewPullInfo(c *context.Context, issue *db.Issue) { var err error c.Data["NumCommits"], err = c.Repo.GitRepo.RevListCount([]string{pull.MergeBase + "..." + pull.MergedCommitID}) if err != nil { - c.ServerError("Repo.GitRepo.CommitsCountBetween", err) + c.Error(err, "count commits") return } names, err := c.Repo.GitRepo.DiffNameOnly(pull.MergeBase, pull.MergedCommitID, git.DiffNameOnlyOptions{NeedsMergeBase: true}) c.Data["NumFiles"] = len(names) if err != nil { - c.ServerError("Repo.GitRepo.FilesCountBetween", err) + c.Error(err, "get changed files") return } } @@ -212,7 +212,7 @@ func PrepareViewPullInfo(c *context.Context, issue *db.Issue) *gitutil.PullReque if pull.HeadRepo != nil { headGitRepo, err = git.Open(pull.HeadRepo.RepoPath()) if err != nil { - c.ServerError("open repository", err) + c.Error(err, "open repository") return nil } } @@ -236,7 +236,7 @@ func PrepareViewPullInfo(c *context.Context, issue *db.Issue) *gitutil.PullReque return nil } - c.ServerError("GetPullRequestInfo", err) + c.Error(err, "get pull request meta") return nil } c.Data["NumCommits"] = len(prMeta.Commits) @@ -267,17 +267,17 @@ func ViewPullCommits(c *context.Context) { } startCommit, err := c.Repo.GitRepo.CatFileCommit(pull.MergeBase) if err != nil { - c.ServerError("get commit of merge base", err) + c.Error(err, "get commit of merge base") return } endCommit, err := c.Repo.GitRepo.CatFileCommit(pull.MergedCommitID) if err != nil { - c.ServerError("get merged commit", err) + c.Error(err, "get merged commit") return } commits, err = c.Repo.GitRepo.RevList([]string{startCommit.ID.String() + "..." + endCommit.ID.String()}) if err != nil { - c.ServerError("list commits", err) + c.Error(err, "list commits") return } @@ -330,7 +330,7 @@ func ViewPullFiles(c *context.Context) { if c.Written() { return } else if prInfo == nil { - c.Handle(404, "ViewPullFiles", nil) + c.NotFound() return } @@ -338,13 +338,13 @@ func ViewPullFiles(c *context.Context) { headGitRepo, err := git.Open(headRepoPath) if err != nil { - c.ServerError("open repository", err) + c.Error(err, "open repository") return } headCommitID, err := headGitRepo.BranchCommitID(pull.HeadBranch) if err != nil { - c.ServerError("get head branch commit ID", err) + c.Error(err, "get head branch commit ID") return } @@ -359,7 +359,7 @@ func ViewPullFiles(c *context.Context) { git.DiffOptions{Base: startCommitID}, ) if err != nil { - c.ServerError("get diff", err) + c.Error(err, "get diff") return } c.Data["Diff"] = diff @@ -367,7 +367,7 @@ func ViewPullFiles(c *context.Context) { commit, err := gitRepo.CatFileCommit(endCommitID) if err != nil { - c.ServerError("get commit", err) + c.Error(err, "get commit") return } @@ -406,7 +406,7 @@ func MergePullRequest(c *context.Context) { pr, err := db.GetPullRequestByIssueID(issue.ID) if err != nil { - c.NotFoundOrServerError("GetPullRequestByIssueID", db.IsErrPullRequestNotExist, err) + c.NotFoundOrError(err, "get pull request by issue ID") return } @@ -418,7 +418,7 @@ func MergePullRequest(c *context.Context) { pr.Issue = issue pr.Issue.Repo = c.Repo.Repository if err = pr.Merge(c.User, c.Repo.GitRepo, db.MergeStyle(c.Query("merge_style")), c.Query("commit_description")); err != nil { - c.ServerError("Merge", err) + c.Error(err, "merge") return } @@ -460,7 +460,7 @@ func ParseCompareInfo(c *context.Context) (*db.User, *db.Repository, *git.Reposi } else if len(headInfos) == 2 { headUser, err = db.GetUserByName(headInfos[0]) if err != nil { - c.NotFoundOrServerError("GetUserByName", errors.IsUserNotExist, err) + c.NotFoundOrError(err, "get user by name") return nil, nil, nil, nil, "", "" } headBranch = headInfos[1] @@ -491,7 +491,7 @@ func ParseCompareInfo(c *context.Context) (*db.User, *db.Repository, *git.Reposi var has bool headRepo, has, err = db.HasForkedRepo(headUser.ID, baseRepo.ID) if err != nil { - c.ServerError("HasForkedRepo", err) + c.Error(err, "get forked repository") return nil, nil, nil, nil, "", "" } else if !has { log.Trace("ParseCompareInfo [base_repo_id: %d]: does not have fork or in same repository", baseRepo.ID) @@ -501,7 +501,7 @@ func ParseCompareInfo(c *context.Context) (*db.User, *db.Repository, *git.Reposi headGitRepo, err = git.Open(db.RepoPath(headUser.Name, headRepo.Name)) if err != nil { - c.ServerError("open repository", err) + c.Error(err, "open repository") return nil, nil, nil, nil, "", "" } } else { @@ -523,7 +523,7 @@ func ParseCompareInfo(c *context.Context) (*db.User, *db.Repository, *git.Reposi headBranches, err := headGitRepo.Branches() if err != nil { - c.ServerError("get branches", err) + c.Error(err, "get branches") return nil, nil, nil, nil, "", "" } c.Data["HeadBranches"] = headBranches @@ -535,7 +535,7 @@ func ParseCompareInfo(c *context.Context) (*db.User, *db.Repository, *git.Reposi c.Data["IsNoMergeBase"] = true c.Success(COMPARE_PULL) } else { - c.ServerError("get pull request meta", err) + c.Error(err, "get pull request meta") } return nil, nil, nil, nil, "", "" } @@ -563,7 +563,7 @@ func PrepareCompareDiff( headCommitID, err := headGitRepo.BranchCommitID(headBranch) if err != nil { - c.ServerError("get head branch commit ID", err) + c.Error(err, "get head branch commit ID") return false } c.Data["AfterCommitID"] = headCommitID @@ -578,7 +578,7 @@ func PrepareCompareDiff( git.DiffOptions{Base: meta.MergeBase}, ) if err != nil { - c.ServerError("get repository diff", err) + c.Error(err, "get repository diff") return false } c.Data["Diff"] = diff @@ -586,7 +586,7 @@ func PrepareCompareDiff( headCommit, err := headGitRepo.CatFileCommit(headCommitID) if err != nil { - c.ServerError("get head commit", err) + c.Error(err, "get head commit") return false } @@ -619,7 +619,7 @@ func CompareAndPullRequest(c *context.Context) { pr, err := db.GetUnmergedPullRequest(headRepo.ID, c.Repo.Repository.ID, headBranch, baseBranch) if err != nil { if !db.IsErrPullRequestNotExist(err) { - c.ServerError("GetUnmergedPullRequest", err) + c.Error(err, "get unmerged pull request") return } } else { @@ -701,7 +701,7 @@ func CompareAndPullRequestPost(c *context.Context, f form.NewIssue) { patch, err := headGitRepo.DiffBinary(meta.MergeBase, headBranch) if err != nil { - c.ServerError("get patch", err) + c.Error(err, "get patch") return } @@ -730,10 +730,10 @@ func CompareAndPullRequestPost(c *context.Context, f form.NewIssue) { // FIXME: check error in the case two people send pull request at almost same time, give nice error prompt // instead of 500. if err := db.NewPullRequest(repo, pullIssue, labelIDs, attachments, pullRequest, patch); err != nil { - c.ServerError("NewPullRequest", err) + c.Error(err, "new pull request") return } else if err := pullRequest.PushToBaseRepo(); err != nil { - c.ServerError("PushToBaseRepo", err) + c.Error(err, "push to base repository") return } @@ -744,13 +744,13 @@ func CompareAndPullRequestPost(c *context.Context, f form.NewIssue) { func parseOwnerAndRepo(c *context.Context) (*db.User, *db.Repository) { owner, err := db.GetUserByName(c.Params(":username")) if err != nil { - c.NotFoundOrServerError("GetUserByName", errors.IsUserNotExist, err) + c.NotFoundOrError(err, "get user by name") return nil, nil } repo, err := db.GetRepositoryByName(owner.ID, c.Params(":reponame")) if err != nil { - c.NotFoundOrServerError("GetRepositoryByName", errors.IsRepoNotExist, err) + c.NotFoundOrError(err, "get repository by name") return nil, nil } @@ -762,7 +762,7 @@ func TriggerTask(c *context.Context) { branch := c.Query("branch") secret := c.Query("secret") if len(branch) == 0 || len(secret) == 0 || pusherID <= 0 { - c.Error(404) + c.NotFound() log.Trace("TriggerTask: branch or secret is empty, or pusher ID is not valid") return } @@ -771,14 +771,14 @@ func TriggerTask(c *context.Context) { return } if secret != tool.MD5(owner.Salt) { - c.Error(404) + c.NotFound() log.Trace("TriggerTask [%s/%s]: invalid secret", owner.Name, repo.Name) return } pusher, err := db.GetUserByID(pusherID) if err != nil { - c.NotFoundOrServerError("GetUserByID", errors.IsUserNotExist, err) + c.NotFoundOrError(err, "get user by ID") return } diff --git a/internal/route/repo/release.go b/internal/route/repo/release.go index f945e4fc..cf05b800 100644 --- a/internal/route/repo/release.go +++ b/internal/route/repo/release.go @@ -53,13 +53,13 @@ func Releases(c *context.Context) { tagsPage, err := gitutil.Module.ListTagsAfter(c.Repo.GitRepo.Path(), c.Query("after"), 10) if err != nil { - c.ServerError("get tags", err) + c.Error(err, "get tags") return } releases, err := db.GetPublishedReleasesByRepoID(c.Repo.Repository.ID, tagsPage.Tags...) if err != nil { - c.Handle(500, "GetPublishedReleasesByRepoID", err) + c.Error(err, "get published releases by repository ID") return } @@ -75,12 +75,12 @@ func Releases(c *context.Context) { releases[j] = nil // Mark as used. if err = r.LoadAttributes(); err != nil { - c.Handle(500, "LoadAttributes", err) + c.Error(err, "load attributes") return } if err := calReleaseNumCommitsBehind(c.Repo, r, countCache); err != nil { - c.Handle(500, "calReleaseNumCommitsBehind", err) + c.Error(err, "calculate number of commits after release") return } @@ -93,7 +93,7 @@ func Releases(c *context.Context) { if results[i] == nil { commit, err := c.Repo.GitRepo.TagCommit(rawTag) if err != nil { - c.Handle(500, "get tag commit", err) + c.Error(err, "get tag commit") return } @@ -105,7 +105,7 @@ func Releases(c *context.Context) { results[i].NumCommits, err = commit.CommitsCount() if err != nil { - c.ServerError("count commits", err) + c.Error(err, "count commits") return } results[i].NumCommitsBehind = c.Repo.CommitsCount - results[i].NumCommits @@ -118,18 +118,18 @@ func Releases(c *context.Context) { if tagsPage.HasLatest { drafts, err = db.GetDraftReleasesByRepoID(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "GetDraftReleasesByRepoID", err) + c.Error(err, "get draft releases by repository ID") return } for _, r := range drafts { if err = r.LoadAttributes(); err != nil { - c.Handle(500, "LoadAttributes", err) + c.Error(err, "load attributes") return } if err := calReleaseNumCommitsBehind(c.Repo, r, countCache); err != nil { - c.Handle(500, "calReleaseNumCommitsBehind", err) + c.Error(err, "calculate number of commits after release") return } @@ -148,7 +148,7 @@ func Releases(c *context.Context) { if len(results) > 0 { c.Data["NextAfter"] = results[len(results)-1].TagName } - c.HTML(200, RELEASES) + c.Success(RELEASES) } func renderReleaseAttachmentSettings(c *context.Context) { @@ -164,7 +164,7 @@ func NewRelease(c *context.Context) { c.Data["PageIsReleaseList"] = true c.Data["tag_target"] = c.Repo.Repository.DefaultBranch renderReleaseAttachmentSettings(c) - c.HTML(200, RELEASE_NEW) + c.Success(RELEASE_NEW) } func NewReleasePost(c *context.Context, f form.NewRelease) { @@ -173,7 +173,7 @@ func NewReleasePost(c *context.Context, f form.NewRelease) { renderReleaseAttachmentSettings(c) if c.HasError() { - c.HTML(200, RELEASE_NEW) + c.Success(RELEASE_NEW) return } @@ -194,13 +194,13 @@ func NewReleasePost(c *context.Context, f form.NewRelease) { commit, err := c.Repo.GitRepo.BranchCommit(f.Target) if err != nil { - c.ServerError("get branch commit", err) + c.Error(err, "get branch commit") return } commitsCount, err := commit.CommitsCount() if err != nil { - c.ServerError("count commits", err) + c.Error(err, "count commits") return } @@ -230,7 +230,7 @@ func NewReleasePost(c *context.Context, f form.NewRelease) { case db.IsErrInvalidTagName(err): c.RenderWithErr(c.Tr("repo.release.tag_name_invalid"), RELEASE_NEW, &f) default: - c.Handle(500, "NewRelease", err) + c.Error(err, "new release") } return } @@ -248,11 +248,7 @@ func EditRelease(c *context.Context) { tagName := c.Params("*") rel, err := db.GetRelease(c.Repo.Repository.ID, tagName) if err != nil { - if db.IsErrReleaseNotExist(err) { - c.Handle(404, "GetRelease", err) - } else { - c.Handle(500, "GetRelease", err) - } + c.NotFoundOrError(err, "get release") return } c.Data["ID"] = rel.ID @@ -264,7 +260,7 @@ func EditRelease(c *context.Context) { c.Data["prerelease"] = rel.IsPrerelease c.Data["IsDraft"] = rel.IsDraft - c.HTML(200, RELEASE_NEW) + c.Success(RELEASE_NEW) } func EditReleasePost(c *context.Context, f form.EditRelease) { @@ -276,11 +272,7 @@ func EditReleasePost(c *context.Context, f form.EditRelease) { tagName := c.Params("*") rel, err := db.GetRelease(c.Repo.Repository.ID, tagName) if err != nil { - if db.IsErrReleaseNotExist(err) { - c.Handle(404, "GetRelease", err) - } else { - c.Handle(500, "GetRelease", err) - } + c.NotFoundOrError(err, "get release") return } c.Data["tag_name"] = rel.TagName @@ -292,7 +284,7 @@ func EditReleasePost(c *context.Context, f form.EditRelease) { c.Data["IsDraft"] = rel.IsDraft if c.HasError() { - c.HTML(200, RELEASE_NEW) + c.Success(RELEASE_NEW) return } @@ -307,7 +299,7 @@ func EditReleasePost(c *context.Context, f form.EditRelease) { rel.IsDraft = len(f.Draft) > 0 rel.IsPrerelease = f.Prerelease if err = db.UpdateRelease(c.User, c.Repo.GitRepo, rel, isPublish, attachments); err != nil { - c.Handle(500, "UpdateRelease", err) + c.Error(err, "update release") return } c.Redirect(c.Repo.RepoLink + "/releases") @@ -328,7 +320,7 @@ func DeleteRelease(c *context.Context) { c.Flash.Success(c.Tr("repo.release.deletion_success")) } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess( map[string]interface{}{ "redirect": c.Repo.RepoLink + "/releases", }) } diff --git a/internal/route/repo/repo.go b/internal/route/repo/repo.go index a0bd25fe..c55314d3 100644 --- a/internal/route/repo/repo.go +++ b/internal/route/repo/repo.go @@ -5,7 +5,7 @@ package repo import ( - "fmt" + "net/http" "os" "path" "path/filepath" @@ -19,7 +19,6 @@ import ( "gogs.io/gogs/internal/conf" "gogs.io/gogs/internal/context" "gogs.io/gogs/internal/db" - "gogs.io/gogs/internal/db/errors" "gogs.io/gogs/internal/form" "gogs.io/gogs/internal/tool" ) @@ -31,14 +30,14 @@ const ( func MustBeNotBare(c *context.Context) { if c.Repo.Repository.IsBare { - c.Handle(404, "MustBeNotBare", nil) + c.NotFound() } } func checkContextUser(c *context.Context, uid int64) *db.User { orgs, err := db.GetOwnedOrgsByUserIDDesc(c.User.ID, "updated_unix") if err != nil { - c.Handle(500, "GetOwnedOrgsByUserIDDesc", err) + c.Error(err, "get owned organization by user ID") return nil } c.Data["Orgs"] = orgs @@ -49,18 +48,18 @@ func checkContextUser(c *context.Context, uid int64) *db.User { } org, err := db.GetUserByID(uid) - if errors.IsUserNotExist(err) { + if db.IsErrUserNotExist(err) { return c.User } if err != nil { - c.Handle(500, "GetUserByID", fmt.Errorf("[%d]: %v", uid, err)) + c.Error(err, "get user by ID") return nil } // Check ownership of organization. if !org.IsOrganization() || !(c.User.IsAdmin || org.IsOwnedBy(c.User.ID)) { - c.Error(403) + c.Status(http.StatusForbidden) return nil } return org @@ -84,12 +83,12 @@ func Create(c *context.Context) { } c.Data["ContextUser"] = ctxUser - c.HTML(200, CREATE) + c.Success(CREATE) } func handleCreateError(c *context.Context, owner *db.User, err error, name, tpl string, form interface{}) { switch { - case errors.IsReachLimitOfRepo(err): + case db.IsErrReachLimitOfRepo(err): c.RenderWithErr(c.Tr("repo.form.reach_limit_of_creation", owner.RepoCreationNum()), tpl, form) case db.IsErrRepoAlreadyExist(err): c.Data["Err_RepoName"] = true @@ -101,7 +100,7 @@ func handleCreateError(c *context.Context, owner *db.User, err error, name, tpl c.Data["Err_RepoName"] = true c.RenderWithErr(c.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), tpl, form) default: - c.Handle(500, name, err) + c.Error(err, name) } } @@ -119,7 +118,7 @@ func CreatePost(c *context.Context, f form.CreateRepo) { c.Data["ContextUser"] = ctxUser if c.HasError() { - c.HTML(200, CREATE) + c.Success(CREATE) return } @@ -159,7 +158,7 @@ func Migrate(c *context.Context) { } c.Data["ContextUser"] = ctxUser - c.HTML(200, MIGRATE) + c.Success(MIGRATE) } func MigratePost(c *context.Context, f form.MigrateRepo) { @@ -172,7 +171,7 @@ func MigratePost(c *context.Context, f form.MigrateRepo) { c.Data["ContextUser"] = ctxUser if c.HasError() { - c.HTML(200, MIGRATE) + c.Success(MIGRATE) return } @@ -189,10 +188,10 @@ func MigratePost(c *context.Context, f form.MigrateRepo) { case addrErr.IsInvalidPath: c.RenderWithErr(c.Tr("repo.migrate.invalid_local_path"), MIGRATE, &f) default: - c.Handle(500, "Unknown error", err) + c.Error(err, "unexpected error") } } else { - c.Handle(500, "ParseRemoteAddr", err) + c.Error(err, "parse remote address") } return } @@ -259,7 +258,7 @@ func Action(c *context.Context) { } if err != nil { - c.ServerError(fmt.Sprintf("Action (%s)", c.Params(":action")), err) + c.Errorf(err, "action %q", c.Params(":action")) return } @@ -290,14 +289,14 @@ func Download(c *context.Context) { archiveFormat = git.ArchiveTarGz default: log.Trace("Unknown format: %s", uri) - c.Error(404) + c.NotFound() return } refName = strings.TrimSuffix(uri, ext) if !com.IsDir(archivePath) { if err := os.MkdirAll(archivePath, os.ModePerm); err != nil { - c.Handle(500, "Download -> os.MkdirAll(archivePath)", err) + c.Error(err, "create archive directory") return } } @@ -311,13 +310,13 @@ func Download(c *context.Context) { if gitRepo.HasBranch(refName) { commit, err = gitRepo.BranchCommit(refName) if err != nil { - c.ServerError("get branch commit", err) + c.Error(err, "get branch commit") return } } else if gitRepo.HasTag(refName) { commit, err = gitRepo.TagCommit(refName) if err != nil { - c.ServerError("get tag commit", err) + c.Error(err, "get tag commit") return } } else if len(refName) >= 7 && len(refName) <= 40 { @@ -334,7 +333,7 @@ func Download(c *context.Context) { archivePath = path.Join(archivePath, tool.ShortSHA1(commit.ID.String())+ext) if !com.IsFile(archivePath) { if err := commit.CreateArchive(archiveFormat, archivePath); err != nil { - c.ServerError("creates archive", err) + c.Error(err, "creates archive") return } } diff --git a/internal/route/repo/setting.go b/internal/route/repo/setting.go index bf463f4a..1c4446d0 100644 --- a/internal/route/repo/setting.go +++ b/internal/route/repo/setting.go @@ -7,7 +7,6 @@ package repo import ( "fmt" "io/ioutil" - "os" "strings" "time" @@ -21,6 +20,7 @@ import ( "gogs.io/gogs/internal/db/errors" "gogs.io/gogs/internal/email" "gogs.io/gogs/internal/form" + "gogs.io/gogs/internal/osutil" "gogs.io/gogs/internal/tool" ) @@ -72,7 +72,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { case db.IsErrNamePatternNotAllowed(err): c.RenderWithErr(c.Tr("repo.form.name_pattern_not_allowed", err.(db.ErrNamePatternNotAllowed).Pattern), SETTINGS_OPTIONS, &f) default: - c.ServerError("ChangeRepositoryName", err) + c.Error(err, "change repository name") } return } @@ -94,7 +94,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { visibilityChanged := repo.IsPrivate != f.Private repo.IsPrivate = f.Private if err := db.UpdateRepository(repo, visibilityChanged); err != nil { - c.ServerError("UpdateRepository", err) + c.Error(err, "update repository") return } log.Trace("Repository basic settings updated: %s/%s", c.Repo.Owner.Name, repo.Name) @@ -119,12 +119,12 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { c.Repo.Mirror.Interval = f.Interval c.Repo.Mirror.NextSync = time.Now().Add(time.Duration(f.Interval) * time.Hour) if err := db.UpdateMirror(c.Repo.Mirror); err != nil { - c.ServerError("UpdateMirror", err) + c.Error(err, "update mirror") return } } if err := c.Repo.Mirror.SaveAddress(f.MirrorAddress); err != nil { - c.ServerError("SaveAddress", err) + c.Error(err, "save address") return } @@ -157,7 +157,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { repo.PullsAllowRebase = f.PullsAllowRebase if err := db.UpdateRepository(repo, false); err != nil { - c.ServerError("UpdateRepository", err) + c.Error(err, "update repository") return } log.Trace("Repository advanced settings updated: %s/%s", c.Repo.Owner.Name, repo.Name) @@ -189,10 +189,10 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { repo.IsMirror = false if _, err := db.CleanUpMigrateInfo(repo); err != nil { - c.ServerError("CleanUpMigrateInfo", err) + c.Error(err, "clean up migrate info") return } else if err = db.DeleteMirrorByRepoID(c.Repo.Repository.ID); err != nil { - c.ServerError("DeleteMirrorByRepoID", err) + c.Error(err, "delete mirror by repository ID") return } log.Trace("Repository converted from mirror to regular: %s/%s", c.Repo.Owner.Name, repo.Name) @@ -219,7 +219,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { newOwner := c.Query("new_owner_name") isExist, err := db.IsUserExist(0, newOwner) if err != nil { - c.ServerError("IsUserExist", err) + c.Error(err, "check if user exists") return } else if !isExist { c.RenderWithErr(c.Tr("form.enterred_invalid_owner_name"), SETTINGS_OPTIONS, nil) @@ -230,7 +230,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { if db.IsErrRepoAlreadyExist(err) { c.RenderWithErr(c.Tr("repo.settings.new_owner_has_same_repo"), SETTINGS_OPTIONS, nil) } else { - c.ServerError("TransferOwnership", err) + c.Error(err, "transfer ownership") } return } @@ -256,7 +256,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { } if err := db.DeleteRepository(c.Repo.Owner.ID, repo.ID); err != nil { - c.ServerError("DeleteRepository", err) + c.Error(err, "delete repository") return } log.Trace("Repository deleted: %s/%s", c.Repo.Owner.Name, repo.Name) @@ -286,7 +286,7 @@ func SettingsPost(c *context.Context, f form.RepoSetting) { repo.EnableWiki = false if err := db.UpdateRepository(repo, false); err != nil { - c.ServerError("UpdateRepository", err) + c.Error(err, "update repository") return } @@ -311,14 +311,14 @@ func SettingsAvatarPost(c *context.Context, f form.Avatar) { } else { c.Flash.Success(c.Tr("settings.update_avatar_success")) } - c.SubURLRedirect(c.Repo.RepoLink + "/settings") + c.RedirectSubpath(c.Repo.RepoLink + "/settings") } func SettingsDeleteAvatar(c *context.Context) { if err := c.Repo.Repository.DeleteAvatar(); err != nil { c.Flash.Error(fmt.Sprintf("Failed to delete avatar: %v", err)) } - c.SubURLRedirect(c.Repo.RepoLink + "/settings") + c.RedirectSubpath(c.Repo.RepoLink + "/settings") } // FIXME: limit upload size @@ -361,12 +361,12 @@ func SettingsCollaboration(c *context.Context) { users, err := c.Repo.Repository.GetCollaborators() if err != nil { - c.Handle(500, "GetCollaborators", err) + c.Error(err, "get collaborators") return } c.Data["Collaborators"] = users - c.HTML(200, SETTINGS_COLLABORATION) + c.Success(SETTINGS_COLLABORATION) } func SettingsCollaborationPost(c *context.Context) { @@ -378,11 +378,11 @@ func SettingsCollaborationPost(c *context.Context) { u, err := db.GetUserByName(name) if err != nil { - if errors.IsUserNotExist(err) { + if db.IsErrUserNotExist(err) { c.Flash.Error(c.Tr("form.user_not_exist")) c.Redirect(conf.Server.Subpath + c.Req.URL.Path) } else { - c.Handle(500, "GetUserByName", err) + c.Error(err, "get user by name") } return } @@ -395,7 +395,7 @@ func SettingsCollaborationPost(c *context.Context) { } if err = c.Repo.Repository.AddCollaborator(u); err != nil { - c.Handle(500, "AddCollaborator", err) + c.Error(err, "add collaborator") return } @@ -425,7 +425,7 @@ func DeleteCollaboration(c *context.Context) { c.Flash.Success(c.Tr("repo.settings.remove_collaborator_success")) } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess( map[string]interface{}{ "redirect": c.Repo.RepoLink + "/settings/collaboration", }) } @@ -436,13 +436,13 @@ func SettingsBranches(c *context.Context) { if c.Repo.Repository.IsBare { c.Flash.Info(c.Tr("repo.settings.branches_bare"), true) - c.HTML(200, SETTINGS_BRANCHES) + c.Success(SETTINGS_BRANCHES) return } protectBranches, err := db.GetProtectBranchesByRepoID(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "GetProtectBranchesByRepoID", err) + c.Error(err, "get protect branch by repository ID") return } @@ -455,7 +455,7 @@ func SettingsBranches(c *context.Context) { } c.Data["ProtectBranches"] = branches - c.HTML(200, SETTINGS_BRANCHES) + c.Success(SETTINGS_BRANCHES) } func UpdateDefaultBranch(c *context.Context) { @@ -473,7 +473,7 @@ func UpdateDefaultBranch(c *context.Context) { } if err := db.UpdateRepository(c.Repo.Repository, false); err != nil { - c.Handle(500, "UpdateRepository", err) + c.Error(err, "update repository") return } @@ -493,8 +493,8 @@ func SettingsProtectedBranch(c *context.Context) { protectBranch, err := db.GetProtectBranchOfRepoByName(c.Repo.Repository.ID, branch) if err != nil { - if !errors.IsErrBranchNotExist(err) { - c.Handle(500, "GetProtectBranchOfRepoByName", err) + if !db.IsErrBranchNotExist(err) { + c.Error(err, "get protect branch of repository by name") return } @@ -507,7 +507,7 @@ func SettingsProtectedBranch(c *context.Context) { if c.Repo.Owner.IsOrganization() { users, err := c.Repo.Repository.GetWriters() if err != nil { - c.Handle(500, "Repo.Repository.GetPushers", err) + c.Error(err, "get writers") return } c.Data["Users"] = users @@ -515,7 +515,7 @@ func SettingsProtectedBranch(c *context.Context) { teams, err := c.Repo.Owner.TeamsHaveAccessToRepo(c.Repo.Repository.ID, db.ACCESS_MODE_WRITE) if err != nil { - c.Handle(500, "Repo.Owner.TeamsHaveAccessToRepo", err) + c.Error(err, "get teams have access to the repository") return } c.Data["Teams"] = teams @@ -523,7 +523,7 @@ func SettingsProtectedBranch(c *context.Context) { } c.Data["Branch"] = protectBranch - c.HTML(200, SETTINGS_PROTECTED_BRANCH) + c.Success(SETTINGS_PROTECTED_BRANCH) } func SettingsProtectedBranchPost(c *context.Context, f form.ProtectBranch) { @@ -535,8 +535,8 @@ func SettingsProtectedBranchPost(c *context.Context, f form.ProtectBranch) { protectBranch, err := db.GetProtectBranchOfRepoByName(c.Repo.Repository.ID, branch) if err != nil { - if !errors.IsErrBranchNotExist(err) { - c.Handle(500, "GetProtectBranchOfRepoByName", err) + if !db.IsErrBranchNotExist(err) { + c.Error(err, "get protect branch of repository by name") return } @@ -556,7 +556,7 @@ func SettingsProtectedBranchPost(c *context.Context, f form.ProtectBranch) { err = db.UpdateProtectBranch(protectBranch) } if err != nil { - c.Handle(500, "UpdateOrgProtectBranch/UpdateProtectBranch", err) + c.Error(err, "update protect branch") return } @@ -570,12 +570,12 @@ func SettingsGitHooks(c *context.Context) { hooks, err := c.Repo.GitRepo.Hooks("custom_hooks") if err != nil { - c.Handle(500, "Hooks", err) + c.Error(err, "get hooks") return } c.Data["Hooks"] = hooks - c.HTML(200, SETTINGS_GITHOOKS) + c.Success(SETTINGS_GITHOOKS) } func SettingsGitHooksEdit(c *context.Context) { @@ -586,30 +586,22 @@ func SettingsGitHooksEdit(c *context.Context) { name := c.Params(":name") hook, err := c.Repo.GitRepo.Hook("custom_hooks", git.HookName(name)) if err != nil { - if err == os.ErrNotExist { - c.Handle(404, "GetHook", err) - } else { - c.Handle(500, "GetHook", err) - } + c.NotFoundOrError(osutil.NewError(err), "get hook") return } c.Data["Hook"] = hook - c.HTML(200, SETTINGS_GITHOOK_EDIT) + c.Success(SETTINGS_GITHOOK_EDIT) } func SettingsGitHooksEditPost(c *context.Context) { name := c.Params(":name") hook, err := c.Repo.GitRepo.Hook("custom_hooks", git.HookName(name)) if err != nil { - if err == os.ErrNotExist { - c.Handle(404, "GetHook", err) - } else { - c.Handle(500, "GetHook", err) - } + c.NotFoundOrError(osutil.NewError(err), "get hook") return } if err = hook.Update(c.Query("content")); err != nil { - c.Handle(500, "hook.Update", err) + c.Error(err, "update hook") return } c.Redirect(c.Data["Link"].(string)) @@ -621,12 +613,12 @@ func SettingsDeployKeys(c *context.Context) { keys, err := db.ListDeployKeys(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "ListDeployKeys", err) + c.Error(err, "list deploy keys") return } c.Data["Deploykeys"] = keys - c.HTML(200, SETTINGS_DEPLOY_KEYS) + c.Success(SETTINGS_DEPLOY_KEYS) } func SettingsDeployKeysPost(c *context.Context, f form.AddSSHKey) { @@ -635,13 +627,13 @@ func SettingsDeployKeysPost(c *context.Context, f form.AddSSHKey) { keys, err := db.ListDeployKeys(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "ListDeployKeys", err) + c.Error(err, "list deploy keys") return } c.Data["Deploykeys"] = keys if c.HasError() { - c.HTML(200, SETTINGS_DEPLOY_KEYS) + c.Success(SETTINGS_DEPLOY_KEYS) return } @@ -669,7 +661,7 @@ func SettingsDeployKeysPost(c *context.Context, f form.AddSSHKey) { c.Data["Err_Title"] = true c.RenderWithErr(c.Tr("repo.settings.key_name_used"), SETTINGS_DEPLOY_KEYS, &f) default: - c.Handle(500, "AddDeployKey", err) + c.Error(err, "add deploy key") } return } @@ -686,7 +678,7 @@ func DeleteDeployKey(c *context.Context) { c.Flash.Success(c.Tr("repo.settings.deploy_key_deletion_success")) } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess( map[string]interface{}{ "redirect": c.Repo.RepoLink + "/settings/keys", }) } diff --git a/internal/route/repo/view.go b/internal/route/repo/view.go index b07dafe2..378dc976 100644 --- a/internal/route/repo/view.go +++ b/internal/route/repo/view.go @@ -37,13 +37,13 @@ const ( func renderDirectory(c *context.Context, treeLink string) { tree, err := c.Repo.Commit.Subtree(c.Repo.TreePath) if err != nil { - c.NotFoundOrServerError("get subtree", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get subtree") return } entries, err := tree.Entries() if err != nil { - c.ServerError("list entries", err) + c.Error(err, "list entries") return } entries.Sort() @@ -54,7 +54,7 @@ func renderDirectory(c *context.Context, treeLink string) { Timeout: 5 * time.Minute, }) if err != nil { - c.ServerError("get commits info", err) + c.Error(err, "get commits info") return } @@ -76,7 +76,7 @@ func renderDirectory(c *context.Context, treeLink string) { p, err := readmeFile.Bytes() if err != nil { - c.ServerError("readmeFile.Data", err) + c.Error(err, "read file") return } @@ -107,7 +107,7 @@ func renderDirectory(c *context.Context, treeLink string) { if len(c.Repo.TreePath) > 0 { latestCommit, err = c.Repo.Commit.CommitByPath(git.CommitByRevisionOptions{Path: c.Repo.TreePath}) if err != nil { - c.ServerError("get commit by path", err) + c.Error(err, "get commit by path") return } } @@ -126,7 +126,7 @@ func renderFile(c *context.Context, entry *git.TreeEntry, treeLink, rawLink stri blob := entry.Blob() p, err := blob.Bytes() if err != nil { - c.Handle(500, "Data", err) + c.Error(err, "read blob") return } @@ -232,7 +232,7 @@ func Home(c *context.Context) { c.Data["PageIsViewFiles"] = true if c.Repo.Repository.IsBare { - c.HTML(200, BARE) + c.Success(BARE) return } @@ -260,7 +260,7 @@ func Home(c *context.Context) { var err error c.Repo.CommitsCount, err = c.Repo.Commit.CommitsCount() if err != nil { - c.Handle(500, "CommitsCount", err) + c.Error(err, "count commits") return } c.Data["CommitsCount"] = c.Repo.CommitsCount @@ -270,7 +270,7 @@ func Home(c *context.Context) { // Get current entry user currently looking at. entry, err := c.Repo.Commit.TreeEntry(c.Repo.TreePath) if err != nil { - c.NotFoundOrServerError("get tree entry", gitutil.IsErrRevisionNotExist, err) + c.NotFoundOrError(gitutil.NewError(err), "get tree entry") return } @@ -306,7 +306,7 @@ func Home(c *context.Context) { c.Data["TreeLink"] = treeLink c.Data["TreeNames"] = treeNames c.Data["BranchLink"] = branchLink - c.HTML(200, HOME) + c.Success(HOME) } func RenderUserCards(c *context.Context, total int, getter func(page int) ([]*db.User, error), tpl string) { @@ -319,12 +319,12 @@ func RenderUserCards(c *context.Context, total int, getter func(page int) ([]*db items, err := getter(pager.Current()) if err != nil { - c.Handle(500, "getter", err) + c.Error(err, "getter") return } c.Data["Cards"] = items - c.HTML(200, tpl) + c.Success(tpl) } func Watchers(c *context.Context) { @@ -346,17 +346,17 @@ func Forks(c *context.Context) { forks, err := c.Repo.Repository.GetForks() if err != nil { - c.Handle(500, "GetForks", err) + c.Error(err, "get forks") return } for _, fork := range forks { if err = fork.GetOwner(); err != nil { - c.Handle(500, "GetOwner", err) + c.Error(err, "get owner") return } } c.Data["Forks"] = forks - c.HTML(200, FORKS) + c.Success(FORKS) } diff --git a/internal/route/repo/webhook.go b/internal/route/repo/webhook.go index 705fd2ad..32c2069b 100644 --- a/internal/route/repo/webhook.go +++ b/internal/route/repo/webhook.go @@ -6,6 +6,7 @@ package repo import ( "fmt" + "net/http" "strings" jsoniter "github.com/json-iterator/go" @@ -36,12 +37,12 @@ func Webhooks(c *context.Context) { ws, err := db.GetWebhooksByRepoID(c.Repo.Repository.ID) if err != nil { - c.Handle(500, "GetWebhooksByRepoID", err) + c.Error(err, "get webhooks by repository ID") return } c.Data["Webhooks"] = ws - c.HTML(200, WEBHOOKS) + c.Success(WEBHOOKS) } type OrgRepoCtx struct { @@ -77,7 +78,7 @@ func getOrgRepoCtx(c *context.Context) (*OrgRepoCtx, error) { func checkHookType(c *context.Context) string { hookType := strings.ToLower(c.Params(":type")) if !com.IsSliceContainsStr(conf.Webhook.Types, hookType) { - c.Handle(404, "checkHookType", nil) + c.NotFound() return "" } return hookType @@ -91,7 +92,7 @@ func WebhooksNew(c *context.Context) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return } @@ -101,7 +102,7 @@ func WebhooksNew(c *context.Context) { } c.Data["BaseLink"] = orCtx.Link - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) } func ParseHookEvent(f form.Webhook) *db.HookEvent { @@ -131,13 +132,13 @@ func WebHooksNewPost(c *context.Context, f form.NewWebhook) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return } c.Data["BaseLink"] = orCtx.Link if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -157,10 +158,10 @@ func WebHooksNewPost(c *context.Context, f form.NewWebhook) { OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.CreateWebhook(w); err != nil { - c.Handle(500, "CreateWebhook", err) + c.Error(err, "create webhook") return } @@ -176,12 +177,12 @@ func SlackHooksNewPost(c *context.Context, f form.NewSlackHook) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return } if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -192,7 +193,7 @@ func SlackHooksNewPost(c *context.Context, f form.NewSlackHook) { Color: f.Color, }) if err != nil { - c.Handle(500, "Marshal", err) + c.Error(err, "marshal JSON") return } @@ -207,10 +208,10 @@ func SlackHooksNewPost(c *context.Context, f form.NewSlackHook) { OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.CreateWebhook(w); err != nil { - c.Handle(500, "CreateWebhook", err) + c.Error(err, "create webhook") return } @@ -227,12 +228,12 @@ func DiscordHooksNewPost(c *context.Context, f form.NewDiscordHook) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return } if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -242,7 +243,7 @@ func DiscordHooksNewPost(c *context.Context, f form.NewDiscordHook) { Color: f.Color, }) if err != nil { - c.Handle(500, "Marshal", err) + c.Error(err, "marshal JSON") return } @@ -257,10 +258,10 @@ func DiscordHooksNewPost(c *context.Context, f form.NewDiscordHook) { OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.CreateWebhook(w); err != nil { - c.Handle(500, "CreateWebhook", err) + c.Error(err, "create webhook") return } @@ -276,12 +277,12 @@ func DingtalkHooksNewPost(c *context.Context, f form.NewDingtalkHook) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return } if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -295,10 +296,10 @@ func DingtalkHooksNewPost(c *context.Context, f form.NewDingtalkHook) { OrgID: orCtx.OrgID, } if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.CreateWebhook(w); err != nil { - c.Handle(500, "CreateWebhook", err) + c.Error(err, "create webhook") return } @@ -311,7 +312,7 @@ func checkWebhook(c *context.Context) (*OrgRepoCtx, *db.Webhook) { orCtx, err := getOrgRepoCtx(c) if err != nil { - c.Handle(500, "getOrgRepoCtx", err) + c.Error(err, "get organization repository context") return nil, nil } c.Data["BaseLink"] = orCtx.Link @@ -323,7 +324,7 @@ func checkWebhook(c *context.Context) (*OrgRepoCtx, *db.Webhook) { w, err = db.GetWebhookByOrgID(c.Org.Organization.ID, c.ParamsInt64(":id")) } if err != nil { - c.NotFoundOrServerError("GetWebhookOfRepoByID/GetWebhookByOrgID", errors.IsWebhookNotExist, err) + c.NotFoundOrError(err, "get webhook") return nil, nil } @@ -342,7 +343,8 @@ func checkWebhook(c *context.Context) (*OrgRepoCtx, *db.Webhook) { c.Data["History"], err = w.History(1) if err != nil { - c.Handle(500, "History", err) + c.Error(err, "get history") + return nil, nil } return orCtx, w } @@ -358,7 +360,7 @@ func WebHooksEdit(c *context.Context) { } c.Data["Webhook"] = w - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) } func WebHooksEditPost(c *context.Context, f form.NewWebhook) { @@ -373,7 +375,7 @@ func WebHooksEditPost(c *context.Context, f form.NewWebhook) { c.Data["Webhook"] = w if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -388,10 +390,10 @@ func WebHooksEditPost(c *context.Context, f form.NewWebhook) { w.HookEvent = ParseHookEvent(f.Webhook) w.IsActive = f.Active if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.UpdateWebhook(w); err != nil { - c.Handle(500, "WebHooksEditPost", err) + c.Error(err, "update webhook") return } @@ -411,7 +413,7 @@ func SlackHooksEditPost(c *context.Context, f form.NewSlackHook) { c.Data["Webhook"] = w if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -422,7 +424,7 @@ func SlackHooksEditPost(c *context.Context, f form.NewSlackHook) { Color: f.Color, }) if err != nil { - c.Handle(500, "Marshal", err) + c.Error(err, "marshal JSON") return } @@ -431,10 +433,10 @@ func SlackHooksEditPost(c *context.Context, f form.NewSlackHook) { w.HookEvent = ParseHookEvent(f.Webhook) w.IsActive = f.Active if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.UpdateWebhook(w); err != nil { - c.Handle(500, "UpdateWebhook", err) + c.Error(err, "update webhook") return } @@ -455,7 +457,7 @@ func DiscordHooksEditPost(c *context.Context, f form.NewDiscordHook) { c.Data["Webhook"] = w if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -465,7 +467,7 @@ func DiscordHooksEditPost(c *context.Context, f form.NewDiscordHook) { Color: f.Color, }) if err != nil { - c.Handle(500, "Marshal", err) + c.Error(err, "marshal JSON") return } @@ -474,10 +476,10 @@ func DiscordHooksEditPost(c *context.Context, f form.NewDiscordHook) { w.HookEvent = ParseHookEvent(f.Webhook) w.IsActive = f.Active if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.UpdateWebhook(w); err != nil { - c.Handle(500, "UpdateWebhook", err) + c.Error(err, "update webhook") return } @@ -497,7 +499,7 @@ func DingtalkHooksEditPost(c *context.Context, f form.NewDingtalkHook) { c.Data["Webhook"] = w if c.HasError() { - c.HTML(200, orCtx.NewTemplate) + c.Success(orCtx.NewTemplate) return } @@ -505,10 +507,10 @@ func DingtalkHooksEditPost(c *context.Context, f form.NewDingtalkHook) { w.HookEvent = ParseHookEvent(f.Webhook) w.IsActive = f.Active if err := w.UpdateEvent(); err != nil { - c.Handle(500, "UpdateEvent", err) + c.Error(err, "update event") return } else if err := db.UpdateWebhook(w); err != nil { - c.Handle(500, "UpdateWebhook", err) + c.Error(err, "update webhook") return } @@ -550,22 +552,22 @@ func TestWebhook(c *context.Context) { author, err := db.GetUserByEmail(c.Repo.Commit.Author.Email) if err == nil { authorUsername = author.Name - } else if !errors.IsUserNotExist(err) { - c.Handle(500, "GetUserByEmail.(author)", err) + } else if !db.IsErrUserNotExist(err) { + c.Error(err, "get user by email") return } user, err := db.GetUserByEmail(c.Repo.Commit.Committer.Email) if err == nil { committerUsername = user.Name - } else if !errors.IsUserNotExist(err) { - c.Handle(500, "GetUserByEmail.(committer)", err) + } else if !db.IsErrUserNotExist(err) { + c.Error(err, "get user by email") return } nameStatus, err = c.Repo.Commit.ShowNameStatus() if err != nil { - c.Handle(500, "FileStatus", err) + c.Error(err, "get changed files") return } } @@ -600,34 +602,36 @@ func TestWebhook(c *context.Context) { Sender: apiUser, } if err := db.TestWebhook(c.Repo.Repository, db.HOOK_EVENT_PUSH, p, c.ParamsInt64("id")); err != nil { - c.Handle(500, "TestWebhook", err) - } else { - c.Flash.Info(c.Tr("repo.settings.webhook.test_delivery_success")) - c.Status(200) + c.Error(err, "test webhook") + return } + + c.Flash.Info(c.Tr("repo.settings.webhook.test_delivery_success")) + c.Status(http.StatusOK) } func RedeliveryWebhook(c *context.Context) { webhook, err := db.GetWebhookOfRepoByID(c.Repo.Repository.ID, c.ParamsInt64(":id")) if err != nil { - c.NotFoundOrServerError("GetWebhookOfRepoByID/GetWebhookByOrgID", errors.IsWebhookNotExist, err) + c.NotFoundOrError(err, "get webhook") return } hookTask, err := db.GetHookTaskOfWebhookByUUID(webhook.ID, c.Query("uuid")) if err != nil { - c.NotFoundOrServerError("GetHookTaskOfWebhookByUUID/GetWebhookByOrgID", errors.IsHookTaskNotExist, err) + c.NotFoundOrError(err, "get hook task by UUID") return } hookTask.IsDelivered = false if err = db.UpdateHookTask(hookTask); err != nil { - c.Handle(500, "UpdateHookTask", err) - } else { - go db.HookQueue.Add(c.Repo.Repository.ID) - c.Flash.Info(c.Tr("repo.settings.webhook.redelivery_success", hookTask.UUID)) - c.Status(200) + c.Error(err, "update hook task") + return } + + go db.HookQueue.Add(c.Repo.Repository.ID) + c.Flash.Info(c.Tr("repo.settings.webhook.redelivery_success", hookTask.UUID)) + c.Status(http.StatusOK) } func DeleteWebhook(c *context.Context) { @@ -637,7 +641,7 @@ func DeleteWebhook(c *context.Context) { c.Flash.Success(c.Tr("repo.settings.webhook_deletion_success")) } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "redirect": c.Repo.RepoLink + "/settings/hooks", }) } diff --git a/internal/route/repo/wiki.go b/internal/route/repo/wiki.go index 91bc3c91..b9f754ee 100644 --- a/internal/route/repo/wiki.go +++ b/internal/route/repo/wiki.go @@ -26,7 +26,7 @@ const ( func MustEnableWiki(c *context.Context) { if !c.Repo.Repository.EnableWiki { - c.Handle(404, "MustEnableWiki", nil) + c.NotFound() return } @@ -45,12 +45,12 @@ type PageMeta struct { func renderWikiPage(c *context.Context, isViewPage bool) (*git.Repository, string) { wikiRepo, err := git.Open(c.Repo.Repository.WikiPath()) if err != nil { - c.ServerError("open repository", err) + c.Error(err, "open repository") return nil, "" } commit, err := wikiRepo.BranchCommit("master") if err != nil { - c.ServerError("get branch commit", err) + c.Error(err, "get branch commit") return nil, "" } @@ -58,7 +58,7 @@ func renderWikiPage(c *context.Context, isViewPage bool) (*git.Repository, strin if isViewPage { entries, err := commit.Entries() if err != nil { - c.ServerError("list entries", err) + c.Error(err, "list entries") return nil, "" } pages := make([]PageMeta, 0, len(entries)) @@ -91,13 +91,13 @@ func renderWikiPage(c *context.Context, isViewPage bool) (*git.Repository, strin if gitutil.IsErrRevisionNotExist(err) { c.Redirect(c.Repo.RepoLink + "/wiki/_pages") } else { - c.ServerError("GetBlobByPath", err) + c.Error(err, "get blob") } return nil, "" } p, err := blob.Bytes() if err != nil { - c.ServerError("Data", err) + c.Error(err, "read blob") return nil, "" } if isViewPage { @@ -114,7 +114,7 @@ func Wiki(c *context.Context) { if !c.Repo.Repository.HasWiki() { c.Data["Title"] = c.Tr("repo.wiki") - c.HTML(200, WIKI_START) + c.Success(WIKI_START) return } @@ -126,12 +126,12 @@ func Wiki(c *context.Context) { // Get last change information. commits, err := wikiRepo.Log(git.RefsHeads+"master", git.LogOptions{Path: pageName + ".md"}) if err != nil { - c.ServerError("get commits by path", err) + c.Error(err, "get commits by path") return } c.Data["Author"] = commits[0].Author - c.HTML(200, WIKI_VIEW) + c.Success(WIKI_VIEW) } func WikiPages(c *context.Context) { @@ -145,18 +145,18 @@ func WikiPages(c *context.Context) { wikiRepo, err := git.Open(c.Repo.Repository.WikiPath()) if err != nil { - c.ServerError("open repository", err) + c.Error(err, "open repository") return } commit, err := wikiRepo.BranchCommit("master") if err != nil { - c.ServerError("get branch commit", err) + c.Error(err, "get branch commit") return } entries, err := commit.Entries() if err != nil { - c.ServerError("list entries", err) + c.Error(err, "list entries") return } pages := make([]PageMeta, 0, len(entries)) @@ -164,7 +164,7 @@ func WikiPages(c *context.Context) { if entries[i].Type() == git.ObjectBlob && strings.HasSuffix(entries[i].Name(), ".md") { commits, err := wikiRepo.Log(git.RefsHeads+"master", git.LogOptions{Path: entries[i].Name()}) if err != nil { - c.ServerError("get commits by path", err) + c.Error(err, "get commits by path") return } name := strings.TrimSuffix(entries[i].Name(), ".md") @@ -177,7 +177,7 @@ func WikiPages(c *context.Context) { } c.Data["Pages"] = pages - c.HTML(200, WIKI_PAGES) + c.Success(WIKI_PAGES) } func NewWiki(c *context.Context) { @@ -189,7 +189,7 @@ func NewWiki(c *context.Context) { c.Data["title"] = "Home" } - c.HTML(200, WIKI_NEW) + c.Success(WIKI_NEW) } func NewWikiPost(c *context.Context, f form.NewWiki) { @@ -198,7 +198,7 @@ func NewWikiPost(c *context.Context, f form.NewWiki) { c.Data["RequireSimpleMDE"] = true if c.HasError() { - c.HTML(200, WIKI_NEW) + c.Success(WIKI_NEW) return } @@ -207,7 +207,7 @@ func NewWikiPost(c *context.Context, f form.NewWiki) { c.Data["Err_Title"] = true c.RenderWithErr(c.Tr("repo.wiki.page_already_exists"), WIKI_NEW, &f) } else { - c.ServerError("AddWikiPage", err) + c.Error(err, "add wiki page") } return } @@ -230,7 +230,7 @@ func EditWiki(c *context.Context) { return } - c.HTML(200, WIKI_NEW) + c.Success(WIKI_NEW) } func EditWikiPost(c *context.Context, f form.NewWiki) { @@ -239,12 +239,12 @@ func EditWikiPost(c *context.Context, f form.NewWiki) { c.Data["RequireSimpleMDE"] = true if c.HasError() { - c.HTML(200, WIKI_NEW) + c.Success(WIKI_NEW) return } if err := c.Repo.Repository.EditWikiPage(c.User, f.OldTitle, f.Title, f.Content, f.Message); err != nil { - c.ServerError("EditWikiPage", err) + c.Error(err, "edit wiki page") return } @@ -259,11 +259,11 @@ func DeleteWikiPagePost(c *context.Context) { pageName := db.ToWikiPageName(pageURL) if err := c.Repo.Repository.DeleteWikiPage(c.User, pageName); err != nil { - c.ServerError("DeleteWikiPage", err) + c.Error(err, "delete wiki page") return } - c.JSON(200, map[string]interface{}{ + c.JSONSuccess(map[string]interface{}{ "redirect": c.Repo.RepoLink + "/wiki/", }) } |