golint fixed for routers (#208)
This commit is contained in:
		
							parent
							
								
									3a3782bb7f
								
							
						
					
					
						commit
						3917ed45de
					
				| @ -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()) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user