golint fixed for routers (#208)

tokarchuk/v1.17
Lunny Xiao 8 years ago committed by GitHub
parent 3a3782bb7f
commit 3917ed45de
  1. 3
      routers/api/v1/admin/org.go
  2. 3
      routers/api/v1/admin/org_repo.go
  3. 3
      routers/api/v1/admin/org_team.go
  4. 3
      routers/api/v1/admin/repo.go
  5. 10
      routers/api/v1/admin/user.go
  6. 10
      routers/api/v1/convert/convert.go
  7. 6
      routers/api/v1/misc/markdown.go
  8. 12
      routers/api/v1/org/org.go
  9. 1
      routers/api/v1/org/team.go
  10. 6
      routers/api/v1/repo/branch.go
  11. 1
      routers/api/v1/repo/collaborators.go
  12. 7
      routers/api/v1/repo/file.go
  13. 10
      routers/api/v1/repo/hook.go
  14. 4
      routers/api/v1/repo/issue.go
  15. 4
      routers/api/v1/repo/issue_comment.go
  16. 5
      routers/api/v1/repo/issue_label.go
  17. 14
      routers/api/v1/repo/key.go
  18. 5
      routers/api/v1/repo/label.go
  19. 5
      routers/api/v1/repo/milestone.go
  20. 20
      routers/api/v1/repo/repo.go
  21. 6
      routers/api/v1/user/app.go
  22. 9
      routers/api/v1/user/email.go
  23. 26
      routers/api/v1/user/follower.go
  24. 16
      routers/api/v1/user/key.go
  25. 3
      routers/api/v1/user/user.go
  26. 29
      routers/repo/commit.go
  27. 3
      routers/repo/download.go
  28. 57
      routers/repo/editor.go
  29. 12
      routers/repo/http.go
  30. 77
      routers/repo/issue.go
  31. 46
      routers/repo/pull.go
  32. 26
      routers/repo/release.go
  33. 33
      routers/repo/repo.go
  34. 12
      routers/repo/setting.go
  35. 20
      routers/repo/webhook.go

@ -13,7 +13,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/user" "code.gitea.io/gitea/routers/api/v1/user"
) )
// https://github.com/gogits/go-gogs-client/wiki/Administration-Organizations#create-a-new-organization // CreateOrg api for create organization
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Organizations#create-a-new-organization
func CreateOrg(ctx *context.APIContext, form api.CreateOrgOption) { func CreateOrg(ctx *context.APIContext, form api.CreateOrgOption) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// GetRepositoryByParams api for getting repository by orgnizition ID and repo name
func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { func GetRepositoryByParams(ctx *context.APIContext) *models.Repository {
repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame")) repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame"))
if err != nil { if err != nil {
@ -22,6 +23,7 @@ func GetRepositoryByParams(ctx *context.APIContext) *models.Repository {
return repo return repo
} }
// AddTeamRepository api for adding a repository to a team
func AddTeamRepository(ctx *context.APIContext) { func AddTeamRepository(ctx *context.APIContext) {
repo := GetRepositoryByParams(ctx) repo := GetRepositoryByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -35,6 +37,7 @@ func AddTeamRepository(ctx *context.APIContext) {
ctx.Status(204) ctx.Status(204)
} }
// RemoveTeamRepository api for removing a repository from a team
func RemoveTeamRepository(ctx *context.APIContext) { func RemoveTeamRepository(ctx *context.APIContext) {
repo := GetRepositoryByParams(ctx) repo := GetRepositoryByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/routers/api/v1/user" "code.gitea.io/gitea/routers/api/v1/user"
) )
// CreateTeam api for create a team
func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) {
team := &models.Team{ team := &models.Team{
OrgID: ctx.Org.Organization.ID, OrgID: ctx.Org.Organization.ID,
@ -32,6 +33,7 @@ func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) {
ctx.JSON(201, convert.ToTeam(team)) ctx.JSON(201, convert.ToTeam(team))
} }
// AddTeamMember api for add a member to a team
func AddTeamMember(ctx *context.APIContext) { func AddTeamMember(ctx *context.APIContext) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -45,6 +47,7 @@ func AddTeamMember(ctx *context.APIContext) {
ctx.Status(204) ctx.Status(204)
} }
// RemoveTeamMember api for remove one member from a team
func RemoveTeamMember(ctx *context.APIContext) { func RemoveTeamMember(ctx *context.APIContext) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -12,7 +12,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/user" "code.gitea.io/gitea/routers/api/v1/user"
) )
// https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository // CreateRepo api for creating a repository
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository
func CreateRepo(ctx *context.APIContext, form api.CreateRepoOption) { func CreateRepo(ctx *context.APIContext, form api.CreateRepoOption) {
owner := user.GetUserByParams(ctx) owner := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -34,7 +34,8 @@ func parseLoginSource(ctx *context.APIContext, u *models.User, sourceID int64, l
u.LoginName = loginName u.LoginName = loginName
} }
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-new-user // CreateUser api for creating a user
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-new-user
func CreateUser(ctx *context.APIContext, form api.CreateUserOption) { func CreateUser(ctx *context.APIContext, form api.CreateUserOption) {
u := &models.User{ u := &models.User{
Name: form.Username, Name: form.Username,
@ -71,7 +72,8 @@ func CreateUser(ctx *context.APIContext, form api.CreateUserOption) {
ctx.JSON(201, u.APIFormat()) ctx.JSON(201, u.APIFormat())
} }
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#edit-an-existing-user // EditUser api for modifying a user's information
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#edit-an-existing-user
func EditUser(ctx *context.APIContext, form api.EditUserOption) { func EditUser(ctx *context.APIContext, form api.EditUserOption) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -123,6 +125,7 @@ func EditUser(ctx *context.APIContext, form api.EditUserOption) {
ctx.JSON(200, u.APIFormat()) ctx.JSON(200, u.APIFormat())
} }
// DeleteUser api for deleting a user
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user // https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user
func DeleteUser(ctx *context.APIContext) { func DeleteUser(ctx *context.APIContext) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
@ -144,7 +147,8 @@ func DeleteUser(ctx *context.APIContext) {
ctx.Status(204) ctx.Status(204)
} }
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-public-key-for-user // CreatePublicKey api for creating a public key to a user
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-public-key-for-user
func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -9,12 +9,13 @@ import (
"github.com/Unknwon/com" "github.com/Unknwon/com"
"code.gitea.io/git"
api "code.gitea.io/sdk/gitea" api "code.gitea.io/sdk/gitea"
"code.gitea.io/git"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
) )
// ToEmail convert models.EmailAddress to api.Email
func ToEmail(email *models.EmailAddress) *api.Email { func ToEmail(email *models.EmailAddress) *api.Email {
return &api.Email{ return &api.Email{
Email: email.Email, Email: email.Email,
@ -23,6 +24,7 @@ func ToEmail(email *models.EmailAddress) *api.Email {
} }
} }
// ToBranch convert a commit and branch to an api.Branch
func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { func ToBranch(b *models.Branch, c *git.Commit) *api.Branch {
return &api.Branch{ return &api.Branch{
Name: b.Name, Name: b.Name,
@ -30,6 +32,7 @@ func ToBranch(b *models.Branch, c *git.Commit) *api.Branch {
} }
} }
// ToCommit convert a commit to api.PayloadCommit
func ToCommit(c *git.Commit) *api.PayloadCommit { func ToCommit(c *git.Commit) *api.PayloadCommit {
authorUsername := "" authorUsername := ""
author, err := models.GetUserByEmail(c.Author.Email) author, err := models.GetUserByEmail(c.Author.Email)
@ -59,6 +62,7 @@ func ToCommit(c *git.Commit) *api.PayloadCommit {
} }
} }
// ToPublicKey convert models.PublicKey to api.PublicKey
func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey {
return &api.PublicKey{ return &api.PublicKey{
ID: key.ID, ID: key.ID,
@ -69,6 +73,7 @@ func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey {
} }
} }
// ToHook convert models.Webhook to api.Hook
func ToHook(repoLink string, w *models.Webhook) *api.Hook { func ToHook(repoLink string, w *models.Webhook) *api.Hook {
config := map[string]string{ config := map[string]string{
"url": w.URL, "url": w.URL,
@ -94,6 +99,7 @@ func ToHook(repoLink string, w *models.Webhook) *api.Hook {
} }
} }
// ToDeployKey convert models.DeployKey to api.DeployKey
func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey {
return &api.DeployKey{ return &api.DeployKey{
ID: key.ID, ID: key.ID,
@ -105,6 +111,7 @@ func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey {
} }
} }
// ToOrganization convert models.User to api.Organization
func ToOrganization(org *models.User) *api.Organization { func ToOrganization(org *models.User) *api.Organization {
return &api.Organization{ return &api.Organization{
ID: org.ID, ID: org.ID,
@ -117,6 +124,7 @@ func ToOrganization(org *models.User) *api.Organization {
} }
} }
// ToTeam convert models.Team to api.Team
func ToTeam(team *models.Team) *api.Team { func ToTeam(team *models.Team) *api.Team {
return &api.Team{ return &api.Team{
ID: team.ID, ID: team.ID,

@ -11,7 +11,8 @@ import (
"code.gitea.io/gitea/modules/markdown" "code.gitea.io/gitea/modules/markdown"
) )
// https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-an-arbitrary-markdown-document // Markdown render markdown document to HTML
// see https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-an-arbitrary-markdown-document
func Markdown(ctx *context.APIContext, form api.MarkdownOption) { func Markdown(ctx *context.APIContext, form api.MarkdownOption) {
if ctx.HasApiError() { if ctx.HasApiError() {
ctx.Error(422, "", ctx.GetErrMsg()) ctx.Error(422, "", ctx.GetErrMsg())
@ -31,7 +32,8 @@ func Markdown(ctx *context.APIContext, form api.MarkdownOption) {
} }
} }
// https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-a-markdown-document-in-raw-mode // MarkdownRaw render raw markdown HTML
// see https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-a-markdown-document-in-raw-mode
func MarkdownRaw(ctx *context.APIContext) { func MarkdownRaw(ctx *context.APIContext) {
body, err := ctx.Req.Body().Bytes() body, err := ctx.Req.Body().Bytes()
if err != nil { if err != nil {

@ -26,12 +26,14 @@ func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) {
ctx.JSON(200, &apiOrgs) ctx.JSON(200, &apiOrgs)
} }
// https://github.com/gogits/go-gogs-client/wiki/Organizations#list-your-organizations // ListMyOrgs list all my orgs
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#list-your-organizations
func ListMyOrgs(ctx *context.APIContext) { func ListMyOrgs(ctx *context.APIContext) {
listUserOrgs(ctx, ctx.User, true) listUserOrgs(ctx, ctx.User, true)
} }
// https://github.com/gogits/go-gogs-client/wiki/Organizations#list-user-organizations // ListUserOrgs list user's orgs
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#list-user-organizations
func ListUserOrgs(ctx *context.APIContext) { func ListUserOrgs(ctx *context.APIContext) {
u := user.GetUserByParams(ctx) u := user.GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -40,12 +42,14 @@ func ListUserOrgs(ctx *context.APIContext) {
listUserOrgs(ctx, u, false) listUserOrgs(ctx, u, false)
} }
// https://github.com/gogits/go-gogs-client/wiki/Organizations#get-an-organization // Get get an organization
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#get-an-organization
func Get(ctx *context.APIContext) { func Get(ctx *context.APIContext) {
ctx.JSON(200, convert.ToOrganization(ctx.Org.Organization)) ctx.JSON(200, convert.ToOrganization(ctx.Org.Organization))
} }
// https://github.com/gogits/go-gogs-client/wiki/Organizations#edit-an-organization // Edit change an organization's information
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#edit-an-organization
func Edit(ctx *context.APIContext, form api.EditOrgOption) { func Edit(ctx *context.APIContext, form api.EditOrgOption) {
org := ctx.Org.Organization org := ctx.Org.Organization
if !org.IsOwnedBy(ctx.User.ID) { if !org.IsOwnedBy(ctx.User.ID) {

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/convert"
) )
// ListTeams list all the teams of an organization
func ListTeams(ctx *context.APIContext) { func ListTeams(ctx *context.APIContext) {
org := ctx.Org.Organization org := ctx.Org.Organization
if err := org.GetTeams(); err != nil { if err := org.GetTeams(); err != nil {

@ -11,7 +11,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/convert"
) )
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch // GetBranch get a branch of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch
func GetBranch(ctx *context.APIContext) { func GetBranch(ctx *context.APIContext) {
branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname")) branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname"))
if err != nil { if err != nil {
@ -28,7 +29,8 @@ func GetBranch(ctx *context.APIContext) {
ctx.JSON(200, convert.ToBranch(branch, c)) ctx.JSON(200, convert.ToBranch(branch, c))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-branches // ListBranches list all the branches of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-branches
func ListBranches(ctx *context.APIContext) { func ListBranches(ctx *context.APIContext) {
branches, err := ctx.Repo.Repository.GetBranches() branches, err := ctx.Repo.Repository.GetBranches()
if err != nil { if err != nil {

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// AddCollaborator add a collaborator of a repository
func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) { func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) {
collaborator, err := models.GetUserByName(ctx.Params(":collaborator")) collaborator, err := models.GetUserByName(ctx.Params(":collaborator"))
if err != nil { if err != nil {

@ -12,7 +12,8 @@ import (
"code.gitea.io/gitea/routers/repo" "code.gitea.io/gitea/routers/repo"
) )
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-raw-content // GetRawFile get a file by path on a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-raw-content
func GetRawFile(ctx *context.APIContext) { func GetRawFile(ctx *context.APIContext) {
if !ctx.Repo.HasAccess() { if !ctx.Repo.HasAccess() {
ctx.Status(404) ctx.Status(404)
@ -33,7 +34,8 @@ func GetRawFile(ctx *context.APIContext) {
} }
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-archive // GetArchive get archive of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-archive
func GetArchive(ctx *context.APIContext) { func GetArchive(ctx *context.APIContext) {
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame"))
gitRepo, err := git.OpenRepository(repoPath) gitRepo, err := git.OpenRepository(repoPath)
@ -46,6 +48,7 @@ func GetArchive(ctx *context.APIContext) {
repo.Download(ctx.Context) repo.Download(ctx.Context)
} }
// GetEditorconfig get editor config of a repository
func GetEditorconfig(ctx *context.APIContext) { func GetEditorconfig(ctx *context.APIContext) {
ec, err := ctx.Repo.GetEditorconfig() ec, err := ctx.Repo.GetEditorconfig()
if err != nil { if err != nil {

@ -16,7 +16,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/convert"
) )
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-hooks // ListHooks list all hooks of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-hooks
func ListHooks(ctx *context.APIContext) { func ListHooks(ctx *context.APIContext) {
hooks, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID) hooks, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID)
if err != nil { if err != nil {
@ -31,7 +32,8 @@ func ListHooks(ctx *context.APIContext) {
ctx.JSON(200, &apiHooks) ctx.JSON(200, &apiHooks)
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook // CreateHook create a hook for a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook
func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { func CreateHook(ctx *context.APIContext, form api.CreateHookOption) {
if !models.IsValidHookTaskType(form.Type) { if !models.IsValidHookTaskType(form.Type) {
ctx.Error(422, "", "Invalid hook type") ctx.Error(422, "", "Invalid hook type")
@ -97,7 +99,8 @@ func CreateHook(ctx *context.APIContext, form api.CreateHookOption) {
ctx.JSON(201, convert.ToHook(ctx.Repo.RepoLink, w)) ctx.JSON(201, convert.ToHook(ctx.Repo.RepoLink, w))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#edit-a-hook // EditHook modify a hook of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#edit-a-hook
func EditHook(ctx *context.APIContext, form api.EditHookOption) { func EditHook(ctx *context.APIContext, form api.EditHookOption) {
w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -165,6 +168,7 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) {
ctx.JSON(200, convert.ToHook(ctx.Repo.RepoLink, w)) ctx.JSON(200, convert.ToHook(ctx.Repo.RepoLink, w))
} }
// DeleteHook delete a hook of a repository
func DeleteHook(ctx *context.APIContext) { func DeleteHook(ctx *context.APIContext) {
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil {
ctx.Error(500, "DeleteWebhookByRepoID", err) ctx.Error(500, "DeleteWebhookByRepoID", err)

@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
) )
// ListIssues list the issues of a repository
func ListIssues(ctx *context.APIContext) { func ListIssues(ctx *context.APIContext) {
issues, err := models.Issues(&models.IssuesOptions{ issues, err := models.Issues(&models.IssuesOptions{
RepoID: ctx.Repo.Repository.ID, RepoID: ctx.Repo.Repository.ID,
@ -39,6 +40,7 @@ func ListIssues(ctx *context.APIContext) {
ctx.JSON(200, &apiIssues) ctx.JSON(200, &apiIssues)
} }
// GetIssue get an issue of a repository
func GetIssue(ctx *context.APIContext) { func GetIssue(ctx *context.APIContext) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil { if err != nil {
@ -52,6 +54,7 @@ func GetIssue(ctx *context.APIContext) {
ctx.JSON(200, issue.APIFormat()) ctx.JSON(200, issue.APIFormat())
} }
// CreateIssue create an issue of a repository
func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) {
issue := &models.Issue{ issue := &models.Issue{
RepoID: ctx.Repo.Repository.ID, RepoID: ctx.Repo.Repository.ID,
@ -101,6 +104,7 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) {
ctx.JSON(201, issue.APIFormat()) ctx.JSON(201, issue.APIFormat())
} }
// EditIssue modify an issue of a repository
func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { func EditIssue(ctx *context.APIContext, form api.EditIssueOption) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil { if err != nil {

@ -1,6 +1,7 @@
// Copyright 2015 The Gogs Authors. All rights reserved. // Copyright 2015 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style // Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package repo package repo
import ( import (
@ -12,6 +13,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// ListIssueComments list all the comments of an issue
func ListIssueComments(ctx *context.APIContext) { func ListIssueComments(ctx *context.APIContext) {
var since time.Time var since time.Time
if len(ctx.Query("since")) > 0 { if len(ctx.Query("since")) > 0 {
@ -38,6 +40,7 @@ func ListIssueComments(ctx *context.APIContext) {
ctx.JSON(200, &apiComments) ctx.JSON(200, &apiComments)
} }
// CreateIssueComment create a comment for an issue
func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOption) { func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOption) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil { if err != nil {
@ -54,6 +57,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti
ctx.JSON(201, comment.APIFormat()) ctx.JSON(201, comment.APIFormat())
} }
// EditIssueComment modify a comment of an issue
func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) {
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) comment, err := models.GetCommentByID(ctx.ParamsInt64(":id"))
if err != nil { if err != nil {

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// ListIssueLabels list all the labels of an issue
func ListIssueLabels(ctx *context.APIContext) { func ListIssueLabels(ctx *context.APIContext) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil { if err != nil {
@ -29,6 +30,7 @@ func ListIssueLabels(ctx *context.APIContext) {
ctx.JSON(200, &apiLabels) ctx.JSON(200, &apiLabels)
} }
// AddIssueLabels add labels for an issue
func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)
@ -69,6 +71,7 @@ func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) {
ctx.JSON(200, &apiLabels) ctx.JSON(200, &apiLabels)
} }
// DeleteIssueLabel delete a label for an issue
func DeleteIssueLabel(ctx *context.APIContext) { func DeleteIssueLabel(ctx *context.APIContext) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)
@ -103,6 +106,7 @@ func DeleteIssueLabel(ctx *context.APIContext) {
ctx.Status(204) ctx.Status(204)
} }
// ReplaceIssueLabels replace labels for an issue
func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)
@ -143,6 +147,7 @@ func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) {
ctx.JSON(200, &apiLabels) ctx.JSON(200, &apiLabels)
} }
// ClearIssueLabels delete all the labels for an issue
func ClearIssueLabels(ctx *context.APIContext) { func ClearIssueLabels(ctx *context.APIContext) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)

@ -19,7 +19,8 @@ func composeDeployKeysAPILink(repoPath string) string {
return setting.AppUrl + "api/v1/repos/" + repoPath + "/keys/" return setting.AppUrl + "api/v1/repos/" + repoPath + "/keys/"
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#list-deploy-keys // ListDeployKeys list all the deploy keys of a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#list-deploy-keys
func ListDeployKeys(ctx *context.APIContext) { func ListDeployKeys(ctx *context.APIContext) {
keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID)
if err != nil { if err != nil {
@ -40,7 +41,8 @@ func ListDeployKeys(ctx *context.APIContext) {
ctx.JSON(200, &apiKeys) ctx.JSON(200, &apiKeys)
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#get-a-deploy-key // GetDeployKey get a deploy key by id
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#get-a-deploy-key
func GetDeployKey(ctx *context.APIContext) { func GetDeployKey(ctx *context.APIContext) {
key, err := models.GetDeployKeyByID(ctx.ParamsInt64(":id")) key, err := models.GetDeployKeyByID(ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -61,6 +63,7 @@ func GetDeployKey(ctx *context.APIContext) {
ctx.JSON(200, convert.ToDeployKey(apiLink, key)) ctx.JSON(200, convert.ToDeployKey(apiLink, key))
} }
// HandleCheckKeyStringError handle check key error
func HandleCheckKeyStringError(ctx *context.APIContext, err error) { func HandleCheckKeyStringError(ctx *context.APIContext, err error) {
if models.IsErrKeyUnableVerify(err) { if models.IsErrKeyUnableVerify(err) {
ctx.Error(422, "", "Unable to verify key content") ctx.Error(422, "", "Unable to verify key content")
@ -69,6 +72,7 @@ func HandleCheckKeyStringError(ctx *context.APIContext, err error) {
} }
} }
// HandleAddKeyError handle add key error
func HandleAddKeyError(ctx *context.APIContext, err error) { func HandleAddKeyError(ctx *context.APIContext, err error) {
switch { switch {
case models.IsErrKeyAlreadyExist(err): case models.IsErrKeyAlreadyExist(err):
@ -80,7 +84,8 @@ func HandleAddKeyError(ctx *context.APIContext, err error) {
} }
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#add-a-new-deploy-key // CreateDeployKey create deploy key for a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#add-a-new-deploy-key
func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) { func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) {
content, err := models.CheckPublicKeyString(form.Key) content, err := models.CheckPublicKeyString(form.Key)
if err != nil { if err != nil {
@ -99,7 +104,8 @@ func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) {
ctx.JSON(201, convert.ToDeployKey(apiLink, key)) ctx.JSON(201, convert.ToDeployKey(apiLink, key))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#remove-a-deploy-key // DeleteDeploykey delete deploy key for a repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#remove-a-deploy-key
func DeleteDeploykey(ctx *context.APIContext) { func DeleteDeploykey(ctx *context.APIContext) {
if err := models.DeleteDeployKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { if err := models.DeleteDeployKey(ctx.User, ctx.ParamsInt64(":id")); err != nil {
if models.IsErrKeyAccessDenied(err) { if models.IsErrKeyAccessDenied(err) {

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// ListLabels list all the labels of a repository
func ListLabels(ctx *context.APIContext) { func ListLabels(ctx *context.APIContext) {
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID)
if err != nil { if err != nil {
@ -25,6 +26,7 @@ func ListLabels(ctx *context.APIContext) {
ctx.JSON(200, &apiLabels) ctx.JSON(200, &apiLabels)
} }
// GetLabel get label by repository and label id
func GetLabel(ctx *context.APIContext) { func GetLabel(ctx *context.APIContext) {
label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -39,6 +41,7 @@ func GetLabel(ctx *context.APIContext) {
ctx.JSON(200, label.APIFormat()) ctx.JSON(200, label.APIFormat())
} }
// CreateLabel create a label for a repository
func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)
@ -57,6 +60,7 @@ func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) {
ctx.JSON(201, label.APIFormat()) ctx.JSON(201, label.APIFormat())
} }
// EditLabel modify a label for a repository
func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { func EditLabel(ctx *context.APIContext, form api.EditLabelOption) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)
@ -86,6 +90,7 @@ func EditLabel(ctx *context.APIContext, form api.EditLabelOption) {
ctx.JSON(200, label.APIFormat()) ctx.JSON(200, label.APIFormat())
} }
// DeleteLabel delete a label for a repository
func DeleteLabel(ctx *context.APIContext) { func DeleteLabel(ctx *context.APIContext) {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
ctx.Status(403) ctx.Status(403)

@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// ListMilestones list all the milestones for a repository
func ListMilestones(ctx *context.APIContext) { func ListMilestones(ctx *context.APIContext) {
milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID)
if err != nil { if err != nil {
@ -27,6 +28,7 @@ func ListMilestones(ctx *context.APIContext) {
ctx.JSON(200, &apiMilestones) ctx.JSON(200, &apiMilestones)
} }
// GetMilestone get a milestone for a repository
func GetMilestone(ctx *context.APIContext) { func GetMilestone(ctx *context.APIContext) {
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -40,6 +42,7 @@ func GetMilestone(ctx *context.APIContext) {
ctx.JSON(200, milestone.APIFormat()) ctx.JSON(200, milestone.APIFormat())
} }
// CreateMilestone create a milestone for a repository
func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) { func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) {
if form.Deadline == nil { if form.Deadline == nil {
defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local) defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local)
@ -60,6 +63,7 @@ func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) {
ctx.JSON(201, milestone.APIFormat()) ctx.JSON(201, milestone.APIFormat())
} }
// EditMilestone modify a milestone for a repository
func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) {
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -88,6 +92,7 @@ func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) {
ctx.JSON(200, milestone.APIFormat()) ctx.JSON(200, milestone.APIFormat())
} }
// DeleteMilestone delete a milestone for a repository
func DeleteMilestone(ctx *context.APIContext) { func DeleteMilestone(ctx *context.APIContext) {
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil {
ctx.Error(500, "DeleteMilestoneByRepoID", err) ctx.Error(500, "DeleteMilestoneByRepoID", err)

@ -17,7 +17,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/convert"
) )
// https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories // Search repositories via options
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories
func Search(ctx *context.APIContext) { func Search(ctx *context.APIContext) {
opts := &models.SearchRepoOptions{ opts := &models.SearchRepoOptions{
Keyword: path.Base(ctx.Query("q")), Keyword: path.Base(ctx.Query("q")),
@ -76,7 +77,8 @@ func Search(ctx *context.APIContext) {
}) })
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories // ListMyRepos list all my repositories
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories
func ListMyRepos(ctx *context.APIContext) { func ListMyRepos(ctx *context.APIContext) {
ownRepos, err := models.GetUserRepositories(ctx.User.ID, true, 1, ctx.User.NumRepos) ownRepos, err := models.GetUserRepositories(ctx.User.ID, true, 1, ctx.User.NumRepos)
if err != nil { if err != nil {
@ -109,6 +111,7 @@ func ListMyRepos(ctx *context.APIContext) {
ctx.JSON(200, &repos) ctx.JSON(200, &repos)
} }
// CreateUserRepo create a repository for a user
func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) {
repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ repo, err := models.CreateRepository(owner, models.CreateRepoOptions{
Name: opt.Name, Name: opt.Name,
@ -138,7 +141,8 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create // Create create one repository of mine
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create
func Create(ctx *context.APIContext, opt api.CreateRepoOption) { func Create(ctx *context.APIContext, opt api.CreateRepoOption) {
// Shouldn't reach this condition, but just in case. // Shouldn't reach this condition, but just in case.
if ctx.User.IsOrganization() { if ctx.User.IsOrganization() {
@ -148,6 +152,7 @@ func Create(ctx *context.APIContext, opt api.CreateRepoOption) {
CreateUserRepo(ctx, ctx.User, opt) CreateUserRepo(ctx, ctx.User, opt)
} }
// CreateOrgRepo create one repository of the organization
func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {
org, err := models.GetOrgByName(ctx.Params(":org")) org, err := models.GetOrgByName(ctx.Params(":org"))
if err != nil { if err != nil {
@ -166,7 +171,8 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {
CreateUserRepo(ctx, org, opt) CreateUserRepo(ctx, org, opt)
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#migrate // Migrate migrate remote git repository to gitea
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#migrate
func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
ctxUser := ctx.User ctxUser := ctx.User
// Not equal means context user is an organization, // Not equal means context user is an organization,
@ -238,13 +244,15 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true}))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get // Get get one repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get
func Get(ctx *context.APIContext) { func Get(ctx *context.APIContext) {
repo := ctx.Repo.Repository repo := ctx.Repo.Repository
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
} }
// https://github.com/gogits/go-gogs-client/wiki/Repositories#delete // Delete delete one repository
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete
func Delete(ctx *context.APIContext) { func Delete(ctx *context.APIContext) {
owner := ctx.Repo.Owner owner := ctx.Repo.Owner
repo := ctx.Repo.Repository repo := ctx.Repo.Repository

@ -11,7 +11,8 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// https://github.com/gogits/go-gogs-client/wiki/Users#list-access-tokens-for-a-user // ListAccessTokens list all the access tokens
// see https://github.com/gogits/go-gogs-client/wiki/Users#list-access-tokens-for-a-user
func ListAccessTokens(ctx *context.APIContext) { func ListAccessTokens(ctx *context.APIContext) {
tokens, err := models.ListAccessTokens(ctx.User.ID) tokens, err := models.ListAccessTokens(ctx.User.ID)
if err != nil { if err != nil {
@ -26,7 +27,8 @@ func ListAccessTokens(ctx *context.APIContext) {
ctx.JSON(200, &apiTokens) ctx.JSON(200, &apiTokens)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users#create-a-access-token // CreateAccessToken create access tokens
// see https://github.com/gogits/go-gogs-client/wiki/Users#create-a-access-token
func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption) { func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption) {
t := &models.AccessToken{ t := &models.AccessToken{
UID: ctx.User.ID, UID: ctx.User.ID,

@ -13,7 +13,8 @@ import (
"code.gitea.io/gitea/routers/api/v1/convert" "code.gitea.io/gitea/routers/api/v1/convert"
) )
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user // ListEmails list all the emails of mine
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user
func ListEmails(ctx *context.APIContext) { func ListEmails(ctx *context.APIContext) {
emails, err := models.GetEmailAddresses(ctx.User.ID) emails, err := models.GetEmailAddresses(ctx.User.ID)
if err != nil { if err != nil {
@ -27,7 +28,8 @@ func ListEmails(ctx *context.APIContext) {
ctx.JSON(200, &apiEmails) ctx.JSON(200, &apiEmails)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#add-email-addresses // AddEmail add email for me
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#add-email-addresses
func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) { func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) {
if len(form.Emails) == 0 { if len(form.Emails) == 0 {
ctx.Status(422) ctx.Status(422)
@ -59,7 +61,8 @@ func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) {
ctx.JSON(201, &apiEmails) ctx.JSON(201, &apiEmails)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#delete-email-addresses // DeleteEmail delete email
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#delete-email-addresses
func DeleteEmail(ctx *context.APIContext, form api.CreateEmailOption) { func DeleteEmail(ctx *context.APIContext, form api.CreateEmailOption) {
if len(form.Emails) == 0 { if len(form.Emails) == 0 {
ctx.Status(204) ctx.Status(204)

@ -11,7 +11,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
func responseApiUsers(ctx *context.APIContext, users []*models.User) { func responseAPIUsers(ctx *context.APIContext, users []*models.User) {
apiUsers := make([]*api.User, len(users)) apiUsers := make([]*api.User, len(users))
for i := range users { for i := range users {
apiUsers[i] = users[i].APIFormat() apiUsers[i] = users[i].APIFormat()
@ -25,14 +25,16 @@ func listUserFollowers(ctx *context.APIContext, u *models.User) {
ctx.Error(500, "GetUserFollowers", err) ctx.Error(500, "GetUserFollowers", err)
return return
} }
responseApiUsers(ctx, users) responseAPIUsers(ctx, users)
} }
// ListMyFollowers list all my followers
func ListMyFollowers(ctx *context.APIContext) { func ListMyFollowers(ctx *context.APIContext) {
listUserFollowers(ctx, ctx.User) listUserFollowers(ctx, ctx.User)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-followers-of-a-user // ListFollowers list user's followers
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-followers-of-a-user
func ListFollowers(ctx *context.APIContext) { func ListFollowers(ctx *context.APIContext) {
u := GetUserByParams(ctx) u := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -47,14 +49,16 @@ func listUserFollowing(ctx *context.APIContext, u *models.User) {
ctx.Error(500, "GetFollowing", err) ctx.Error(500, "GetFollowing", err)
return return
} }
responseApiUsers(ctx, users) responseAPIUsers(ctx, users)
} }
// ListMyFollowing list all my followings
func ListMyFollowing(ctx *context.APIContext) { func ListMyFollowing(ctx *context.APIContext) {
listUserFollowing(ctx, ctx.User) listUserFollowing(ctx, ctx.User)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-users-followed-by-another-user // ListFollowing list user's followings
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-users-followed-by-another-user
func ListFollowing(ctx *context.APIContext) { func ListFollowing(ctx *context.APIContext) {
u := GetUserByParams(ctx) u := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -71,7 +75,8 @@ func checkUserFollowing(ctx *context.APIContext, u *models.User, followID int64)
} }
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-you-are-following-a-user // CheckMyFollowing check if the repo is followed by me
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-you-are-following-a-user
func CheckMyFollowing(ctx *context.APIContext) { func CheckMyFollowing(ctx *context.APIContext) {
target := GetUserByParams(ctx) target := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -80,7 +85,8 @@ func CheckMyFollowing(ctx *context.APIContext) {
checkUserFollowing(ctx, ctx.User, target.ID) checkUserFollowing(ctx, ctx.User, target.ID)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-one-user-follows-another // CheckFollowing check if the repo is followed by user
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-one-user-follows-another
func CheckFollowing(ctx *context.APIContext) { func CheckFollowing(ctx *context.APIContext) {
u := GetUserByParams(ctx) u := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -93,7 +99,8 @@ func CheckFollowing(ctx *context.APIContext) {
checkUserFollowing(ctx, u, target.ID) checkUserFollowing(ctx, u, target.ID)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#follow-a-user // Follow follow one repository
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#follow-a-user
func Follow(ctx *context.APIContext) { func Follow(ctx *context.APIContext) {
target := GetUserByParams(ctx) target := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -106,7 +113,8 @@ func Follow(ctx *context.APIContext) {
ctx.Status(204) ctx.Status(204)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#unfollow-a-user // Unfollow unfollow one repository
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#unfollow-a-user
func Unfollow(ctx *context.APIContext) { func Unfollow(ctx *context.APIContext) {
target := GetUserByParams(ctx) target := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {

@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/routers/api/v1/repo" "code.gitea.io/gitea/routers/api/v1/repo"
) )
// GetUserByParamsName get user by name
func GetUserByParamsName(ctx *context.APIContext, name string) *models.User { func GetUserByParamsName(ctx *context.APIContext, name string) *models.User {
user, err := models.GetUserByName(ctx.Params(name)) user, err := models.GetUserByName(ctx.Params(name))
if err != nil { if err != nil {
@ -52,12 +53,14 @@ func listPublicKeys(ctx *context.APIContext, uid int64) {
ctx.JSON(200, &apiKeys) ctx.JSON(200, &apiKeys)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-your-public-keys // ListMyPublicKeys list all my public keys
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-your-public-keys
func ListMyPublicKeys(ctx *context.APIContext) { func ListMyPublicKeys(ctx *context.APIContext) {
listPublicKeys(ctx, ctx.User.ID) listPublicKeys(ctx, ctx.User.ID)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-public-keys-for-a-user // ListPublicKeys list all user's public keys
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-public-keys-for-a-user
func ListPublicKeys(ctx *context.APIContext) { func ListPublicKeys(ctx *context.APIContext) {
user := GetUserByParams(ctx) user := GetUserByParams(ctx)
if ctx.Written() { if ctx.Written() {
@ -66,7 +69,8 @@ func ListPublicKeys(ctx *context.APIContext) {
listPublicKeys(ctx, user.ID) listPublicKeys(ctx, user.ID)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#get-a-single-public-key // GetPublicKey get one public key
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#get-a-single-public-key
func GetPublicKey(ctx *context.APIContext) { func GetPublicKey(ctx *context.APIContext) {
key, err := models.GetPublicKeyByID(ctx.ParamsInt64(":id")) key, err := models.GetPublicKeyByID(ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -99,12 +103,14 @@ func CreateUserPublicKey(ctx *context.APIContext, form api.CreateKeyOption, uid
ctx.JSON(201, convert.ToPublicKey(apiLink, key)) ctx.JSON(201, convert.ToPublicKey(apiLink, key))
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key // CreatePublicKey create one public key for me
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key
func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) {
CreateUserPublicKey(ctx, form, ctx.User.ID) CreateUserPublicKey(ctx, form, ctx.User.ID)
} }
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#delete-a-public-key // DeletePublicKey delete one public key of mine
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#delete-a-public-key
func DeletePublicKey(ctx *context.APIContext) { func DeletePublicKey(ctx *context.APIContext) {
if err := models.DeletePublicKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { if err := models.DeletePublicKey(ctx.User, ctx.ParamsInt64(":id")); err != nil {
if models.IsErrKeyAccessDenied(err) { if models.IsErrKeyAccessDenied(err) {

@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// Search search users
func Search(ctx *context.APIContext) { func Search(ctx *context.APIContext) {
opts := &models.SearchUserOptions{ opts := &models.SearchUserOptions{
Keyword: ctx.Query("q"), Keyword: ctx.Query("q"),
@ -51,6 +52,7 @@ func Search(ctx *context.APIContext) {
}) })
} }
// GetInfo get user's information
func GetInfo(ctx *context.APIContext) { func GetInfo(ctx *context.APIContext) {
u, err := models.GetUserByName(ctx.Params(":username")) u, err := models.GetUserByName(ctx.Params(":username"))
if err != nil { if err != nil {
@ -69,6 +71,7 @@ func GetInfo(ctx *context.APIContext) {
ctx.JSON(200, u.APIFormat()) ctx.JSON(200, u.APIFormat())
} }
// GetAuthenticatedUser get curent user's information
func GetAuthenticatedUser(ctx *context.APIContext) { func GetAuthenticatedUser(ctx *context.APIContext) {
ctx.JSON(200, ctx.User.APIFormat()) ctx.JSON(200, ctx.User.APIFormat())
} }

@ -17,10 +17,11 @@ import (
) )
const ( const (
COMMITS base.TplName = "repo/commits" tplCommits base.TplName = "repo/commits"
DIFF base.TplName = "repo/diff/page" tplDiff base.TplName = "repo/diff/page"
) )
// RefCommits render commits page
func RefCommits(ctx *context.Context) { func RefCommits(ctx *context.Context) {
switch { switch {
case len(ctx.Repo.TreePath) == 0: case len(ctx.Repo.TreePath) == 0:
@ -32,7 +33,7 @@ func RefCommits(ctx *context.Context) {
} }
} }
func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { func renderIssueLinks(oldCommits *list.List, repoLink string) *list.List {
newCommits := list.New() newCommits := list.New()
for e := oldCommits.Front(); e != nil; e = e.Next() { for e := oldCommits.Front(); e != nil; e = e.Next() {
c := e.Value.(*git.Commit) c := e.Value.(*git.Commit)
@ -41,6 +42,7 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List {
return newCommits return newCommits
} }
// Commits render branch's commits
func Commits(ctx *context.Context) { func Commits(ctx *context.Context) {
ctx.Data["PageIsCommits"] = true ctx.Data["PageIsCommits"] = true
@ -62,7 +64,7 @@ func Commits(ctx *context.Context) {
ctx.Handle(500, "CommitsByRange", err) ctx.Handle(500, "CommitsByRange", err)
return return
} }
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) commits = renderIssueLinks(commits, ctx.Repo.RepoLink)
commits = models.ValidateCommitsWithEmails(commits) commits = models.ValidateCommitsWithEmails(commits)
ctx.Data["Commits"] = commits ctx.Data["Commits"] = commits
@ -70,9 +72,10 @@ func Commits(ctx *context.Context) {
ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name
ctx.Data["CommitCount"] = commitsCount ctx.Data["CommitCount"] = commitsCount
ctx.Data["Branch"] = ctx.Repo.BranchName ctx.Data["Branch"] = ctx.Repo.BranchName
ctx.HTML(200, COMMITS) ctx.HTML(200, tplCommits)
} }
// SearchCommits render commits filtered by keyword
func SearchCommits(ctx *context.Context) { func SearchCommits(ctx *context.Context) {
ctx.Data["PageIsCommits"] = true ctx.Data["PageIsCommits"] = true
@ -87,7 +90,7 @@ func SearchCommits(ctx *context.Context) {
ctx.Handle(500, "SearchCommits", err) ctx.Handle(500, "SearchCommits", err)
return return
} }
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) commits = renderIssueLinks(commits, ctx.Repo.RepoLink)
commits = models.ValidateCommitsWithEmails(commits) commits = models.ValidateCommitsWithEmails(commits)
ctx.Data["Commits"] = commits ctx.Data["Commits"] = commits
@ -96,9 +99,10 @@ func SearchCommits(ctx *context.Context) {
ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name
ctx.Data["CommitCount"] = commits.Len() ctx.Data["CommitCount"] = commits.Len()
ctx.Data["Branch"] = ctx.Repo.BranchName ctx.Data["Branch"] = ctx.Repo.BranchName
ctx.HTML(200, COMMITS) ctx.HTML(200, tplCommits)
} }
// FileHistory show a file's reversions
func FileHistory(ctx *context.Context) { func FileHistory(ctx *context.Context) {
ctx.Data["IsRepoToolbarCommits"] = true ctx.Data["IsRepoToolbarCommits"] = true
@ -129,7 +133,7 @@ func FileHistory(ctx *context.Context) {
ctx.Handle(500, "CommitsByFileAndRange", err) ctx.Handle(500, "CommitsByFileAndRange", err)
return return
} }
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) commits = renderIssueLinks(commits, ctx.Repo.RepoLink)
commits = models.ValidateCommitsWithEmails(commits) commits = models.ValidateCommitsWithEmails(commits)
ctx.Data["Commits"] = commits ctx.Data["Commits"] = commits
@ -138,9 +142,10 @@ func FileHistory(ctx *context.Context) {
ctx.Data["FileName"] = fileName ctx.Data["FileName"] = fileName
ctx.Data["CommitCount"] = commitsCount ctx.Data["CommitCount"] = commitsCount
ctx.Data["Branch"] = branchName ctx.Data["Branch"] = branchName
ctx.HTML(200, COMMITS) ctx.HTML(200, tplCommits)
} }
// Diff show different from current commit to previous commit
func Diff(ctx *context.Context) { func Diff(ctx *context.Context) {
ctx.Data["PageIsDiff"] = true ctx.Data["PageIsDiff"] = true
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
@ -194,9 +199,10 @@ func Diff(ctx *context.Context) {
ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", parents[0]) ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", parents[0])
} }
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitID) ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitID)
ctx.HTML(200, DIFF) ctx.HTML(200, tplDiff)
} }
// RawDiff dumps diff results of repository in given commit ID to io.Writer
func RawDiff(ctx *context.Context) { func RawDiff(ctx *context.Context) {
if err := models.GetRawDiff( if err := models.GetRawDiff(
models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name),
@ -209,6 +215,7 @@ func RawDiff(ctx *context.Context) {
} }
} }
// CompareDiff show different from one commit to another commit
func CompareDiff(ctx *context.Context) { func CompareDiff(ctx *context.Context) {
ctx.Data["IsRepoToolbarCommits"] = true ctx.Data["IsRepoToolbarCommits"] = true
ctx.Data["IsDiffCompare"] = true ctx.Data["IsDiffCompare"] = true
@ -253,5 +260,5 @@ func CompareDiff(ctx *context.Context) {
ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitID) ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitID)
ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitID) ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitID)
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitID) ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitID)
ctx.HTML(200, DIFF) ctx.HTML(200, tplDiff)
} }

@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
) )
// ServeData download file from io.Reader
func ServeData(ctx *context.Context, name string, reader io.Reader) error { func ServeData(ctx *context.Context, name string, reader io.Reader) error {
buf := make([]byte, 1024) buf := make([]byte, 1024)
n, _ := reader.Read(buf) n, _ := reader.Read(buf)
@ -34,6 +35,7 @@ func ServeData(ctx *context.Context, name string, reader io.Reader) error {
return err return err
} }
// ServeBlob download a git.Blob
func ServeBlob(ctx *context.Context, blob *git.Blob) error { func ServeBlob(ctx *context.Context, blob *git.Blob) error {
dataRc, err := blob.Data() dataRc, err := blob.Data()
if err != nil { if err != nil {
@ -43,6 +45,7 @@ func ServeBlob(ctx *context.Context, blob *git.Blob) error {
return ServeData(ctx, ctx.Repo.TreePath, dataRc) return ServeData(ctx, ctx.Repo.TreePath, dataRc)
} }
// SingleDownload download a file by repos path
func SingleDownload(ctx *context.Context) { func SingleDownload(ctx *context.Context) {
blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreePath) blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreePath)
if err != nil { if err != nil {

@ -22,10 +22,10 @@ import (
) )
const ( const (
EDIT_FILE base.TplName = "repo/editor/edit" tplEditFile base.TplName = "repo/editor/edit"
EDIT_DIFF_PREVIEW base.TplName = "repo/editor/diff_preview" tplEditDiffPreview base.TplName = "repo/editor/diff_preview"
DELETE_FILE base.TplName = "repo/editor/delete" tplDeleteFile base.TplName = "repo/editor/delete"
UPLOAD_FILE base.TplName = "repo/editor/upload" tplUploadFile base.TplName = "repo/editor/upload"
) )
func editFile(ctx *context.Context, isNewFile bool) { func editFile(ctx *context.Context, isNewFile bool) {
@ -98,13 +98,15 @@ func editFile(ctx *context.Context, isNewFile bool) {
ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",")
ctx.Data["EditorconfigURLPrefix"] = fmt.Sprintf("%s/api/v1/repos/%s/editorconfig/", setting.AppSubUrl, ctx.Repo.Repository.FullName()) ctx.Data["EditorconfigURLPrefix"] = fmt.Sprintf("%s/api/v1/repos/%s/editorconfig/", setting.AppSubUrl, ctx.Repo.Repository.FullName())
ctx.HTML(200, EDIT_FILE) ctx.HTML(200, tplEditFile)
} }
// EditFile render edit file page
func EditFile(ctx *context.Context) { func EditFile(ctx *context.Context) {
editFile(ctx, false) editFile(ctx, false)
} }
// NewFile render create file page
func NewFile(ctx *context.Context) { func NewFile(ctx *context.Context) {
editFile(ctx, true) editFile(ctx, true)
} }
@ -146,20 +148,20 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",")
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, EDIT_FILE) ctx.HTML(200, tplEditFile)
return return
} }
if len(form.TreePath) == 0 { if len(form.TreePath) == 0 {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_cannot_be_empty"), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.filename_cannot_be_empty"), tplEditFile, &form)
return return
} }
if oldBranchName != branchName { if oldBranchName != branchName {
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil {
ctx.Data["Err_NewBranchName"] = true ctx.Data["Err_NewBranchName"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplEditFile, &form)
return return
} }
} }
@ -180,13 +182,13 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
if index != len(treeNames)-1 { if index != len(treeNames)-1 {
if !entry.IsDir() { if !entry.IsDir() {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplEditFile, &form)
return return
} }
} else { } else {
if entry.IsDir() { if entry.IsDir() {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", part), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", part), tplEditFile, &form)
return return
} }
} }
@ -197,7 +199,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
if err != nil { if err != nil {
if git.IsErrNotExist(err) { if git.IsErrNotExist(err) {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.file_editing_no_longer_exists", oldTreePath), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.file_editing_no_longer_exists", oldTreePath), tplEditFile, &form)
} else { } else {
ctx.Handle(500, "GetTreeEntryByPath", err) ctx.Handle(500, "GetTreeEntryByPath", err)
} }
@ -212,7 +214,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
for _, file := range files { for _, file := range files {
if file == form.TreePath { if file == form.TreePath {
ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+lastCommit+"..."+ctx.Repo.CommitID), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+lastCommit+"..."+ctx.Repo.CommitID), tplEditFile, &form)
return return
} }
} }
@ -230,7 +232,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
} }
if entry != nil { if entry != nil {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), tplEditFile, &form)
return return
} }
} }
@ -260,21 +262,24 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
IsNewFile: isNewFile, IsNewFile: isNewFile,
}); err != nil { }); err != nil {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_update_file", form.TreePath, err), EDIT_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_update_file", form.TreePath, err), tplEditFile, &form)
return return
} }
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + strings.NewReplacer("%", "%25", "#", "%23", " ", "%20", "?", "%3F").Replace(form.TreePath)) ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + strings.NewReplacer("%", "%25", "#", "%23", " ", "%20", "?", "%3F").Replace(form.TreePath))
} }
// EditFilePost response for editing file
func EditFilePost(ctx *context.Context, form auth.EditRepoFileForm) { func EditFilePost(ctx *context.Context, form auth.EditRepoFileForm) {
editFilePost(ctx, form, false) editFilePost(ctx, form, false)
} }
// NewFilePost response for creating file
func NewFilePost(ctx *context.Context, form auth.EditRepoFileForm) { func NewFilePost(ctx *context.Context, form auth.EditRepoFileForm) {
editFilePost(ctx, form, true) editFilePost(ctx, form, true)
} }
// DiffPreviewPost render preview diff page
func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) {
treePath := ctx.Repo.TreePath treePath := ctx.Repo.TreePath
@ -299,9 +304,10 @@ func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) {
} }
ctx.Data["File"] = diff.Files[0] ctx.Data["File"] = diff.Files[0]
ctx.HTML(200, EDIT_DIFF_PREVIEW) ctx.HTML(200, tplEditDiffPreview)
} }
// DeleteFile render delete file page
func DeleteFile(ctx *context.Context) { func DeleteFile(ctx *context.Context) {
ctx.Data["PageIsDelete"] = true ctx.Data["PageIsDelete"] = true
ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName
@ -310,9 +316,10 @@ func DeleteFile(ctx *context.Context) {
ctx.Data["commit_message"] = "" ctx.Data["commit_message"] = ""
ctx.Data["commit_choice"] = "direct" ctx.Data["commit_choice"] = "direct"
ctx.Data["new_branch_name"] = "" ctx.Data["new_branch_name"] = ""
ctx.HTML(200, DELETE_FILE) ctx.HTML(200, tplDeleteFile)
} }
// DeleteFilePost response for deleting file
func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) {
ctx.Data["PageIsDelete"] = true ctx.Data["PageIsDelete"] = true
ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName
@ -330,14 +337,14 @@ func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) {
ctx.Data["new_branch_name"] = branchName ctx.Data["new_branch_name"] = branchName
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, DELETE_FILE) ctx.HTML(200, tplDeleteFile)
return return
} }
if oldBranchName != branchName { if oldBranchName != branchName {
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil {
ctx.Data["Err_NewBranchName"] = true ctx.Data["Err_NewBranchName"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), DELETE_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplDeleteFile, &form)
return return
} }
} }
@ -374,6 +381,7 @@ func renderUploadSettings(ctx *context.Context) {
ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles
} }
// UploadFile render upload file page
func UploadFile(ctx *context.Context) { func UploadFile(ctx *context.Context) {
ctx.Data["PageIsUpload"] = true ctx.Data["PageIsUpload"] = true
renderUploadSettings(ctx) renderUploadSettings(ctx)
@ -391,9 +399,10 @@ func UploadFile(ctx *context.Context) {
ctx.Data["commit_choice"] = "direct" ctx.Data["commit_choice"] = "direct"
ctx.Data["new_branch_name"] = "" ctx.Data["new_branch_name"] = ""
ctx.HTML(200, UPLOAD_FILE) ctx.HTML(200, tplUploadFile)
} }
// UploadFilePost response for uploading file
func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
ctx.Data["PageIsUpload"] = true ctx.Data["PageIsUpload"] = true
renderUploadSettings(ctx) renderUploadSettings(ctx)
@ -422,14 +431,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
ctx.Data["new_branch_name"] = branchName ctx.Data["new_branch_name"] = branchName
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, UPLOAD_FILE) ctx.HTML(200, tplUploadFile)
return return
} }
if oldBranchName != branchName { if oldBranchName != branchName {
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil {
ctx.Data["Err_NewBranchName"] = true ctx.Data["Err_NewBranchName"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), UPLOAD_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplUploadFile, &form)
return return
} }
} }
@ -451,7 +460,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
// User can only upload files to a directory. // User can only upload files to a directory.
if !entry.IsDir() { if !entry.IsDir() {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), UPLOAD_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplUploadFile, &form)
return return
} }
} }
@ -475,13 +484,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
Files: form.Files, Files: form.Files,
}); err != nil { }); err != nil {
ctx.Data["Err_TreePath"] = true ctx.Data["Err_TreePath"] = true
ctx.RenderWithErr(ctx.Tr("repo.editor.unable_to_upload_files", form.TreePath, err), UPLOAD_FILE, &form) ctx.RenderWithErr(ctx.Tr("repo.editor.unable_to_upload_files", form.TreePath, err), tplUploadFile, &form)
return return
} }
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath) ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath)
} }
// UploadFileToServer upload file to server file dir not git
func UploadFileToServer(ctx *context.Context) { func UploadFileToServer(ctx *context.Context) {
file, header, err := ctx.Req.FormFile("file") file, header, err := ctx.Req.FormFile("file")
if err != nil { if err != nil {
@ -525,6 +535,7 @@ func UploadFileToServer(ctx *context.Context) {
}) })
} }
// RemoveUploadFileFromServer remove file from server file dir
func RemoveUploadFileFromServer(ctx *context.Context, form auth.RemoveUploadFileForm) { func RemoveUploadFileFromServer(ctx *context.Context, form auth.RemoveUploadFileForm) {
if len(form.File) == 0 { if len(form.File) == 0 {
ctx.Status(204) ctx.Status(204)

@ -29,6 +29,7 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
) )
// HTTP implmentation git smart HTTP protocol
func HTTP(ctx *context.Context) { func HTTP(ctx *context.Context) {
username := ctx.Params(":username") username := ctx.Params(":username")
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git")
@ -170,7 +171,7 @@ func HTTP(ctx *context.Context) {
return return
} }
var lastLine int64 = 0 var lastLine int64
for { for {
head := input[lastLine : lastLine+2] head := input[lastLine : lastLine+2]
if head[0] == '0' && head[1] == '0' { if head[0] == '0' && head[1] == '0' {
@ -193,15 +194,15 @@ func HTTP(ctx *context.Context) {
fields := strings.Fields(string(line)) fields := strings.Fields(string(line))
if len(fields) >= 3 { if len(fields) >= 3 {
oldCommitId := fields[0][4:] oldCommitID := fields[0][4:]
newCommitId := fields[1] newCommitID := fields[1]
refFullName := fields[2] refFullName := fields[2]
// FIXME: handle error. // FIXME: handle error.
if err = models.PushUpdate(models.PushUpdateOptions{ if err = models.PushUpdate(models.PushUpdateOptions{
RefFullName: refFullName, RefFullName: refFullName,
OldCommitID: oldCommitId, OldCommitID: oldCommitID,
NewCommitID: newCommitId, NewCommitID: newCommitID,
PusherID: authUser.ID, PusherID: authUser.ID,
PusherName: authUser.Name, PusherName: authUser.Name,
RepoUserName: username, RepoUserName: username,
@ -474,6 +475,7 @@ func getGitRepoPath(subdir string) (string, error) {
return fpath, nil return fpath, nil
} }
// HTTPBackend middleware for git smart HTTP protocol
func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc { func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
for _, route := range routes { for _, route := range routes {

@ -27,23 +27,25 @@ import (
) )
const ( const (
ISSUES base.TplName = "repo/issue/list" tplIssues base.TplName = "repo/issue/list"
ISSUE_NEW base.TplName = "repo/issue/new" tplIssueNew base.TplName = "repo/issue/new"
ISSUE_VIEW base.TplName = "repo/issue/view" tplIssueView base.TplName = "repo/issue/view"
LABELS base.TplName = "repo/issue/labels" tplLabels base.TplName = "repo/issue/labels"
MILESTONE base.TplName = "repo/issue/milestones" tplMilestone base.TplName = "repo/issue/milestones"
MILESTONE_NEW base.TplName = "repo/issue/milestone_new" tplMilestoneNew base.TplName = "repo/issue/milestone_new"
MILESTONE_EDIT base.TplName = "repo/issue/milestone_edit" tplMilestoneEdit base.TplName = "repo/issue/milestone_edit"
ISSUE_TEMPLATE_KEY = "IssueTemplate" issueTemplateKey = "IssueTemplate"
) )
var ( var (
// ErrFileTypeForbidden not allowed file type error
ErrFileTypeForbidden = errors.New("File type is not allowed") ErrFileTypeForbidden = errors.New("File type is not allowed")
// ErrTooManyFiles upload too many files
ErrTooManyFiles = errors.New("Maximum number of files to upload exceeded") ErrTooManyFiles = errors.New("Maximum number of files to upload exceeded")
// IssueTemplateCandidates issue templates
IssueTemplateCandidates = []string{ IssueTemplateCandidates = []string{
"ISSUE_TEMPLATE.md", "ISSUE_TEMPLATE.md",
".gogs/ISSUE_TEMPLATE.md", ".gogs/ISSUE_TEMPLATE.md",
@ -51,6 +53,7 @@ var (
} }
) )
// MustEnableIssues check if repository enable internal issues
func MustEnableIssues(ctx *context.Context) { func MustEnableIssues(ctx *context.Context) {
if !ctx.Repo.Repository.EnableIssues { if !ctx.Repo.Repository.EnableIssues {
ctx.Handle(404, "MustEnableIssues", nil) ctx.Handle(404, "MustEnableIssues", nil)
@ -63,6 +66,7 @@ func MustEnableIssues(ctx *context.Context) {
} }
} }
// MustAllowPulls check if repository enable pull requests
func MustAllowPulls(ctx *context.Context) { func MustAllowPulls(ctx *context.Context) {
if !ctx.Repo.Repository.AllowsPulls() { if !ctx.Repo.Repository.AllowsPulls() {
ctx.Handle(404, "MustAllowPulls", nil) ctx.Handle(404, "MustAllowPulls", nil)
@ -76,6 +80,7 @@ func MustAllowPulls(ctx *context.Context) {
} }
} }
// RetrieveLabels find all the labels of a repository
func RetrieveLabels(ctx *context.Context) { func RetrieveLabels(ctx *context.Context) {
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID)
if err != nil { if err != nil {
@ -89,6 +94,7 @@ func RetrieveLabels(ctx *context.Context) {
ctx.Data["NumLabels"] = len(labels) ctx.Data["NumLabels"] = len(labels)
} }
// Issues render issues page
func Issues(ctx *context.Context) { func Issues(ctx *context.Context) {
isPullList := ctx.Params(":type") == "pulls" isPullList := ctx.Params(":type") == "pulls"
if isPullList { if isPullList {
@ -244,7 +250,7 @@ func Issues(ctx *context.Context) {
ctx.Data["State"] = "open" ctx.Data["State"] = "open"
} }
ctx.HTML(200, ISSUES) ctx.HTML(200, tplIssues)
} }
func renderAttachmentSettings(ctx *context.Context) { func renderAttachmentSettings(ctx *context.Context) {
@ -255,6 +261,7 @@ func renderAttachmentSettings(ctx *context.Context) {
ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles
} }
// RetrieveRepoMilestonesAndAssignees find all the milestones and assignees of a repository
func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) { func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) {
var err error var err error
ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false) ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false)
@ -275,6 +282,7 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repos
} }
} }
// RetrieveRepoMetas find all the meta information of a repository
func RetrieveRepoMetas(ctx *context.Context, repo *models.Repository) []*models.Label { func RetrieveRepoMetas(ctx *context.Context, repo *models.Repository) []*models.Label {
if !ctx.Repo.IsWriter() { if !ctx.Repo.IsWriter() {
return nil return nil
@ -332,12 +340,13 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
} }
} }
// NewIssue render createing issue page
func NewIssue(ctx *context.Context) { func NewIssue(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.issues.new") ctx.Data["Title"] = ctx.Tr("repo.issues.new")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
ctx.Data["RequireSimpleMDE"] = true ctx.Data["RequireSimpleMDE"] = true
setTemplateIfExists(ctx, ISSUE_TEMPLATE_KEY, IssueTemplateCandidates) setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates)
renderAttachmentSettings(ctx) renderAttachmentSettings(ctx)
RetrieveRepoMetas(ctx, ctx.Repo.Repository) RetrieveRepoMetas(ctx, ctx.Repo.Repository)
@ -345,9 +354,10 @@ func NewIssue(ctx *context.Context) {
return return
} }
ctx.HTML(200, ISSUE_NEW) ctx.HTML(200, tplIssueNew)
} }
// ValidateRepoMetas check and returns repository's meta informations
func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64, int64, int64) { func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64, int64, int64) {
var ( var (
repo = ctx.Repo.Repository repo = ctx.Repo.Repository
@ -402,6 +412,7 @@ func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64
return labelIDs, milestoneID, assigneeID return labelIDs, milestoneID, assigneeID
} }
// NewIssuePost response for creating new issue
func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) {
ctx.Data["Title"] = ctx.Tr("repo.issues.new") ctx.Data["Title"] = ctx.Tr("repo.issues.new")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
@ -424,7 +435,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) {
} }
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, ISSUE_NEW) ctx.HTML(200, tplIssueNew)
return return
} }
@ -446,6 +457,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
} }
// UploadIssueAttachment response for uploading issue's attachment
func UploadIssueAttachment(ctx *context.Context) { func UploadIssueAttachment(ctx *context.Context) {
if !setting.AttachmentEnabled { if !setting.AttachmentEnabled {
ctx.Error(404, "attachment is not enabled") ctx.Error(404, "attachment is not enabled")
@ -493,6 +505,7 @@ func UploadIssueAttachment(ctx *context.Context) {
}) })
} }
// ViewIssue render issue view page
func ViewIssue(ctx *context.Context) { func ViewIssue(ctx *context.Context) {
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
ctx.Data["RequireDropzone"] = true ctx.Data["RequireDropzone"] = true
@ -639,7 +652,7 @@ func ViewIssue(ctx *context.Context) {
ctx.Data["Issue"] = issue ctx.Data["Issue"] = issue
ctx.Data["IsIssueOwner"] = ctx.Repo.IsWriter() || (ctx.IsSigned && issue.IsPoster(ctx.User.ID)) ctx.Data["IsIssueOwner"] = ctx.Repo.IsWriter() || (ctx.IsSigned && issue.IsPoster(ctx.User.ID))
ctx.Data["SignInLink"] = setting.AppSubUrl + "/user/login?redirect_to=" + ctx.Data["Link"].(string) ctx.Data["SignInLink"] = setting.AppSubUrl + "/user/login?redirect_to=" + ctx.Data["Link"].(string)
ctx.HTML(200, ISSUE_VIEW) ctx.HTML(200, tplIssueView)
} }
func getActionIssue(ctx *context.Context) *models.Issue { func getActionIssue(ctx *context.Context) *models.Issue {
@ -655,6 +668,7 @@ func getActionIssue(ctx *context.Context) *models.Issue {
return issue return issue
} }
// UpdateIssueTitle change issue's title
func UpdateIssueTitle(ctx *context.Context) { func UpdateIssueTitle(ctx *context.Context) {
issue := getActionIssue(ctx) issue := getActionIssue(ctx)
if ctx.Written() { if ctx.Written() {
@ -682,6 +696,7 @@ func UpdateIssueTitle(ctx *context.Context) {
}) })
} }
// UpdateIssueContent change issue's content
func UpdateIssueContent(ctx *context.Context) { func UpdateIssueContent(ctx *context.Context) {
issue := getActionIssue(ctx) issue := getActionIssue(ctx)
if ctx.Written() { if ctx.Written() {
@ -704,6 +719,7 @@ func UpdateIssueContent(ctx *context.Context) {
}) })
} }
// UpdateIssueLabel change issue's labels
func UpdateIssueLabel(ctx *context.Context) { func UpdateIssueLabel(ctx *context.Context) {
issue := getActionIssue(ctx) issue := getActionIssue(ctx)
if ctx.Written() { if ctx.Written() {
@ -745,6 +761,7 @@ func UpdateIssueLabel(ctx *context.Context) {
}) })
} }
// UpdateIssueMilestone change issue's milestone
func UpdateIssueMilestone(ctx *context.Context) { func UpdateIssueMilestone(ctx *context.Context) {
issue := getActionIssue(ctx) issue := getActionIssue(ctx)
if ctx.Written() { if ctx.Written() {
@ -772,6 +789,7 @@ func UpdateIssueMilestone(ctx *context.Context) {
}) })
} }
// UpdateIssueAssignee change issue's assignee
func UpdateIssueAssignee(ctx *context.Context) { func UpdateIssueAssignee(ctx *context.Context) {
issue := getActionIssue(ctx) issue := getActionIssue(ctx)
if ctx.Written() { if ctx.Written() {
@ -796,6 +814,7 @@ func UpdateIssueAssignee(ctx *context.Context) {
}) })
} }
// NewComment create a comment for issue
func NewComment(ctx *context.Context, form auth.CreateCommentForm) { func NewComment(ctx *context.Context, form auth.CreateCommentForm) {
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index"))
if err != nil { if err != nil {
@ -882,6 +901,7 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) {
log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID) log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID)
} }
// UpdateCommentContent change comment of issue's content
func UpdateCommentContent(ctx *context.Context) { func UpdateCommentContent(ctx *context.Context) {
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) comment, err := models.GetCommentByID(ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -914,6 +934,7 @@ func UpdateCommentContent(ctx *context.Context) {
}) })
} }
// DeleteComment delete comment of issue
func DeleteComment(ctx *context.Context) { func DeleteComment(ctx *context.Context) {
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) comment, err := models.GetCommentByID(ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -937,15 +958,17 @@ func DeleteComment(ctx *context.Context) {
ctx.Status(200) ctx.Status(200)
} }
// Labels render issue's labels page
func Labels(ctx *context.Context) { func Labels(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.labels") ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
ctx.Data["PageIsLabels"] = true ctx.Data["PageIsLabels"] = true
ctx.Data["RequireMinicolors"] = true ctx.Data["RequireMinicolors"] = true
ctx.Data["LabelTemplates"] = models.LabelTemplates ctx.Data["LabelTemplates"] = models.LabelTemplates
ctx.HTML(200, LABELS) ctx.HTML(200, tplLabels)
} }
// InitializeLabels init labels for a repository
func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) {
if ctx.HasError() { if ctx.HasError() {
ctx.Redirect(ctx.Repo.RepoLink + "/labels") ctx.Redirect(ctx.Repo.RepoLink + "/labels")
@ -973,6 +996,7 @@ func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/labels") ctx.Redirect(ctx.Repo.RepoLink + "/labels")
} }
// NewLabel create new label for repository
func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { func NewLabel(ctx *context.Context, form auth.CreateLabelForm) {
ctx.Data["Title"] = ctx.Tr("repo.labels") ctx.Data["Title"] = ctx.Tr("repo.labels")
ctx.Data["PageIsLabels"] = true ctx.Data["PageIsLabels"] = true
@ -995,6 +1019,7 @@ func NewLabel(ctx *context.Context, form auth.CreateLabelForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/labels") ctx.Redirect(ctx.Repo.RepoLink + "/labels")
} }
// UpdateLabel update a label's name and color
func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) {
l, err := models.GetLabelByID(form.ID) l, err := models.GetLabelByID(form.ID)
if err != nil { if err != nil {
@ -1016,6 +1041,7 @@ func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/labels") ctx.Redirect(ctx.Repo.RepoLink + "/labels")
} }
// DeleteLabel delete a label
func DeleteLabel(ctx *context.Context) { func DeleteLabel(ctx *context.Context) {
if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteLabel: " + err.Error()) ctx.Flash.Error("DeleteLabel: " + err.Error())
@ -1029,6 +1055,7 @@ func DeleteLabel(ctx *context.Context) {
return return
} }
// Milestones render milestones page
func Milestones(ctx *context.Context) { func Milestones(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.milestones") ctx.Data["Title"] = ctx.Tr("repo.milestones")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
@ -1069,18 +1096,20 @@ func Milestones(ctx *context.Context) {
} }
ctx.Data["IsShowClosed"] = isShowClosed ctx.Data["IsShowClosed"] = isShowClosed
ctx.HTML(200, MILESTONE) ctx.HTML(200, tplMilestone)
} }
// NewMilestone render creating milestone page
func NewMilestone(ctx *context.Context) { func NewMilestone(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") ctx.Data["Title"] = ctx.Tr("repo.milestones.new")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
ctx.Data["PageIsMilestones"] = true ctx.Data["PageIsMilestones"] = true
ctx.Data["RequireDatetimepicker"] = true ctx.Data["RequireDatetimepicker"] = true
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
ctx.HTML(200, MILESTONE_NEW) ctx.HTML(200, tplMilestoneNew)
} }
// NewMilestonePost response for creating milestone
func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") ctx.Data["Title"] = ctx.Tr("repo.milestones.new")
ctx.Data["PageIsIssueList"] = true ctx.Data["PageIsIssueList"] = true
@ -1089,7 +1118,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, MILESTONE_NEW) ctx.HTML(200, tplMilestoneNew)
return return
} }
@ -1099,7 +1128,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local)
if err != nil { if err != nil {
ctx.Data["Err_Deadline"] = true ctx.Data["Err_Deadline"] = true
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), tplMilestoneNew, &form)
return return
} }
@ -1117,6 +1146,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") ctx.Redirect(ctx.Repo.RepoLink + "/milestones")
} }
// EditMilestone render edting milestone page
func EditMilestone(ctx *context.Context) { func EditMilestone(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") ctx.Data["Title"] = ctx.Tr("repo.milestones.edit")
ctx.Data["PageIsMilestones"] = true ctx.Data["PageIsMilestones"] = true
@ -1138,9 +1168,10 @@ func EditMilestone(ctx *context.Context) {
if len(m.DeadlineString) > 0 { if len(m.DeadlineString) > 0 {
ctx.Data["deadline"] = m.DeadlineString ctx.Data["deadline"] = m.DeadlineString
} }
ctx.HTML(200, MILESTONE_NEW) ctx.HTML(200, tplMilestoneNew)
} }
// EditMilestonePost response for edting milestone
func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") ctx.Data["Title"] = ctx.Tr("repo.milestones.edit")
ctx.Data["PageIsMilestones"] = true ctx.Data["PageIsMilestones"] = true
@ -1149,7 +1180,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, MILESTONE_NEW) ctx.HTML(200, tplMilestoneNew)
return return
} }
@ -1159,7 +1190,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local)
if err != nil { if err != nil {
ctx.Data["Err_Deadline"] = true ctx.Data["Err_Deadline"] = true
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), tplMilestoneNew, &form)
return return
} }
@ -1184,6 +1215,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") ctx.Redirect(ctx.Repo.RepoLink + "/milestones")
} }
// ChangeMilestonStatus response for change a milestone's status
func ChangeMilestonStatus(ctx *context.Context) { func ChangeMilestonStatus(ctx *context.Context) {
m, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) m, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
if err != nil { if err != nil {
@ -1218,6 +1250,7 @@ func ChangeMilestonStatus(ctx *context.Context) {
} }
} }
// DeleteMilestone delete a milestone
func DeleteMilestone(ctx *context.Context) { func DeleteMilestone(ctx *context.Context) {
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteMilestoneByRepoID: " + err.Error()) ctx.Flash.Error("DeleteMilestoneByRepoID: " + err.Error())

@ -21,16 +21,16 @@ import (
) )
const ( const (
FORK base.TplName = "repo/pulls/fork" tplFork base.TplName = "repo/pulls/fork"
COMPARE_PULL base.TplName = "repo/pulls/compare" tplComparePull base.TplName = "repo/pulls/compare"
PULL_COMMITS base.TplName = "repo/pulls/commits" tplPullCommits base.TplName = "repo/pulls/commits"
PULL_FILES base.TplName = "repo/pulls/files" tplPullFiles base.TplName = "repo/pulls/files"
PULL_REQUEST_TEMPLATE_KEY = "PullRequestTemplate" pullRequestTemplateKey = "PullRequestTemplate"
) )
var ( var (
PullRequestTemplateCandidates = []string{ pullRequestTemplateCandidates = []string{
"PULL_REQUEST.md", "PULL_REQUEST.md",
".gogs/PULL_REQUEST.md", ".gogs/PULL_REQUEST.md",
".github/PULL_REQUEST.md", ".github/PULL_REQUEST.md",
@ -72,6 +72,7 @@ func getForkRepository(ctx *context.Context) *models.Repository {
return forkRepo return forkRepo
} }
// Fork render repository fork page
func Fork(ctx *context.Context) { func Fork(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("new_fork") ctx.Data["Title"] = ctx.Tr("new_fork")
@ -81,9 +82,10 @@ func Fork(ctx *context.Context) {
} }
ctx.Data["ContextUser"] = ctx.User ctx.Data["ContextUser"] = ctx.User
ctx.HTML(200, FORK) ctx.HTML(200, tplFork)
} }
// ForkPost response for forking a repository
func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { func ForkPost(ctx *context.Context, form auth.CreateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_fork") ctx.Data["Title"] = ctx.Tr("new_fork")
@ -99,7 +101,7 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) {
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, FORK) ctx.HTML(200, tplFork)
return return
} }
@ -122,11 +124,11 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) {
ctx.Data["Err_RepoName"] = true ctx.Data["Err_RepoName"] = true
switch { switch {
case models.IsErrRepoAlreadyExist(err): case models.IsErrRepoAlreadyExist(err):
ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), FORK, &form) ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), tplFork, &form)
case models.IsErrNameReserved(err): case models.IsErrNameReserved(err):
ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), FORK, &form) ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplFork, &form)
case models.IsErrNamePatternNotAllowed(err): case models.IsErrNamePatternNotAllowed(err):
ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), FORK, &form) ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplFork, &form)
default: default:
ctx.Handle(500, "ForkPost", err) ctx.Handle(500, "ForkPost", err)
} }
@ -171,6 +173,7 @@ func checkPullInfo(ctx *context.Context) *models.Issue {
return issue return issue
} }
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) { func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) {
pull := issue.PullRequest pull := issue.PullRequest
ctx.Data["HasMerged"] = true ctx.Data["HasMerged"] = true
@ -190,6 +193,7 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) {
} }
} }
// PrepareViewPullInfo show meta information for a pull request preview page
func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo { func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo {
repo := ctx.Repo.Repository repo := ctx.Repo.Repository
pull := issue.PullRequest pull := issue.PullRequest
@ -242,6 +246,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullReq
return prInfo return prInfo
} }
// ViewPullCommits show commits for a pull request
func ViewPullCommits(ctx *context.Context) { func ViewPullCommits(ctx *context.Context) {
ctx.Data["PageIsPullList"] = true ctx.Data["PageIsPullList"] = true
ctx.Data["PageIsPullCommits"] = true ctx.Data["PageIsPullCommits"] = true
@ -291,9 +296,10 @@ func ViewPullCommits(ctx *context.Context) {
ctx.Data["Commits"] = commits ctx.Data["Commits"] = commits
ctx.Data["CommitCount"] = commits.Len() ctx.Data["CommitCount"] = commits.Len()
ctx.HTML(200, PULL_COMMITS) ctx.HTML(200, tplPullCommits)
} }
// ViewPullFiles render pull request changed files list page
func ViewPullFiles(ctx *context.Context) { func ViewPullFiles(ctx *context.Context) {
ctx.Data["PageIsPullList"] = true ctx.Data["PageIsPullList"] = true
ctx.Data["PageIsPullFiles"] = true ctx.Data["PageIsPullFiles"] = true
@ -375,9 +381,10 @@ func ViewPullFiles(ctx *context.Context) {
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(headTarget, "raw", endCommitID) ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(headTarget, "raw", endCommitID)
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
ctx.HTML(200, PULL_FILES) ctx.HTML(200, tplPullFiles)
} }
// MergePullRequest response for merging pull request
func MergePullRequest(ctx *context.Context) { func MergePullRequest(ctx *context.Context) {
issue := checkPullInfo(ctx) issue := checkPullInfo(ctx)
if ctx.Written() { if ctx.Written() {
@ -414,6 +421,7 @@ func MergePullRequest(ctx *context.Context) {
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index))
} }
// ParseCompareInfo parse compare info between two commit for preparing pull request
func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.PullRequestInfo, string, string) { func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.PullRequestInfo, string, string) {
baseRepo := ctx.Repo.Repository baseRepo := ctx.Repo.Repository
@ -520,6 +528,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
return headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch return headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch
} }
// PrepareCompareDiff render pull request preview diff page
func PrepareCompareDiff( func PrepareCompareDiff(
ctx *context.Context, ctx *context.Context,
headUser *models.User, headUser *models.User,
@ -578,12 +587,13 @@ func PrepareCompareDiff(
return false return false
} }
// CompareAndPullRequest render pull request preview page
func CompareAndPullRequest(ctx *context.Context) { func CompareAndPullRequest(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes")
ctx.Data["PageIsComparePull"] = true ctx.Data["PageIsComparePull"] = true
ctx.Data["IsDiffCompare"] = true ctx.Data["IsDiffCompare"] = true
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
setTemplateIfExists(ctx, PULL_REQUEST_TEMPLATE_KEY, PullRequestTemplateCandidates) setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates)
renderAttachmentSettings(ctx) renderAttachmentSettings(ctx)
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx) headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx)
@ -600,7 +610,7 @@ func CompareAndPullRequest(ctx *context.Context) {
} else { } else {
ctx.Data["HasPullRequest"] = true ctx.Data["HasPullRequest"] = true
ctx.Data["PullRequest"] = pr ctx.Data["PullRequest"] = pr
ctx.HTML(200, COMPARE_PULL) ctx.HTML(200, tplComparePull)
return return
} }
@ -617,9 +627,10 @@ func CompareAndPullRequest(ctx *context.Context) {
} }
} }
ctx.HTML(200, COMPARE_PULL) ctx.HTML(200, tplComparePull)
} }
// CompareAndPullRequestPost response for creating pull request
func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) { func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) {
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes")
ctx.Data["PageIsComparePull"] = true ctx.Data["PageIsComparePull"] = true
@ -656,7 +667,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm)
return return
} }
ctx.HTML(200, COMPARE_PULL) ctx.HTML(200, tplComparePull)
return return
} }
@ -702,6 +713,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm)
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index))
} }
// TriggerTask response for a trigger task request
func TriggerTask(ctx *context.Context) { func TriggerTask(ctx *context.Context) {
pusherID := ctx.QueryInt64("pusher") pusherID := ctx.QueryInt64("pusher")
branch := ctx.Query("branch") branch := ctx.Query("branch")

@ -17,8 +17,8 @@ import (
) )
const ( const (
RELEASES base.TplName = "repo/release/list" tplReleases base.TplName = "repo/release/list"
RELEASE_NEW base.TplName = "repo/release/new" tplReleaseNew base.TplName = "repo/release/new"
) )
// calReleaseNumCommitsBehind calculates given release has how many commits behind release target. // calReleaseNumCommitsBehind calculates given release has how many commits behind release target.
@ -49,6 +49,7 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel
return nil return nil
} }
// Releases render releases list page
func Releases(ctx *context.Context) { func Releases(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.release.releases") ctx.Data["Title"] = ctx.Tr("repo.release.releases")
ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsReleaseList"] = true
@ -150,27 +151,29 @@ func Releases(ctx *context.Context) {
ctx.Data["Page"] = pager ctx.Data["Page"] = pager
models.SortReleases(tags) models.SortReleases(tags)
ctx.Data["Releases"] = tags ctx.Data["Releases"] = tags
ctx.HTML(200, RELEASES) ctx.HTML(200, tplReleases)
} }
// NewRelease render creating release page
func NewRelease(ctx *context.Context) { func NewRelease(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") ctx.Data["Title"] = ctx.Tr("repo.release.new_release")
ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsReleaseList"] = true
ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch
ctx.HTML(200, RELEASE_NEW) ctx.HTML(200, tplReleaseNew)
} }
// NewReleasePost response for creating a release
func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") ctx.Data["Title"] = ctx.Tr("repo.release.new_release")
ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsReleaseList"] = true
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, RELEASE_NEW) ctx.HTML(200, tplReleaseNew)
return return
} }
if !ctx.Repo.GitRepo.IsBranchExist(form.Target) { if !ctx.Repo.GitRepo.IsBranchExist(form.Target) {
ctx.RenderWithErr(ctx.Tr("form.target_branch_not_exist"), RELEASE_NEW, &form) ctx.RenderWithErr(ctx.Tr("form.target_branch_not_exist"), tplReleaseNew, &form)
return return
} }
@ -213,9 +216,9 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
ctx.Data["Err_TagName"] = true ctx.Data["Err_TagName"] = true
switch { switch {
case models.IsErrReleaseAlreadyExist(err): case models.IsErrReleaseAlreadyExist(err):
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), RELEASE_NEW, &form) ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form)
case models.IsErrInvalidTagName(err): case models.IsErrInvalidTagName(err):
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), RELEASE_NEW, &form) ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), tplReleaseNew, &form)
default: default:
ctx.Handle(500, "CreateRelease", err) ctx.Handle(500, "CreateRelease", err)
} }
@ -226,6 +229,7 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/releases") ctx.Redirect(ctx.Repo.RepoLink + "/releases")
} }
// EditRelease render release edit page
func EditRelease(ctx *context.Context) { func EditRelease(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsReleaseList"] = true
@ -249,9 +253,10 @@ func EditRelease(ctx *context.Context) {
ctx.Data["prerelease"] = rel.IsPrerelease ctx.Data["prerelease"] = rel.IsPrerelease
ctx.Data["IsDraft"] = rel.IsDraft ctx.Data["IsDraft"] = rel.IsDraft
ctx.HTML(200, RELEASE_NEW) ctx.HTML(200, tplReleaseNew)
} }
// EditReleasePost response for edit release
func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
ctx.Data["PageIsReleaseList"] = true ctx.Data["PageIsReleaseList"] = true
@ -274,7 +279,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
ctx.Data["prerelease"] = rel.IsPrerelease ctx.Data["prerelease"] = rel.IsPrerelease
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, RELEASE_NEW) ctx.HTML(200, tplReleaseNew)
return return
} }
@ -289,6 +294,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/releases") ctx.Redirect(ctx.Repo.RepoLink + "/releases")
} }
// DeleteRelease delete a release
func DeleteRelease(ctx *context.Context) { func DeleteRelease(ctx *context.Context) {
if err := models.DeleteReleaseByID(ctx.QueryInt64("id")); err != nil { if err := models.DeleteReleaseByID(ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteReleaseByID: " + err.Error()) ctx.Flash.Error("DeleteReleaseByID: " + err.Error())

@ -23,10 +23,11 @@ import (
) )
const ( const (
CREATE base.TplName = "repo/create" tplCreate base.TplName = "repo/create"
MIGRATE base.TplName = "repo/migrate" tplMigrate base.TplName = "repo/migrate"
) )
// MustBeNotBare render when a repo is a bare git dir
func MustBeNotBare(ctx *context.Context) { func MustBeNotBare(ctx *context.Context) {
if ctx.Repo.Repository.IsBare { if ctx.Repo.Repository.IsBare {
ctx.Handle(404, "MustBeNotBare", nil) ctx.Handle(404, "MustBeNotBare", nil)
@ -64,6 +65,7 @@ func checkContextUser(ctx *context.Context, uid int64) *models.User {
return org return org
} }
// Create render creating repository page
func Create(ctx *context.Context) { func Create(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("new_repo") ctx.Data["Title"] = ctx.Tr("new_repo")
@ -81,7 +83,7 @@ func Create(ctx *context.Context) {
} }
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
ctx.HTML(200, CREATE) ctx.HTML(200, tplCreate)
} }
func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) { func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) {
@ -102,6 +104,7 @@ func handleCreateError(ctx *context.Context, owner *models.User, err error, name
} }
} }
// CreatePost response for creating repository
func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { func CreatePost(ctx *context.Context, form auth.CreateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_repo") ctx.Data["Title"] = ctx.Tr("new_repo")
@ -116,7 +119,7 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) {
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, CREATE) ctx.HTML(200, tplCreate)
return return
} }
@ -141,9 +144,10 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) {
} }
} }
handleCreateError(ctx, ctxUser, err, "CreatePost", CREATE, &form) handleCreateError(ctx, ctxUser, err, "CreatePost", tplCreate, &form)
} }
// Migrate render migration of repository page
func Migrate(ctx *context.Context) { func Migrate(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("new_migrate") ctx.Data["Title"] = ctx.Tr("new_migrate")
ctx.Data["private"] = ctx.User.LastRepoVisibility ctx.Data["private"] = ctx.User.LastRepoVisibility
@ -156,9 +160,10 @@ func Migrate(ctx *context.Context) {
} }
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
ctx.HTML(200, MIGRATE) ctx.HTML(200, tplMigrate)
} }
// MigratePost response for migrating from external git repository
func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_migrate") ctx.Data["Title"] = ctx.Tr("new_migrate")
@ -169,7 +174,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, MIGRATE) ctx.HTML(200, tplMigrate)
return return
} }
@ -180,11 +185,11 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
addrErr := err.(models.ErrInvalidCloneAddr) addrErr := err.(models.ErrInvalidCloneAddr)
switch { switch {
case addrErr.IsURLError: case addrErr.IsURLError:
ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form) ctx.RenderWithErr(ctx.Tr("form.url_error"), tplMigrate, &form)
case addrErr.IsPermissionDenied: case addrErr.IsPermissionDenied:
ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), MIGRATE, &form) ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), tplMigrate, &form)
case addrErr.IsInvalidPath: case addrErr.IsInvalidPath:
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), MIGRATE, &form) ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), tplMigrate, &form)
default: default:
ctx.Handle(500, "Unknown error", err) ctx.Handle(500, "Unknown error", err)
} }
@ -216,17 +221,18 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
if strings.Contains(err.Error(), "Authentication failed") || if strings.Contains(err.Error(), "Authentication failed") ||
strings.Contains(err.Error(), "could not read Username") { strings.Contains(err.Error(), "could not read Username") {
ctx.Data["Err_Auth"] = true ctx.Data["Err_Auth"] = true
ctx.RenderWithErr(ctx.Tr("form.auth_failed", models.HandleCloneUserCredentials(err.Error(), true)), MIGRATE, &form) ctx.RenderWithErr(ctx.Tr("form.auth_failed", models.HandleCloneUserCredentials(err.Error(), true)), tplMigrate, &form)
return return
} else if strings.Contains(err.Error(), "fatal:") { } else if strings.Contains(err.Error(), "fatal:") {
ctx.Data["Err_CloneAddr"] = true ctx.Data["Err_CloneAddr"] = true
ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", models.HandleCloneUserCredentials(err.Error(), true)), MIGRATE, &form) ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", models.HandleCloneUserCredentials(err.Error(), true)), tplMigrate, &form)
return return
} }
handleCreateError(ctx, ctxUser, err, "MigratePost", MIGRATE, &form) handleCreateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form)
} }
// Action response for actions to a repository
func Action(ctx *context.Context) { func Action(ctx *context.Context) {
var err error var err error
switch ctx.Params(":action") { switch ctx.Params(":action") {
@ -261,6 +267,7 @@ func Action(ctx *context.Context) {
ctx.Redirect(redirectTo) ctx.Redirect(redirectTo)
} }
// Download download an archive of a repository
func Download(ctx *context.Context) { func Download(ctx *context.Context) {
var ( var (
uri = ctx.Params("*") uri = ctx.Params("*")

@ -26,12 +26,14 @@ const (
tplDeployKeys base.TplName = "repo/settings/deploy_keys" tplDeployKeys base.TplName = "repo/settings/deploy_keys"
) )
// Settings show a repository's settings page
func Settings(ctx *context.Context) { func Settings(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsOptions"] = true ctx.Data["PageIsSettingsOptions"] = true
ctx.HTML(200, tplSettingsOptions) ctx.HTML(200, tplSettingsOptions)
} }
// SettingsPost response for changes of a repository
func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsOptions"] = true ctx.Data["PageIsSettingsOptions"] = true
@ -293,6 +295,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
} }
} }
// Collaboration render a repository's collaboration page
func Collaboration(ctx *context.Context) { func Collaboration(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsCollaboration"] = true ctx.Data["PageIsSettingsCollaboration"] = true
@ -307,6 +310,7 @@ func Collaboration(ctx *context.Context) {
ctx.HTML(200, tplCollaboration) ctx.HTML(200, tplCollaboration)
} }
// CollaborationPost response for actions for a collaboration of a repository
func CollaborationPost(ctx *context.Context) { func CollaborationPost(ctx *context.Context) {
name := strings.ToLower(ctx.Query("collaborator")) name := strings.ToLower(ctx.Query("collaborator"))
if len(name) == 0 || ctx.Repo.Owner.LowerName == name { if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
@ -352,6 +356,7 @@ func CollaborationPost(ctx *context.Context) {
ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path) ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path)
} }
// ChangeCollaborationAccessMode response for changing access of a collaboration
func ChangeCollaborationAccessMode(ctx *context.Context) { func ChangeCollaborationAccessMode(ctx *context.Context) {
if err := ctx.Repo.Repository.ChangeCollaborationAccessMode( if err := ctx.Repo.Repository.ChangeCollaborationAccessMode(
ctx.QueryInt64("uid"), ctx.QueryInt64("uid"),
@ -360,6 +365,7 @@ func ChangeCollaborationAccessMode(ctx *context.Context) {
} }
} }
// DeleteCollaboration delete a collaboration for a repository
func DeleteCollaboration(ctx *context.Context) { func DeleteCollaboration(ctx *context.Context) {
if err := ctx.Repo.Repository.DeleteCollaboration(ctx.QueryInt64("id")); err != nil { if err := ctx.Repo.Repository.DeleteCollaboration(ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteCollaboration: " + err.Error()) ctx.Flash.Error("DeleteCollaboration: " + err.Error())
@ -396,6 +402,7 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository)
return owner, repo return owner, repo
} }
// GitHooks hooks of a repository
func GitHooks(ctx *context.Context) { func GitHooks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") ctx.Data["Title"] = ctx.Tr("repo.settings.githooks")
ctx.Data["PageIsSettingsGitHooks"] = true ctx.Data["PageIsSettingsGitHooks"] = true
@ -410,6 +417,7 @@ func GitHooks(ctx *context.Context) {
ctx.HTML(200, tplGithooks) ctx.HTML(200, tplGithooks)
} }
// GitHooksEdit render for editing a hook of repository page
func GitHooksEdit(ctx *context.Context) { func GitHooksEdit(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") ctx.Data["Title"] = ctx.Tr("repo.settings.githooks")
ctx.Data["PageIsSettingsGitHooks"] = true ctx.Data["PageIsSettingsGitHooks"] = true
@ -428,6 +436,7 @@ func GitHooksEdit(ctx *context.Context) {
ctx.HTML(200, tplGithookEdit) ctx.HTML(200, tplGithookEdit)
} }
// GitHooksEditPost response for editing a git hook of a repository
func GitHooksEditPost(ctx *context.Context) { func GitHooksEditPost(ctx *context.Context) {
name := ctx.Params(":name") name := ctx.Params(":name")
hook, err := ctx.Repo.GitRepo.GetHook(name) hook, err := ctx.Repo.GitRepo.GetHook(name)
@ -447,6 +456,7 @@ func GitHooksEditPost(ctx *context.Context) {
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git") ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git")
} }
// DeployKeys render the deploy keys list of a repository page
func DeployKeys(ctx *context.Context) { func DeployKeys(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys")
ctx.Data["PageIsSettingsKeys"] = true ctx.Data["PageIsSettingsKeys"] = true
@ -461,6 +471,7 @@ func DeployKeys(ctx *context.Context) {
ctx.HTML(200, tplDeployKeys) ctx.HTML(200, tplDeployKeys)
} }
// DeployKeysPost response for adding a deploy key of a repository
func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys")
ctx.Data["PageIsSettingsKeys"] = true ctx.Data["PageIsSettingsKeys"] = true
@ -511,6 +522,7 @@ func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) {
ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys")
} }
// DeleteDeployKey response for deleting a deploy key
func DeleteDeployKey(ctx *context.Context) { func DeleteDeployKey(ctx *context.Context) {
if err := models.DeleteDeployKey(ctx.User, ctx.QueryInt64("id")); err != nil { if err := models.DeleteDeployKey(ctx.User, ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteDeployKey: " + err.Error()) ctx.Flash.Error("DeleteDeployKey: " + err.Error())

@ -28,6 +28,7 @@ const (
tplOrgHookNew base.TplName = "org/settings/hook_new" tplOrgHookNew base.TplName = "org/settings/hook_new"
) )
// Webhooks render web hooks list page
func Webhooks(ctx *context.Context) { func Webhooks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.hooks") ctx.Data["Title"] = ctx.Tr("repo.settings.hooks")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -44,7 +45,7 @@ func Webhooks(ctx *context.Context) {
ctx.HTML(200, tplHooks) ctx.HTML(200, tplHooks)
} }
type OrgRepoCtx struct { type orgRepoCtx struct {
OrgID int64 OrgID int64
RepoID int64 RepoID int64
Link string Link string
@ -52,9 +53,9 @@ type OrgRepoCtx struct {
} }
// getOrgRepoCtx determines whether this is a repo context or organization context. // getOrgRepoCtx determines whether this is a repo context or organization context.
func getOrgRepoCtx(ctx *context.Context) (*OrgRepoCtx, error) { func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) {
if len(ctx.Repo.RepoLink) > 0 { if len(ctx.Repo.RepoLink) > 0 {
return &OrgRepoCtx{ return &orgRepoCtx{
RepoID: ctx.Repo.Repository.ID, RepoID: ctx.Repo.Repository.ID,
Link: ctx.Repo.RepoLink, Link: ctx.Repo.RepoLink,
NewTemplate: tplHookNew, NewTemplate: tplHookNew,
@ -62,7 +63,7 @@ func getOrgRepoCtx(ctx *context.Context) (*OrgRepoCtx, error) {
} }
if len(ctx.Org.OrgLink) > 0 { if len(ctx.Org.OrgLink) > 0 {
return &OrgRepoCtx{ return &orgRepoCtx{
OrgID: ctx.Org.Organization.ID, OrgID: ctx.Org.Organization.ID,
Link: ctx.Org.OrgLink, Link: ctx.Org.OrgLink,
NewTemplate: tplOrgHookNew, NewTemplate: tplOrgHookNew,
@ -81,6 +82,7 @@ func checkHookType(ctx *context.Context) string {
return hookType return hookType
} }
// WebhooksNew render creating webhook page
func WebhooksNew(ctx *context.Context) { func WebhooksNew(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -102,6 +104,7 @@ func WebhooksNew(ctx *context.Context) {
ctx.HTML(200, orCtx.NewTemplate) ctx.HTML(200, orCtx.NewTemplate)
} }
// ParseHookEvent convert web form content to models.HookEvent
func ParseHookEvent(form auth.WebhookForm) *models.HookEvent { func ParseHookEvent(form auth.WebhookForm) *models.HookEvent {
return &models.HookEvent{ return &models.HookEvent{
PushOnly: form.PushOnly(), PushOnly: form.PushOnly(),
@ -115,6 +118,7 @@ func ParseHookEvent(form auth.WebhookForm) *models.HookEvent {
} }
} }
// WebHooksNewPost response for creating webhook
func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -161,6 +165,7 @@ func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) {
ctx.Redirect(orCtx.Link + "/settings/hooks") ctx.Redirect(orCtx.Link + "/settings/hooks")
} }
// SlackHooksNewPost response for creating slack hook
func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -211,7 +216,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) {
ctx.Redirect(orCtx.Link + "/settings/hooks") ctx.Redirect(orCtx.Link + "/settings/hooks")
} }
func checkWebhook(ctx *context.Context) (*OrgRepoCtx, *models.Webhook) { func checkWebhook(ctx *context.Context) (*orgRepoCtx, *models.Webhook) {
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
orCtx, err := getOrgRepoCtx(ctx) orCtx, err := getOrgRepoCtx(ctx)
@ -251,6 +256,7 @@ func checkWebhook(ctx *context.Context) (*OrgRepoCtx, *models.Webhook) {
return orCtx, w return orCtx, w
} }
// WebHooksEdit render editing web hook page
func WebHooksEdit(ctx *context.Context) { func WebHooksEdit(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -265,6 +271,7 @@ func WebHooksEdit(ctx *context.Context) {
ctx.HTML(200, orCtx.NewTemplate) ctx.HTML(200, orCtx.NewTemplate)
} }
// WebHooksEditPost response for editing web hook
func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -303,6 +310,7 @@ func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) {
ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID))
} }
// SlackHooksEditPost reponse for editing slack hook
func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) {
ctx.Data["Title"] = ctx.Tr("repo.settings") ctx.Data["Title"] = ctx.Tr("repo.settings")
ctx.Data["PageIsSettingsHooks"] = true ctx.Data["PageIsSettingsHooks"] = true
@ -346,6 +354,7 @@ func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) {
ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID))
} }
// TestWebhook test if web hook is work fine
func TestWebhook(ctx *context.Context) { func TestWebhook(ctx *context.Context) {
// Grab latest commit or fake one if it's empty repository. // Grab latest commit or fake one if it's empty repository.
commit := ctx.Repo.Commit commit := ctx.Repo.Commit
@ -393,6 +402,7 @@ func TestWebhook(ctx *context.Context) {
} }
} }
// DeleteWebhook delete a webhook
func DeleteWebhook(ctx *context.Context) { func DeleteWebhook(ctx *context.Context) {
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil {
ctx.Flash.Error("DeleteWebhookByRepoID: " + err.Error()) ctx.Flash.Error("DeleteWebhookByRepoID: " + err.Error())

Loading…
Cancel
Save