@@ -13,7 +13,8 @@ import ( | |||
"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) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -9,6 +9,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// GetRepositoryByParams api for getting repository by orgnizition ID and repo name | |||
func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { | |||
repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame")) | |||
if err != nil { | |||
@@ -22,6 +23,7 @@ func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { | |||
return repo | |||
} | |||
// AddTeamRepository api for adding a repository to a team | |||
func AddTeamRepository(ctx *context.APIContext) { | |||
repo := GetRepositoryByParams(ctx) | |||
if ctx.Written() { | |||
@@ -35,6 +37,7 @@ func AddTeamRepository(ctx *context.APIContext) { | |||
ctx.Status(204) | |||
} | |||
// RemoveTeamRepository api for removing a repository from a team | |||
func RemoveTeamRepository(ctx *context.APIContext) { | |||
repo := GetRepositoryByParams(ctx) | |||
if ctx.Written() { | |||
@@ -13,6 +13,7 @@ import ( | |||
"code.gitea.io/gitea/routers/api/v1/user" | |||
) | |||
// CreateTeam api for create a team | |||
func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | |||
team := &models.Team{ | |||
OrgID: ctx.Org.Organization.ID, | |||
@@ -32,6 +33,7 @@ func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | |||
ctx.JSON(201, convert.ToTeam(team)) | |||
} | |||
// AddTeamMember api for add a member to a team | |||
func AddTeamMember(ctx *context.APIContext) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -45,6 +47,7 @@ func AddTeamMember(ctx *context.APIContext) { | |||
ctx.Status(204) | |||
} | |||
// RemoveTeamMember api for remove one member from a team | |||
func RemoveTeamMember(ctx *context.APIContext) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -12,7 +12,8 @@ import ( | |||
"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) { | |||
owner := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -34,7 +34,8 @@ func parseLoginSource(ctx *context.APIContext, u *models.User, sourceID int64, l | |||
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) { | |||
u := &models.User{ | |||
Name: form.Username, | |||
@@ -71,7 +72,8 @@ func CreateUser(ctx *context.APIContext, form api.CreateUserOption) { | |||
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) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -123,6 +125,7 @@ func EditUser(ctx *context.APIContext, form api.EditUserOption) { | |||
ctx.JSON(200, u.APIFormat()) | |||
} | |||
// DeleteUser api for deleting a user | |||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user | |||
func DeleteUser(ctx *context.APIContext) { | |||
u := user.GetUserByParams(ctx) | |||
@@ -144,7 +147,8 @@ func DeleteUser(ctx *context.APIContext) { | |||
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) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -9,12 +9,13 @@ import ( | |||
"github.com/Unknwon/com" | |||
"code.gitea.io/git" | |||
api "code.gitea.io/sdk/gitea" | |||
"code.gitea.io/git" | |||
"code.gitea.io/gitea/models" | |||
) | |||
// ToEmail convert models.EmailAddress to api.Email | |||
func ToEmail(email *models.EmailAddress) *api.Email { | |||
return &api.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 { | |||
return &api.Branch{ | |||
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 { | |||
authorUsername := "" | |||
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 { | |||
return &api.PublicKey{ | |||
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 { | |||
config := map[string]string{ | |||
"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 { | |||
return &api.DeployKey{ | |||
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 { | |||
return &api.Organization{ | |||
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 { | |||
return &api.Team{ | |||
ID: team.ID, | |||
@@ -11,7 +11,8 @@ import ( | |||
"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) { | |||
if ctx.HasApiError() { | |||
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) { | |||
body, err := ctx.Req.Body().Bytes() | |||
if err != nil { | |||
@@ -26,12 +26,14 @@ func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) { | |||
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) { | |||
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) { | |||
u := user.GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -40,12 +42,14 @@ func ListUserOrgs(ctx *context.APIContext) { | |||
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) { | |||
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) { | |||
org := ctx.Org.Organization | |||
if !org.IsOwnedBy(ctx.User.ID) { | |||
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/routers/api/v1/convert" | |||
) | |||
// ListTeams list all the teams of an organization | |||
func ListTeams(ctx *context.APIContext) { | |||
org := ctx.Org.Organization | |||
if err := org.GetTeams(); err != nil { | |||
@@ -11,7 +11,8 @@ import ( | |||
"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) { | |||
branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname")) | |||
if err != nil { | |||
@@ -28,7 +29,8 @@ func GetBranch(ctx *context.APIContext) { | |||
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) { | |||
branches, err := ctx.Repo.Repository.GetBranches() | |||
if err != nil { | |||
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// AddCollaborator add a collaborator of a repository | |||
func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) { | |||
collaborator, err := models.GetUserByName(ctx.Params(":collaborator")) | |||
if err != nil { | |||
@@ -12,7 +12,8 @@ import ( | |||
"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) { | |||
if !ctx.Repo.HasAccess() { | |||
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) { | |||
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) | |||
gitRepo, err := git.OpenRepository(repoPath) | |||
@@ -46,6 +48,7 @@ func GetArchive(ctx *context.APIContext) { | |||
repo.Download(ctx.Context) | |||
} | |||
// GetEditorconfig get editor config of a repository | |||
func GetEditorconfig(ctx *context.APIContext) { | |||
ec, err := ctx.Repo.GetEditorconfig() | |||
if err != nil { | |||
@@ -16,7 +16,8 @@ import ( | |||
"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) { | |||
hooks, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -31,7 +32,8 @@ func ListHooks(ctx *context.APIContext) { | |||
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) { | |||
if !models.IsValidHookTaskType(form.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)) | |||
} | |||
// 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) { | |||
w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -165,6 +168,7 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) { | |||
ctx.JSON(200, convert.ToHook(ctx.Repo.RepoLink, w)) | |||
} | |||
// DeleteHook delete a hook of a repository | |||
func DeleteHook(ctx *context.APIContext) { | |||
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | |||
ctx.Error(500, "DeleteWebhookByRepoID", err) | |||
@@ -15,6 +15,7 @@ import ( | |||
"code.gitea.io/gitea/modules/setting" | |||
) | |||
// ListIssues list the issues of a repository | |||
func ListIssues(ctx *context.APIContext) { | |||
issues, err := models.Issues(&models.IssuesOptions{ | |||
RepoID: ctx.Repo.Repository.ID, | |||
@@ -39,6 +40,7 @@ func ListIssues(ctx *context.APIContext) { | |||
ctx.JSON(200, &apiIssues) | |||
} | |||
// GetIssue get an issue of a repository | |||
func GetIssue(ctx *context.APIContext) { | |||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
if err != nil { | |||
@@ -52,6 +54,7 @@ func GetIssue(ctx *context.APIContext) { | |||
ctx.JSON(200, issue.APIFormat()) | |||
} | |||
// CreateIssue create an issue of a repository | |||
func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { | |||
issue := &models.Issue{ | |||
RepoID: ctx.Repo.Repository.ID, | |||
@@ -101,6 +104,7 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { | |||
ctx.JSON(201, issue.APIFormat()) | |||
} | |||
// EditIssue modify an issue of a repository | |||
func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { | |||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
if err != nil { | |||
@@ -1,6 +1,7 @@ | |||
// Copyright 2015 The Gogs Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package repo | |||
import ( | |||
@@ -12,6 +13,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// ListIssueComments list all the comments of an issue | |||
func ListIssueComments(ctx *context.APIContext) { | |||
var since time.Time | |||
if len(ctx.Query("since")) > 0 { | |||
@@ -38,6 +40,7 @@ func ListIssueComments(ctx *context.APIContext) { | |||
ctx.JSON(200, &apiComments) | |||
} | |||
// CreateIssueComment create a comment for an issue | |||
func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOption) { | |||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
if err != nil { | |||
@@ -54,6 +57,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti | |||
ctx.JSON(201, comment.APIFormat()) | |||
} | |||
// EditIssueComment modify a comment of an issue | |||
func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { | |||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// ListIssueLabels list all the labels of an issue | |||
func ListIssueLabels(ctx *context.APIContext) { | |||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
if err != nil { | |||
@@ -29,6 +30,7 @@ func ListIssueLabels(ctx *context.APIContext) { | |||
ctx.JSON(200, &apiLabels) | |||
} | |||
// AddIssueLabels add labels for an issue | |||
func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -69,6 +71,7 @@ func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||
ctx.JSON(200, &apiLabels) | |||
} | |||
// DeleteIssueLabel delete a label for an issue | |||
func DeleteIssueLabel(ctx *context.APIContext) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -103,6 +106,7 @@ func DeleteIssueLabel(ctx *context.APIContext) { | |||
ctx.Status(204) | |||
} | |||
// ReplaceIssueLabels replace labels for an issue | |||
func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -143,6 +147,7 @@ func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||
ctx.JSON(200, &apiLabels) | |||
} | |||
// ClearIssueLabels delete all the labels for an issue | |||
func ClearIssueLabels(ctx *context.APIContext) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -19,7 +19,8 @@ func composeDeployKeysAPILink(repoPath string) string { | |||
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) { | |||
keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -40,7 +41,8 @@ func ListDeployKeys(ctx *context.APIContext) { | |||
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) { | |||
key, err := models.GetDeployKeyByID(ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -61,6 +63,7 @@ func GetDeployKey(ctx *context.APIContext) { | |||
ctx.JSON(200, convert.ToDeployKey(apiLink, key)) | |||
} | |||
// HandleCheckKeyStringError handle check key error | |||
func HandleCheckKeyStringError(ctx *context.APIContext, err error) { | |||
if models.IsErrKeyUnableVerify(err) { | |||
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) { | |||
switch { | |||
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) { | |||
content, err := models.CheckPublicKeyString(form.Key) | |||
if err != nil { | |||
@@ -99,7 +104,8 @@ func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) { | |||
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) { | |||
if err := models.DeleteDeployKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | |||
if models.IsErrKeyAccessDenied(err) { | |||
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// ListLabels list all the labels of a repository | |||
func ListLabels(ctx *context.APIContext) { | |||
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -25,6 +26,7 @@ func ListLabels(ctx *context.APIContext) { | |||
ctx.JSON(200, &apiLabels) | |||
} | |||
// GetLabel get label by repository and label id | |||
func GetLabel(ctx *context.APIContext) { | |||
label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -39,6 +41,7 @@ func GetLabel(ctx *context.APIContext) { | |||
ctx.JSON(200, label.APIFormat()) | |||
} | |||
// CreateLabel create a label for a repository | |||
func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -57,6 +60,7 @@ func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | |||
ctx.JSON(201, label.APIFormat()) | |||
} | |||
// EditLabel modify a label for a repository | |||
func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -86,6 +90,7 @@ func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { | |||
ctx.JSON(200, label.APIFormat()) | |||
} | |||
// DeleteLabel delete a label for a repository | |||
func DeleteLabel(ctx *context.APIContext) { | |||
if !ctx.Repo.IsWriter() { | |||
ctx.Status(403) | |||
@@ -13,6 +13,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// ListMilestones list all the milestones for a repository | |||
func ListMilestones(ctx *context.APIContext) { | |||
milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -27,6 +28,7 @@ func ListMilestones(ctx *context.APIContext) { | |||
ctx.JSON(200, &apiMilestones) | |||
} | |||
// GetMilestone get a milestone for a repository | |||
func GetMilestone(ctx *context.APIContext) { | |||
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -40,6 +42,7 @@ func GetMilestone(ctx *context.APIContext) { | |||
ctx.JSON(200, milestone.APIFormat()) | |||
} | |||
// CreateMilestone create a milestone for a repository | |||
func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) { | |||
if form.Deadline == nil { | |||
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()) | |||
} | |||
// EditMilestone modify a milestone for a repository | |||
func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { | |||
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -88,6 +92,7 @@ func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { | |||
ctx.JSON(200, milestone.APIFormat()) | |||
} | |||
// DeleteMilestone delete a milestone for a repository | |||
func DeleteMilestone(ctx *context.APIContext) { | |||
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | |||
ctx.Error(500, "DeleteMilestoneByRepoID", err) | |||
@@ -17,7 +17,8 @@ import ( | |||
"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) { | |||
opts := &models.SearchRepoOptions{ | |||
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) { | |||
ownRepos, err := models.GetUserRepositories(ctx.User.ID, true, 1, ctx.User.NumRepos) | |||
if err != nil { | |||
@@ -109,6 +111,7 @@ func ListMyRepos(ctx *context.APIContext) { | |||
ctx.JSON(200, &repos) | |||
} | |||
// CreateUserRepo create a repository for a user | |||
func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { | |||
repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ | |||
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})) | |||
} | |||
// 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) { | |||
// Shouldn't reach this condition, but just in case. | |||
if ctx.User.IsOrganization() { | |||
@@ -148,6 +152,7 @@ func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | |||
CreateUserRepo(ctx, ctx.User, opt) | |||
} | |||
// CreateOrgRepo create one repository of the organization | |||
func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { | |||
org, err := models.GetOrgByName(ctx.Params(":org")) | |||
if err != nil { | |||
@@ -166,7 +171,8 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { | |||
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) { | |||
ctxUser := ctx.User | |||
// 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})) | |||
} | |||
// 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) { | |||
repo := ctx.Repo.Repository | |||
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) { | |||
owner := ctx.Repo.Owner | |||
repo := ctx.Repo.Repository | |||
@@ -11,7 +11,8 @@ import ( | |||
"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) { | |||
tokens, err := models.ListAccessTokens(ctx.User.ID) | |||
if err != nil { | |||
@@ -26,7 +27,8 @@ func ListAccessTokens(ctx *context.APIContext) { | |||
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) { | |||
t := &models.AccessToken{ | |||
UID: ctx.User.ID, | |||
@@ -13,7 +13,8 @@ import ( | |||
"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) { | |||
emails, err := models.GetEmailAddresses(ctx.User.ID) | |||
if err != nil { | |||
@@ -27,7 +28,8 @@ func ListEmails(ctx *context.APIContext) { | |||
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) { | |||
if len(form.Emails) == 0 { | |||
ctx.Status(422) | |||
@@ -59,7 +61,8 @@ func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) { | |||
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) { | |||
if len(form.Emails) == 0 { | |||
ctx.Status(204) | |||
@@ -11,7 +11,7 @@ import ( | |||
"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)) | |||
for i := range users { | |||
apiUsers[i] = users[i].APIFormat() | |||
@@ -25,14 +25,16 @@ func listUserFollowers(ctx *context.APIContext, u *models.User) { | |||
ctx.Error(500, "GetUserFollowers", err) | |||
return | |||
} | |||
responseApiUsers(ctx, users) | |||
responseAPIUsers(ctx, users) | |||
} | |||
// ListMyFollowers list all my followers | |||
func ListMyFollowers(ctx *context.APIContext) { | |||
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) { | |||
u := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -47,14 +49,16 @@ func listUserFollowing(ctx *context.APIContext, u *models.User) { | |||
ctx.Error(500, "GetFollowing", err) | |||
return | |||
} | |||
responseApiUsers(ctx, users) | |||
responseAPIUsers(ctx, users) | |||
} | |||
// ListMyFollowing list all my followings | |||
func ListMyFollowing(ctx *context.APIContext) { | |||
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) { | |||
u := GetUserByParams(ctx) | |||
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) { | |||
target := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -80,7 +85,8 @@ func CheckMyFollowing(ctx *context.APIContext) { | |||
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) { | |||
u := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -93,7 +99,8 @@ func CheckFollowing(ctx *context.APIContext) { | |||
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) { | |||
target := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -106,7 +113,8 @@ func Follow(ctx *context.APIContext) { | |||
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) { | |||
target := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -14,6 +14,7 @@ import ( | |||
"code.gitea.io/gitea/routers/api/v1/repo" | |||
) | |||
// GetUserByParamsName get user by name | |||
func GetUserByParamsName(ctx *context.APIContext, name string) *models.User { | |||
user, err := models.GetUserByName(ctx.Params(name)) | |||
if err != nil { | |||
@@ -52,12 +53,14 @@ func listPublicKeys(ctx *context.APIContext, uid int64) { | |||
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) { | |||
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) { | |||
user := GetUserByParams(ctx) | |||
if ctx.Written() { | |||
@@ -66,7 +69,8 @@ func ListPublicKeys(ctx *context.APIContext) { | |||
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) { | |||
key, err := models.GetPublicKeyByID(ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -99,12 +103,14 @@ func CreateUserPublicKey(ctx *context.APIContext, form api.CreateKeyOption, uid | |||
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) { | |||
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) { | |||
if err := models.DeletePublicKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | |||
if models.IsErrKeyAccessDenied(err) { | |||
@@ -13,6 +13,7 @@ import ( | |||
"code.gitea.io/gitea/modules/context" | |||
) | |||
// Search search users | |||
func Search(ctx *context.APIContext) { | |||
opts := &models.SearchUserOptions{ | |||
Keyword: ctx.Query("q"), | |||
@@ -51,6 +52,7 @@ func Search(ctx *context.APIContext) { | |||
}) | |||
} | |||
// GetInfo get user's information | |||
func GetInfo(ctx *context.APIContext) { | |||
u, err := models.GetUserByName(ctx.Params(":username")) | |||
if err != nil { | |||
@@ -69,6 +71,7 @@ func GetInfo(ctx *context.APIContext) { | |||
ctx.JSON(200, u.APIFormat()) | |||
} | |||
// GetAuthenticatedUser get curent user's information | |||
func GetAuthenticatedUser(ctx *context.APIContext) { | |||
ctx.JSON(200, ctx.User.APIFormat()) | |||
} |
@@ -17,10 +17,11 @@ import ( | |||
) | |||
const ( | |||
COMMITS base.TplName = "repo/commits" | |||
DIFF base.TplName = "repo/diff/page" | |||
tplCommits base.TplName = "repo/commits" | |||
tplDiff base.TplName = "repo/diff/page" | |||
) | |||
// RefCommits render commits page | |||
func RefCommits(ctx *context.Context) { | |||
switch { | |||
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() | |||
for e := oldCommits.Front(); e != nil; e = e.Next() { | |||
c := e.Value.(*git.Commit) | |||
@@ -41,6 +42,7 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { | |||
return newCommits | |||
} | |||
// Commits render branch's commits | |||
func Commits(ctx *context.Context) { | |||
ctx.Data["PageIsCommits"] = true | |||
@@ -62,7 +64,7 @@ func Commits(ctx *context.Context) { | |||
ctx.Handle(500, "CommitsByRange", err) | |||
return | |||
} | |||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = models.ValidateCommitsWithEmails(commits) | |||
ctx.Data["Commits"] = commits | |||
@@ -70,9 +72,10 @@ func Commits(ctx *context.Context) { | |||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name | |||
ctx.Data["CommitCount"] = commitsCount | |||
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) { | |||
ctx.Data["PageIsCommits"] = true | |||
@@ -87,7 +90,7 @@ func SearchCommits(ctx *context.Context) { | |||
ctx.Handle(500, "SearchCommits", err) | |||
return | |||
} | |||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = models.ValidateCommitsWithEmails(commits) | |||
ctx.Data["Commits"] = commits | |||
@@ -96,9 +99,10 @@ func SearchCommits(ctx *context.Context) { | |||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name | |||
ctx.Data["CommitCount"] = commits.Len() | |||
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) { | |||
ctx.Data["IsRepoToolbarCommits"] = true | |||
@@ -129,7 +133,7 @@ func FileHistory(ctx *context.Context) { | |||
ctx.Handle(500, "CommitsByFileAndRange", err) | |||
return | |||
} | |||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||
commits = models.ValidateCommitsWithEmails(commits) | |||
ctx.Data["Commits"] = commits | |||
@@ -138,9 +142,10 @@ func FileHistory(ctx *context.Context) { | |||
ctx.Data["FileName"] = fileName | |||
ctx.Data["CommitCount"] = commitsCount | |||
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) { | |||
ctx.Data["PageIsDiff"] = 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["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) { | |||
if err := models.GetRawDiff( | |||
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) { | |||
ctx.Data["IsRepoToolbarCommits"] = 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["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitID) | |||
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" | |||
) | |||
// ServeData download file from io.Reader | |||
func ServeData(ctx *context.Context, name string, reader io.Reader) error { | |||
buf := make([]byte, 1024) | |||
n, _ := reader.Read(buf) | |||
@@ -34,6 +35,7 @@ func ServeData(ctx *context.Context, name string, reader io.Reader) error { | |||
return err | |||
} | |||
// ServeBlob download a git.Blob | |||
func ServeBlob(ctx *context.Context, blob *git.Blob) error { | |||
dataRc, err := blob.Data() | |||
if err != nil { | |||
@@ -43,6 +45,7 @@ func ServeBlob(ctx *context.Context, blob *git.Blob) error { | |||
return ServeData(ctx, ctx.Repo.TreePath, dataRc) | |||
} | |||
// SingleDownload download a file by repos path | |||
func SingleDownload(ctx *context.Context) { | |||
blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreePath) | |||
if err != nil { | |||
@@ -22,10 +22,10 @@ import ( | |||
) | |||
const ( | |||
EDIT_FILE base.TplName = "repo/editor/edit" | |||
EDIT_DIFF_PREVIEW base.TplName = "repo/editor/diff_preview" | |||
DELETE_FILE base.TplName = "repo/editor/delete" | |||
UPLOAD_FILE base.TplName = "repo/editor/upload" | |||
tplEditFile base.TplName = "repo/editor/edit" | |||
tplEditDiffPreview base.TplName = "repo/editor/diff_preview" | |||
tplDeleteFile base.TplName = "repo/editor/delete" | |||
tplUploadFile base.TplName = "repo/editor/upload" | |||
) | |||
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["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) { | |||
editFile(ctx, false) | |||
} | |||
// NewFile render create file page | |||
func NewFile(ctx *context.Context) { | |||
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, ",") | |||
if ctx.HasError() { | |||
ctx.HTML(200, EDIT_FILE) | |||
ctx.HTML(200, tplEditFile) | |||
return | |||
} | |||
if len(form.TreePath) == 0 { | |||
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 | |||
} | |||
if oldBranchName != branchName { | |||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | |||
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 | |||
} | |||
} | |||
@@ -180,13 +182,13 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||
if index != len(treeNames)-1 { | |||
if !entry.IsDir() { | |||
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 | |||
} | |||
} else { | |||
if entry.IsDir() { | |||
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 | |||
} | |||
} | |||
@@ -197,7 +199,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||
if err != nil { | |||
if git.IsErrNotExist(err) { | |||
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 { | |||
ctx.Handle(500, "GetTreeEntryByPath", err) | |||
} | |||
@@ -212,7 +214,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||
for _, file := range files { | |||
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 | |||
} | |||
} | |||
@@ -230,7 +232,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||
} | |||
if entry != nil { | |||
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 | |||
} | |||
} | |||
@@ -260,21 +262,24 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||
IsNewFile: isNewFile, | |||
}); err != nil { | |||
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 | |||
} | |||
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) { | |||
editFilePost(ctx, form, false) | |||
} | |||
// NewFilePost response for creating file | |||
func NewFilePost(ctx *context.Context, form auth.EditRepoFileForm) { | |||
editFilePost(ctx, form, true) | |||
} | |||
// DiffPreviewPost render preview diff page | |||
func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { | |||
treePath := ctx.Repo.TreePath | |||
@@ -299,9 +304,10 @@ func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { | |||
} | |||
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) { | |||
ctx.Data["PageIsDelete"] = true | |||
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_choice"] = "direct" | |||
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) { | |||
ctx.Data["PageIsDelete"] = true | |||
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 | |||
if ctx.HasError() { | |||
ctx.HTML(200, DELETE_FILE) | |||
ctx.HTML(200, tplDeleteFile) | |||
return | |||
} | |||
if oldBranchName != branchName { | |||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | |||
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 | |||
} | |||
} | |||
@@ -374,6 +381,7 @@ func renderUploadSettings(ctx *context.Context) { | |||
ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles | |||
} | |||
// UploadFile render upload file page | |||
func UploadFile(ctx *context.Context) { | |||
ctx.Data["PageIsUpload"] = true | |||
renderUploadSettings(ctx) | |||
@@ -391,9 +399,10 @@ func UploadFile(ctx *context.Context) { | |||
ctx.Data["commit_choice"] = "direct" | |||
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) { | |||
ctx.Data["PageIsUpload"] = true | |||
renderUploadSettings(ctx) | |||
@@ -422,14 +431,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||
ctx.Data["new_branch_name"] = branchName | |||
if ctx.HasError() { | |||
ctx.HTML(200, UPLOAD_FILE) | |||
ctx.HTML(200, tplUploadFile) | |||
return | |||
} | |||
if oldBranchName != branchName { | |||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | |||
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 | |||
} | |||
} | |||
@@ -451,7 +460,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||
// User can only upload files to a directory. | |||
if !entry.IsDir() { | |||
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 | |||
} | |||
} | |||
@@ -475,13 +484,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||
Files: form.Files, | |||
}); err != nil { | |||
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 | |||
} | |||
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath) | |||
} | |||
// UploadFileToServer upload file to server file dir not git | |||
func UploadFileToServer(ctx *context.Context) { | |||
file, header, err := ctx.Req.FormFile("file") | |||
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) { | |||
if len(form.File) == 0 { | |||
ctx.Status(204) | |||
@@ -29,6 +29,7 @@ import ( | |||
"code.gitea.io/gitea/modules/setting" | |||
) | |||
// HTTP implmentation git smart HTTP protocol | |||
func HTTP(ctx *context.Context) { | |||
username := ctx.Params(":username") | |||
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") | |||
@@ -170,7 +171,7 @@ func HTTP(ctx *context.Context) { | |||
return | |||
} | |||
var lastLine int64 = 0 | |||
var lastLine int64 | |||
for { | |||
head := input[lastLine : lastLine+2] | |||
if head[0] == '0' && head[1] == '0' { | |||
@@ -193,15 +194,15 @@ func HTTP(ctx *context.Context) { | |||
fields := strings.Fields(string(line)) | |||
if len(fields) >= 3 { | |||
oldCommitId := fields[0][4:] | |||
newCommitId := fields[1] | |||
oldCommitID := fields[0][4:] | |||
newCommitID := fields[1] | |||
refFullName := fields[2] | |||
// FIXME: handle error. | |||
if err = models.PushUpdate(models.PushUpdateOptions{ | |||
RefFullName: refFullName, | |||
OldCommitID: oldCommitId, | |||
NewCommitID: newCommitId, | |||
OldCommitID: oldCommitID, | |||
NewCommitID: newCommitID, | |||
PusherID: authUser.ID, | |||
PusherName: authUser.Name, | |||
RepoUserName: username, | |||
@@ -474,6 +475,7 @@ func getGitRepoPath(subdir string) (string, error) { | |||
return fpath, nil | |||
} | |||
// HTTPBackend middleware for git smart HTTP protocol | |||
func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc { | |||
return func(w http.ResponseWriter, r *http.Request) { | |||
for _, route := range routes { | |||
@@ -27,23 +27,25 @@ import ( | |||
) | |||
const ( | |||
ISSUES base.TplName = "repo/issue/list" | |||
ISSUE_NEW base.TplName = "repo/issue/new" | |||
ISSUE_VIEW base.TplName = "repo/issue/view" | |||
tplIssues base.TplName = "repo/issue/list" | |||
tplIssueNew base.TplName = "repo/issue/new" | |||
tplIssueView base.TplName = "repo/issue/view" | |||
LABELS base.TplName = "repo/issue/labels" | |||
tplLabels base.TplName = "repo/issue/labels" | |||
MILESTONE base.TplName = "repo/issue/milestones" | |||
MILESTONE_NEW base.TplName = "repo/issue/milestone_new" | |||
MILESTONE_EDIT base.TplName = "repo/issue/milestone_edit" | |||
tplMilestone base.TplName = "repo/issue/milestones" | |||
tplMilestoneNew base.TplName = "repo/issue/milestone_new" | |||
tplMilestoneEdit base.TplName = "repo/issue/milestone_edit" | |||
ISSUE_TEMPLATE_KEY = "IssueTemplate" | |||
issueTemplateKey = "IssueTemplate" | |||
) | |||
var ( | |||
// ErrFileTypeForbidden not allowed file type error | |||
ErrFileTypeForbidden = errors.New("File type is not allowed") | |||
ErrTooManyFiles = errors.New("Maximum number of files to upload exceeded") | |||
// ErrTooManyFiles upload too many files | |||
ErrTooManyFiles = errors.New("Maximum number of files to upload exceeded") | |||
// IssueTemplateCandidates issue templates | |||
IssueTemplateCandidates = []string{ | |||
"ISSUE_TEMPLATE.md", | |||
".gogs/ISSUE_TEMPLATE.md", | |||
@@ -51,6 +53,7 @@ var ( | |||
} | |||
) | |||
// MustEnableIssues check if repository enable internal issues | |||
func MustEnableIssues(ctx *context.Context) { | |||
if !ctx.Repo.Repository.EnableIssues { | |||
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) { | |||
if !ctx.Repo.Repository.AllowsPulls() { | |||
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) { | |||
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -89,6 +94,7 @@ func RetrieveLabels(ctx *context.Context) { | |||
ctx.Data["NumLabels"] = len(labels) | |||
} | |||
// Issues render issues page | |||
func Issues(ctx *context.Context) { | |||
isPullList := ctx.Params(":type") == "pulls" | |||
if isPullList { | |||
@@ -244,7 +250,7 @@ func Issues(ctx *context.Context) { | |||
ctx.Data["State"] = "open" | |||
} | |||
ctx.HTML(200, ISSUES) | |||
ctx.HTML(200, tplIssues) | |||
} | |||
func renderAttachmentSettings(ctx *context.Context) { | |||
@@ -255,6 +261,7 @@ func renderAttachmentSettings(ctx *context.Context) { | |||
ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles | |||
} | |||
// RetrieveRepoMilestonesAndAssignees find all the milestones and assignees of a repository | |||
func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) { | |||
var err error | |||
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 { | |||
if !ctx.Repo.IsWriter() { | |||
return nil | |||
@@ -332,12 +340,13 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles | |||
} | |||
} | |||
// NewIssue render createing issue page | |||
func NewIssue(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.issues.new") | |||
ctx.Data["PageIsIssueList"] = true | |||
ctx.Data["RequireHighlightJS"] = true | |||
ctx.Data["RequireSimpleMDE"] = true | |||
setTemplateIfExists(ctx, ISSUE_TEMPLATE_KEY, IssueTemplateCandidates) | |||
setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates) | |||
renderAttachmentSettings(ctx) | |||
RetrieveRepoMetas(ctx, ctx.Repo.Repository) | |||
@@ -345,9 +354,10 @@ func NewIssue(ctx *context.Context) { | |||
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) { | |||
var ( | |||
repo = ctx.Repo.Repository | |||
@@ -402,6 +412,7 @@ func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64 | |||
return labelIDs, milestoneID, assigneeID | |||
} | |||
// NewIssuePost response for creating new issue | |||
func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.issues.new") | |||
ctx.Data["PageIsIssueList"] = true | |||
@@ -424,7 +435,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | |||
} | |||
if ctx.HasError() { | |||
ctx.HTML(200, ISSUE_NEW) | |||
ctx.HTML(200, tplIssueNew) | |||
return | |||
} | |||
@@ -446,6 +457,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) | |||
} | |||
// UploadIssueAttachment response for uploading issue's attachment | |||
func UploadIssueAttachment(ctx *context.Context) { | |||
if !setting.AttachmentEnabled { | |||
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) { | |||
ctx.Data["RequireHighlightJS"] = true | |||
ctx.Data["RequireDropzone"] = true | |||
@@ -639,7 +652,7 @@ func ViewIssue(ctx *context.Context) { | |||
ctx.Data["Issue"] = issue | |||
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.HTML(200, ISSUE_VIEW) | |||
ctx.HTML(200, tplIssueView) | |||
} | |||
func getActionIssue(ctx *context.Context) *models.Issue { | |||
@@ -655,6 +668,7 @@ func getActionIssue(ctx *context.Context) *models.Issue { | |||
return issue | |||
} | |||
// UpdateIssueTitle change issue's title | |||
func UpdateIssueTitle(ctx *context.Context) { | |||
issue := getActionIssue(ctx) | |||
if ctx.Written() { | |||
@@ -682,6 +696,7 @@ func UpdateIssueTitle(ctx *context.Context) { | |||
}) | |||
} | |||
// UpdateIssueContent change issue's content | |||
func UpdateIssueContent(ctx *context.Context) { | |||
issue := getActionIssue(ctx) | |||
if ctx.Written() { | |||
@@ -704,6 +719,7 @@ func UpdateIssueContent(ctx *context.Context) { | |||
}) | |||
} | |||
// UpdateIssueLabel change issue's labels | |||
func UpdateIssueLabel(ctx *context.Context) { | |||
issue := getActionIssue(ctx) | |||
if ctx.Written() { | |||
@@ -745,6 +761,7 @@ func UpdateIssueLabel(ctx *context.Context) { | |||
}) | |||
} | |||
// UpdateIssueMilestone change issue's milestone | |||
func UpdateIssueMilestone(ctx *context.Context) { | |||
issue := getActionIssue(ctx) | |||
if ctx.Written() { | |||
@@ -772,6 +789,7 @@ func UpdateIssueMilestone(ctx *context.Context) { | |||
}) | |||
} | |||
// UpdateIssueAssignee change issue's assignee | |||
func UpdateIssueAssignee(ctx *context.Context) { | |||
issue := getActionIssue(ctx) | |||
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) { | |||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
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) | |||
} | |||
// UpdateCommentContent change comment of issue's content | |||
func UpdateCommentContent(ctx *context.Context) { | |||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -914,6 +934,7 @@ func UpdateCommentContent(ctx *context.Context) { | |||
}) | |||
} | |||
// DeleteComment delete comment of issue | |||
func DeleteComment(ctx *context.Context) { | |||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -937,15 +958,17 @@ func DeleteComment(ctx *context.Context) { | |||
ctx.Status(200) | |||
} | |||
// Labels render issue's labels page | |||
func Labels(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.labels") | |||
ctx.Data["PageIsIssueList"] = true | |||
ctx.Data["PageIsLabels"] = true | |||
ctx.Data["RequireMinicolors"] = true | |||
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) { | |||
if ctx.HasError() { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | |||
@@ -973,6 +996,7 @@ func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | |||
} | |||
// NewLabel create new label for repository | |||
func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.labels") | |||
ctx.Data["PageIsLabels"] = true | |||
@@ -995,6 +1019,7 @@ func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | |||
} | |||
// UpdateLabel update a label's name and color | |||
func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||
l, err := models.GetLabelByID(form.ID) | |||
if err != nil { | |||
@@ -1016,6 +1041,7 @@ func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | |||
} | |||
// DeleteLabel delete a label | |||
func DeleteLabel(ctx *context.Context) { | |||
if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteLabel: " + err.Error()) | |||
@@ -1029,6 +1055,7 @@ func DeleteLabel(ctx *context.Context) { | |||
return | |||
} | |||
// Milestones render milestones page | |||
func Milestones(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.milestones") | |||
ctx.Data["PageIsIssueList"] = true | |||
@@ -1069,18 +1096,20 @@ func Milestones(ctx *context.Context) { | |||
} | |||
ctx.Data["IsShowClosed"] = isShowClosed | |||
ctx.HTML(200, MILESTONE) | |||
ctx.HTML(200, tplMilestone) | |||
} | |||
// NewMilestone render creating milestone page | |||
func NewMilestone(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | |||
ctx.Data["PageIsIssueList"] = true | |||
ctx.Data["PageIsMilestones"] = true | |||
ctx.Data["RequireDatetimepicker"] = true | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | |||
ctx.Data["PageIsIssueList"] = true | |||
@@ -1089,7 +1118,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | |||
if ctx.HasError() { | |||
ctx.HTML(200, MILESTONE_NEW) | |||
ctx.HTML(200, tplMilestoneNew) | |||
return | |||
} | |||
@@ -1099,7 +1128,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | |||
if err != nil { | |||
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 | |||
} | |||
@@ -1117,6 +1146,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | |||
} | |||
// EditMilestone render edting milestone page | |||
func EditMilestone(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | |||
ctx.Data["PageIsMilestones"] = true | |||
@@ -1138,9 +1168,10 @@ func EditMilestone(ctx *context.Context) { | |||
if len(m.DeadlineString) > 0 { | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | |||
ctx.Data["PageIsMilestones"] = true | |||
@@ -1149,7 +1180,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | |||
if ctx.HasError() { | |||
ctx.HTML(200, MILESTONE_NEW) | |||
ctx.HTML(200, tplMilestoneNew) | |||
return | |||
} | |||
@@ -1159,7 +1190,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | |||
if err != nil { | |||
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 | |||
} | |||
@@ -1184,6 +1215,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | |||
} | |||
// ChangeMilestonStatus response for change a milestone's status | |||
func ChangeMilestonStatus(ctx *context.Context) { | |||
m, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | |||
if err != nil { | |||
@@ -1218,6 +1250,7 @@ func ChangeMilestonStatus(ctx *context.Context) { | |||
} | |||
} | |||
// DeleteMilestone delete a milestone | |||
func DeleteMilestone(ctx *context.Context) { | |||
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteMilestoneByRepoID: " + err.Error()) | |||
@@ -21,16 +21,16 @@ import ( | |||
) | |||
const ( | |||
FORK base.TplName = "repo/pulls/fork" | |||
COMPARE_PULL base.TplName = "repo/pulls/compare" | |||
PULL_COMMITS base.TplName = "repo/pulls/commits" | |||
PULL_FILES base.TplName = "repo/pulls/files" | |||
tplFork base.TplName = "repo/pulls/fork" | |||
tplComparePull base.TplName = "repo/pulls/compare" | |||
tplPullCommits base.TplName = "repo/pulls/commits" | |||
tplPullFiles base.TplName = "repo/pulls/files" | |||
PULL_REQUEST_TEMPLATE_KEY = "PullRequestTemplate" | |||
pullRequestTemplateKey = "PullRequestTemplate" | |||
) | |||
var ( | |||
PullRequestTemplateCandidates = []string{ | |||
pullRequestTemplateCandidates = []string{ | |||
"PULL_REQUEST.md", | |||
".gogs/PULL_REQUEST.md", | |||
".github/PULL_REQUEST.md", | |||
@@ -72,6 +72,7 @@ func getForkRepository(ctx *context.Context) *models.Repository { | |||
return forkRepo | |||
} | |||
// Fork render repository fork page | |||
func Fork(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("new_fork") | |||
@@ -81,9 +82,10 @@ func Fork(ctx *context.Context) { | |||
} | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("new_fork") | |||
@@ -99,7 +101,7 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | |||
ctx.Data["ContextUser"] = ctxUser | |||
if ctx.HasError() { | |||
ctx.HTML(200, FORK) | |||
ctx.HTML(200, tplFork) | |||
return | |||
} | |||
@@ -122,11 +124,11 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | |||
ctx.Data["Err_RepoName"] = true | |||
switch { | |||
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): | |||
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): | |||
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: | |||
ctx.Handle(500, "ForkPost", err) | |||
} | |||
@@ -171,6 +173,7 @@ func checkPullInfo(ctx *context.Context) *models.Issue { | |||
return issue | |||
} | |||
// PrepareMergedViewPullInfo show meta information for a merged pull request view page | |||
func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) { | |||
pull := issue.PullRequest | |||
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 { | |||
repo := ctx.Repo.Repository | |||
pull := issue.PullRequest | |||
@@ -242,6 +246,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullReq | |||
return prInfo | |||
} | |||
// ViewPullCommits show commits for a pull request | |||
func ViewPullCommits(ctx *context.Context) { | |||
ctx.Data["PageIsPullList"] = true | |||
ctx.Data["PageIsPullCommits"] = true | |||
@@ -291,9 +296,10 @@ func ViewPullCommits(ctx *context.Context) { | |||
ctx.Data["Commits"] = commits | |||
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) { | |||
ctx.Data["PageIsPullList"] = 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["RequireHighlightJS"] = true | |||
ctx.HTML(200, PULL_FILES) | |||
ctx.HTML(200, tplPullFiles) | |||
} | |||
// MergePullRequest response for merging pull request | |||
func MergePullRequest(ctx *context.Context) { | |||
issue := checkPullInfo(ctx) | |||
if ctx.Written() { | |||
@@ -414,6 +421,7 @@ func MergePullRequest(ctx *context.Context) { | |||
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) { | |||
baseRepo := ctx.Repo.Repository | |||
@@ -520,6 +528,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * | |||
return headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch | |||
} | |||
// PrepareCompareDiff render pull request preview diff page | |||
func PrepareCompareDiff( | |||
ctx *context.Context, | |||
headUser *models.User, | |||
@@ -578,12 +587,13 @@ func PrepareCompareDiff( | |||
return false | |||
} | |||
// CompareAndPullRequest render pull request preview page | |||
func CompareAndPullRequest(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | |||
ctx.Data["PageIsComparePull"] = true | |||
ctx.Data["IsDiffCompare"] = true | |||
ctx.Data["RequireHighlightJS"] = true | |||
setTemplateIfExists(ctx, PULL_REQUEST_TEMPLATE_KEY, PullRequestTemplateCandidates) | |||
setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates) | |||
renderAttachmentSettings(ctx) | |||
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx) | |||
@@ -600,7 +610,7 @@ func CompareAndPullRequest(ctx *context.Context) { | |||
} else { | |||
ctx.Data["HasPullRequest"] = true | |||
ctx.Data["PullRequest"] = pr | |||
ctx.HTML(200, COMPARE_PULL) | |||
ctx.HTML(200, tplComparePull) | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | |||
ctx.Data["PageIsComparePull"] = true | |||
@@ -656,7 +667,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) | |||
return | |||
} | |||
ctx.HTML(200, COMPARE_PULL) | |||
ctx.HTML(200, tplComparePull) | |||
return | |||
} | |||
@@ -702,6 +713,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) | |||
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) | |||
} | |||
// TriggerTask response for a trigger task request | |||
func TriggerTask(ctx *context.Context) { | |||
pusherID := ctx.QueryInt64("pusher") | |||
branch := ctx.Query("branch") | |||
@@ -17,8 +17,8 @@ import ( | |||
) | |||
const ( | |||
RELEASES base.TplName = "repo/release/list" | |||
RELEASE_NEW base.TplName = "repo/release/new" | |||
tplReleases base.TplName = "repo/release/list" | |||
tplReleaseNew base.TplName = "repo/release/new" | |||
) | |||
// 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 | |||
} | |||
// Releases render releases list page | |||
func Releases(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.release.releases") | |||
ctx.Data["PageIsReleaseList"] = true | |||
@@ -150,27 +151,29 @@ func Releases(ctx *context.Context) { | |||
ctx.Data["Page"] = pager | |||
models.SortReleases(tags) | |||
ctx.Data["Releases"] = tags | |||
ctx.HTML(200, RELEASES) | |||
ctx.HTML(200, tplReleases) | |||
} | |||
// NewRelease render creating release page | |||
func NewRelease(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | |||
ctx.Data["PageIsReleaseList"] = true | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | |||
ctx.Data["PageIsReleaseList"] = true | |||
if ctx.HasError() { | |||
ctx.HTML(200, RELEASE_NEW) | |||
ctx.HTML(200, tplReleaseNew) | |||
return | |||
} | |||
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 | |||
} | |||
@@ -213,9 +216,9 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | |||
ctx.Data["Err_TagName"] = true | |||
switch { | |||
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): | |||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), RELEASE_NEW, &form) | |||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), tplReleaseNew, &form) | |||
default: | |||
ctx.Handle(500, "CreateRelease", err) | |||
} | |||
@@ -226,6 +229,7 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/releases") | |||
} | |||
// EditRelease render release edit page | |||
func EditRelease(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | |||
ctx.Data["PageIsReleaseList"] = true | |||
@@ -249,9 +253,10 @@ func EditRelease(ctx *context.Context) { | |||
ctx.Data["prerelease"] = rel.IsPrerelease | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | |||
ctx.Data["PageIsReleaseList"] = true | |||
@@ -274,7 +279,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | |||
ctx.Data["prerelease"] = rel.IsPrerelease | |||
if ctx.HasError() { | |||
ctx.HTML(200, RELEASE_NEW) | |||
ctx.HTML(200, tplReleaseNew) | |||
return | |||
} | |||
@@ -289,6 +294,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/releases") | |||
} | |||
// DeleteRelease delete a release | |||
func DeleteRelease(ctx *context.Context) { | |||
if err := models.DeleteReleaseByID(ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteReleaseByID: " + err.Error()) | |||
@@ -23,10 +23,11 @@ import ( | |||
) | |||
const ( | |||
CREATE base.TplName = "repo/create" | |||
MIGRATE base.TplName = "repo/migrate" | |||
tplCreate base.TplName = "repo/create" | |||
tplMigrate base.TplName = "repo/migrate" | |||
) | |||
// MustBeNotBare render when a repo is a bare git dir | |||
func MustBeNotBare(ctx *context.Context) { | |||
if ctx.Repo.Repository.IsBare { | |||
ctx.Handle(404, "MustBeNotBare", nil) | |||
@@ -64,6 +65,7 @@ func checkContextUser(ctx *context.Context, uid int64) *models.User { | |||
return org | |||
} | |||
// Create render creating repository page | |||
func Create(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("new_repo") | |||
@@ -81,7 +83,7 @@ func Create(ctx *context.Context) { | |||
} | |||
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{}) { | |||
@@ -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) { | |||
ctx.Data["Title"] = ctx.Tr("new_repo") | |||
@@ -116,7 +119,7 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | |||
ctx.Data["ContextUser"] = ctxUser | |||
if ctx.HasError() { | |||
ctx.HTML(200, CREATE) | |||
ctx.HTML(200, tplCreate) | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("new_migrate") | |||
ctx.Data["private"] = ctx.User.LastRepoVisibility | |||
@@ -156,9 +160,10 @@ func Migrate(ctx *context.Context) { | |||
} | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("new_migrate") | |||
@@ -169,7 +174,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||
ctx.Data["ContextUser"] = ctxUser | |||
if ctx.HasError() { | |||
ctx.HTML(200, MIGRATE) | |||
ctx.HTML(200, tplMigrate) | |||
return | |||
} | |||
@@ -180,11 +185,11 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||
addrErr := err.(models.ErrInvalidCloneAddr) | |||
switch { | |||
case addrErr.IsURLError: | |||
ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form) | |||
ctx.RenderWithErr(ctx.Tr("form.url_error"), tplMigrate, &form) | |||
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: | |||
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), MIGRATE, &form) | |||
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), tplMigrate, &form) | |||
default: | |||
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") || | |||
strings.Contains(err.Error(), "could not read Username") { | |||
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 | |||
} else if strings.Contains(err.Error(), "fatal:") { | |||
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 | |||
} | |||
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) { | |||
var err error | |||
switch ctx.Params(":action") { | |||
@@ -261,6 +267,7 @@ func Action(ctx *context.Context) { | |||
ctx.Redirect(redirectTo) | |||
} | |||
// Download download an archive of a repository | |||
func Download(ctx *context.Context) { | |||
var ( | |||
uri = ctx.Params("*") | |||
@@ -26,12 +26,14 @@ const ( | |||
tplDeployKeys base.TplName = "repo/settings/deploy_keys" | |||
) | |||
// Settings show a repository's settings page | |||
func Settings(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings") | |||
ctx.Data["PageIsSettingsOptions"] = true | |||
ctx.HTML(200, tplSettingsOptions) | |||
} | |||
// SettingsPost response for changes of a repository | |||
func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings") | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings") | |||
ctx.Data["PageIsSettingsCollaboration"] = true | |||
@@ -307,6 +310,7 @@ func Collaboration(ctx *context.Context) { | |||
ctx.HTML(200, tplCollaboration) | |||
} | |||
// CollaborationPost response for actions for a collaboration of a repository | |||
func CollaborationPost(ctx *context.Context) { | |||
name := strings.ToLower(ctx.Query("collaborator")) | |||
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) | |||
} | |||
// ChangeCollaborationAccessMode response for changing access of a collaboration | |||
func ChangeCollaborationAccessMode(ctx *context.Context) { | |||
if err := ctx.Repo.Repository.ChangeCollaborationAccessMode( | |||
ctx.QueryInt64("uid"), | |||
@@ -360,6 +365,7 @@ func ChangeCollaborationAccessMode(ctx *context.Context) { | |||
} | |||
} | |||
// DeleteCollaboration delete a collaboration for a repository | |||
func DeleteCollaboration(ctx *context.Context) { | |||
if err := ctx.Repo.Repository.DeleteCollaboration(ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteCollaboration: " + err.Error()) | |||
@@ -396,6 +402,7 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository) | |||
return owner, repo | |||
} | |||
// GitHooks hooks of a repository | |||
func GitHooks(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | |||
ctx.Data["PageIsSettingsGitHooks"] = true | |||
@@ -410,6 +417,7 @@ func GitHooks(ctx *context.Context) { | |||
ctx.HTML(200, tplGithooks) | |||
} | |||
// GitHooksEdit render for editing a hook of repository page | |||
func GitHooksEdit(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | |||
ctx.Data["PageIsSettingsGitHooks"] = true | |||
@@ -428,6 +436,7 @@ func GitHooksEdit(ctx *context.Context) { | |||
ctx.HTML(200, tplGithookEdit) | |||
} | |||
// GitHooksEditPost response for editing a git hook of a repository | |||
func GitHooksEditPost(ctx *context.Context) { | |||
name := ctx.Params(":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") | |||
} | |||
// DeployKeys render the deploy keys list of a repository page | |||
func DeployKeys(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | |||
ctx.Data["PageIsSettingsKeys"] = true | |||
@@ -461,6 +471,7 @@ func DeployKeys(ctx *context.Context) { | |||
ctx.HTML(200, tplDeployKeys) | |||
} | |||
// DeployKeysPost response for adding a deploy key of a repository | |||
func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | |||
ctx.Data["PageIsSettingsKeys"] = true | |||
@@ -511,6 +522,7 @@ func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { | |||
ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") | |||
} | |||
// DeleteDeployKey response for deleting a deploy key | |||
func DeleteDeployKey(ctx *context.Context) { | |||
if err := models.DeleteDeployKey(ctx.User, ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteDeployKey: " + err.Error()) | |||
@@ -28,6 +28,7 @@ const ( | |||
tplOrgHookNew base.TplName = "org/settings/hook_new" | |||
) | |||
// Webhooks render web hooks list page | |||
func Webhooks(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.hooks") | |||
ctx.Data["PageIsSettingsHooks"] = true | |||
@@ -44,7 +45,7 @@ func Webhooks(ctx *context.Context) { | |||
ctx.HTML(200, tplHooks) | |||
} | |||
type OrgRepoCtx struct { | |||
type orgRepoCtx struct { | |||
OrgID int64 | |||
RepoID int64 | |||
Link string | |||
@@ -52,9 +53,9 @@ type OrgRepoCtx struct { | |||
} | |||
// 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 { | |||
return &OrgRepoCtx{ | |||
return &orgRepoCtx{ | |||
RepoID: ctx.Repo.Repository.ID, | |||
Link: ctx.Repo.RepoLink, | |||
NewTemplate: tplHookNew, | |||
@@ -62,7 +63,7 @@ func getOrgRepoCtx(ctx *context.Context) (*OrgRepoCtx, error) { | |||
} | |||
if len(ctx.Org.OrgLink) > 0 { | |||
return &OrgRepoCtx{ | |||
return &orgRepoCtx{ | |||
OrgID: ctx.Org.Organization.ID, | |||
Link: ctx.Org.OrgLink, | |||
NewTemplate: tplOrgHookNew, | |||
@@ -81,6 +82,7 @@ func checkHookType(ctx *context.Context) string { | |||
return hookType | |||
} | |||
// WebhooksNew render creating webhook page | |||
func WebhooksNew(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | |||
ctx.Data["PageIsSettingsHooks"] = true | |||
@@ -102,6 +104,7 @@ func WebhooksNew(ctx *context.Context) { | |||
ctx.HTML(200, orCtx.NewTemplate) | |||
} | |||
// ParseHookEvent convert web form content to models.HookEvent | |||
func ParseHookEvent(form auth.WebhookForm) *models.HookEvent { | |||
return &models.HookEvent{ | |||
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) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | |||
ctx.Data["PageIsSettingsHooks"] = true | |||
@@ -161,6 +165,7 @@ func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { | |||
ctx.Redirect(orCtx.Link + "/settings/hooks") | |||
} | |||
// SlackHooksNewPost response for creating slack hook | |||
func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings") | |||
ctx.Data["PageIsSettingsHooks"] = true | |||
@@ -211,7 +216,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||
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 | |||
orCtx, err := getOrgRepoCtx(ctx) | |||
@@ -251,6 +256,7 @@ func checkWebhook(ctx *context.Context) (*OrgRepoCtx, *models.Webhook) { | |||
return orCtx, w | |||
} | |||
// WebHooksEdit render editing web hook page | |||
func WebHooksEdit(ctx *context.Context) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | |||
ctx.Data["PageIsSettingsHooks"] = true | |||
@@ -265,6 +271,7 @@ func WebHooksEdit(ctx *context.Context) { | |||
ctx.HTML(200, orCtx.NewTemplate) | |||
} | |||
// WebHooksEditPost response for editing web hook | |||
func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | |||
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)) | |||
} | |||
// SlackHooksEditPost reponse for editing slack hook | |||
func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||
ctx.Data["Title"] = ctx.Tr("repo.settings") | |||
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)) | |||
} | |||
// TestWebhook test if web hook is work fine | |||
func TestWebhook(ctx *context.Context) { | |||
// Grab latest commit or fake one if it's empty repository. | |||
commit := ctx.Repo.Commit | |||
@@ -393,6 +402,7 @@ func TestWebhook(ctx *context.Context) { | |||
} | |||
} | |||
// DeleteWebhook delete a webhook | |||
func DeleteWebhook(ctx *context.Context) { | |||
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | |||
ctx.Flash.Error("DeleteWebhookByRepoID: " + err.Error()) | |||