@@ -13,7 +13,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/user" | "code.gitea.io/gitea/routers/api/v1/user" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Organizations#create-a-new-organization | |||||
// CreateOrg api for create organization | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Organizations#create-a-new-organization | |||||
func CreateOrg(ctx *context.APIContext, form api.CreateOrgOption) { | func CreateOrg(ctx *context.APIContext, form api.CreateOrgOption) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -9,6 +9,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// GetRepositoryByParams api for getting repository by orgnizition ID and repo name | |||||
func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { | func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { | ||||
repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame")) | repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame")) | ||||
if err != nil { | if err != nil { | ||||
@@ -22,6 +23,7 @@ func GetRepositoryByParams(ctx *context.APIContext) *models.Repository { | |||||
return repo | return repo | ||||
} | } | ||||
// AddTeamRepository api for adding a repository to a team | |||||
func AddTeamRepository(ctx *context.APIContext) { | func AddTeamRepository(ctx *context.APIContext) { | ||||
repo := GetRepositoryByParams(ctx) | repo := GetRepositoryByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -35,6 +37,7 @@ func AddTeamRepository(ctx *context.APIContext) { | |||||
ctx.Status(204) | ctx.Status(204) | ||||
} | } | ||||
// RemoveTeamRepository api for removing a repository from a team | |||||
func RemoveTeamRepository(ctx *context.APIContext) { | func RemoveTeamRepository(ctx *context.APIContext) { | ||||
repo := GetRepositoryByParams(ctx) | repo := GetRepositoryByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -13,6 +13,7 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/user" | "code.gitea.io/gitea/routers/api/v1/user" | ||||
) | ) | ||||
// CreateTeam api for create a team | |||||
func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | ||||
team := &models.Team{ | team := &models.Team{ | ||||
OrgID: ctx.Org.Organization.ID, | OrgID: ctx.Org.Organization.ID, | ||||
@@ -32,6 +33,7 @@ func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | |||||
ctx.JSON(201, convert.ToTeam(team)) | ctx.JSON(201, convert.ToTeam(team)) | ||||
} | } | ||||
// AddTeamMember api for add a member to a team | |||||
func AddTeamMember(ctx *context.APIContext) { | func AddTeamMember(ctx *context.APIContext) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -45,6 +47,7 @@ func AddTeamMember(ctx *context.APIContext) { | |||||
ctx.Status(204) | ctx.Status(204) | ||||
} | } | ||||
// RemoveTeamMember api for remove one member from a team | |||||
func RemoveTeamMember(ctx *context.APIContext) { | func RemoveTeamMember(ctx *context.APIContext) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -12,7 +12,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/user" | "code.gitea.io/gitea/routers/api/v1/user" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository | |||||
// CreateRepo api for creating a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Repositories#create-a-new-repository | |||||
func CreateRepo(ctx *context.APIContext, form api.CreateRepoOption) { | func CreateRepo(ctx *context.APIContext, form api.CreateRepoOption) { | ||||
owner := user.GetUserByParams(ctx) | owner := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -34,7 +34,8 @@ func parseLoginSource(ctx *context.APIContext, u *models.User, sourceID int64, l | |||||
u.LoginName = loginName | u.LoginName = loginName | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-new-user | |||||
// CreateUser api for creating a user | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-new-user | |||||
func CreateUser(ctx *context.APIContext, form api.CreateUserOption) { | func CreateUser(ctx *context.APIContext, form api.CreateUserOption) { | ||||
u := &models.User{ | u := &models.User{ | ||||
Name: form.Username, | Name: form.Username, | ||||
@@ -71,7 +72,8 @@ func CreateUser(ctx *context.APIContext, form api.CreateUserOption) { | |||||
ctx.JSON(201, u.APIFormat()) | ctx.JSON(201, u.APIFormat()) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#edit-an-existing-user | |||||
// EditUser api for modifying a user's information | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#edit-an-existing-user | |||||
func EditUser(ctx *context.APIContext, form api.EditUserOption) { | func EditUser(ctx *context.APIContext, form api.EditUserOption) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -123,6 +125,7 @@ func EditUser(ctx *context.APIContext, form api.EditUserOption) { | |||||
ctx.JSON(200, u.APIFormat()) | ctx.JSON(200, u.APIFormat()) | ||||
} | } | ||||
// DeleteUser api for deleting a user | |||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user | // https://github.com/gogits/go-gogs-client/wiki/Administration-Users#delete-a-user | ||||
func DeleteUser(ctx *context.APIContext) { | func DeleteUser(ctx *context.APIContext) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
@@ -144,7 +147,8 @@ func DeleteUser(ctx *context.APIContext) { | |||||
ctx.Status(204) | ctx.Status(204) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-public-key-for-user | |||||
// CreatePublicKey api for creating a public key to a user | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Administration-Users#create-a-public-key-for-user | |||||
func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { | func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -9,12 +9,13 @@ import ( | |||||
"github.com/Unknwon/com" | "github.com/Unknwon/com" | ||||
"code.gitea.io/git" | |||||
api "code.gitea.io/sdk/gitea" | api "code.gitea.io/sdk/gitea" | ||||
"code.gitea.io/git" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
) | ) | ||||
// ToEmail convert models.EmailAddress to api.Email | |||||
func ToEmail(email *models.EmailAddress) *api.Email { | func ToEmail(email *models.EmailAddress) *api.Email { | ||||
return &api.Email{ | return &api.Email{ | ||||
Email: email.Email, | Email: email.Email, | ||||
@@ -23,6 +24,7 @@ func ToEmail(email *models.EmailAddress) *api.Email { | |||||
} | } | ||||
} | } | ||||
// ToBranch convert a commit and branch to an api.Branch | |||||
func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { | func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { | ||||
return &api.Branch{ | return &api.Branch{ | ||||
Name: b.Name, | Name: b.Name, | ||||
@@ -30,6 +32,7 @@ func ToBranch(b *models.Branch, c *git.Commit) *api.Branch { | |||||
} | } | ||||
} | } | ||||
// ToCommit convert a commit to api.PayloadCommit | |||||
func ToCommit(c *git.Commit) *api.PayloadCommit { | func ToCommit(c *git.Commit) *api.PayloadCommit { | ||||
authorUsername := "" | authorUsername := "" | ||||
author, err := models.GetUserByEmail(c.Author.Email) | author, err := models.GetUserByEmail(c.Author.Email) | ||||
@@ -59,6 +62,7 @@ func ToCommit(c *git.Commit) *api.PayloadCommit { | |||||
} | } | ||||
} | } | ||||
// ToPublicKey convert models.PublicKey to api.PublicKey | |||||
func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { | func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { | ||||
return &api.PublicKey{ | return &api.PublicKey{ | ||||
ID: key.ID, | ID: key.ID, | ||||
@@ -69,6 +73,7 @@ func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { | |||||
} | } | ||||
} | } | ||||
// ToHook convert models.Webhook to api.Hook | |||||
func ToHook(repoLink string, w *models.Webhook) *api.Hook { | func ToHook(repoLink string, w *models.Webhook) *api.Hook { | ||||
config := map[string]string{ | config := map[string]string{ | ||||
"url": w.URL, | "url": w.URL, | ||||
@@ -94,6 +99,7 @@ func ToHook(repoLink string, w *models.Webhook) *api.Hook { | |||||
} | } | ||||
} | } | ||||
// ToDeployKey convert models.DeployKey to api.DeployKey | |||||
func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { | func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { | ||||
return &api.DeployKey{ | return &api.DeployKey{ | ||||
ID: key.ID, | ID: key.ID, | ||||
@@ -105,6 +111,7 @@ func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { | |||||
} | } | ||||
} | } | ||||
// ToOrganization convert models.User to api.Organization | |||||
func ToOrganization(org *models.User) *api.Organization { | func ToOrganization(org *models.User) *api.Organization { | ||||
return &api.Organization{ | return &api.Organization{ | ||||
ID: org.ID, | ID: org.ID, | ||||
@@ -117,6 +124,7 @@ func ToOrganization(org *models.User) *api.Organization { | |||||
} | } | ||||
} | } | ||||
// ToTeam convert models.Team to api.Team | |||||
func ToTeam(team *models.Team) *api.Team { | func ToTeam(team *models.Team) *api.Team { | ||||
return &api.Team{ | return &api.Team{ | ||||
ID: team.ID, | ID: team.ID, | ||||
@@ -11,7 +11,8 @@ import ( | |||||
"code.gitea.io/gitea/modules/markdown" | "code.gitea.io/gitea/modules/markdown" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-an-arbitrary-markdown-document | |||||
// Markdown render markdown document to HTML | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-an-arbitrary-markdown-document | |||||
func Markdown(ctx *context.APIContext, form api.MarkdownOption) { | func Markdown(ctx *context.APIContext, form api.MarkdownOption) { | ||||
if ctx.HasApiError() { | if ctx.HasApiError() { | ||||
ctx.Error(422, "", ctx.GetErrMsg()) | ctx.Error(422, "", ctx.GetErrMsg()) | ||||
@@ -31,7 +32,8 @@ func Markdown(ctx *context.APIContext, form api.MarkdownOption) { | |||||
} | } | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-a-markdown-document-in-raw-mode | |||||
// MarkdownRaw render raw markdown HTML | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Miscellaneous#render-a-markdown-document-in-raw-mode | |||||
func MarkdownRaw(ctx *context.APIContext) { | func MarkdownRaw(ctx *context.APIContext) { | ||||
body, err := ctx.Req.Body().Bytes() | body, err := ctx.Req.Body().Bytes() | ||||
if err != nil { | if err != nil { | ||||
@@ -26,12 +26,14 @@ func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) { | |||||
ctx.JSON(200, &apiOrgs) | ctx.JSON(200, &apiOrgs) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Organizations#list-your-organizations | |||||
// ListMyOrgs list all my orgs | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#list-your-organizations | |||||
func ListMyOrgs(ctx *context.APIContext) { | func ListMyOrgs(ctx *context.APIContext) { | ||||
listUserOrgs(ctx, ctx.User, true) | listUserOrgs(ctx, ctx.User, true) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Organizations#list-user-organizations | |||||
// ListUserOrgs list user's orgs | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#list-user-organizations | |||||
func ListUserOrgs(ctx *context.APIContext) { | func ListUserOrgs(ctx *context.APIContext) { | ||||
u := user.GetUserByParams(ctx) | u := user.GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -40,12 +42,14 @@ func ListUserOrgs(ctx *context.APIContext) { | |||||
listUserOrgs(ctx, u, false) | listUserOrgs(ctx, u, false) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Organizations#get-an-organization | |||||
// Get get an organization | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#get-an-organization | |||||
func Get(ctx *context.APIContext) { | func Get(ctx *context.APIContext) { | ||||
ctx.JSON(200, convert.ToOrganization(ctx.Org.Organization)) | ctx.JSON(200, convert.ToOrganization(ctx.Org.Organization)) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Organizations#edit-an-organization | |||||
// Edit change an organization's information | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Organizations#edit-an-organization | |||||
func Edit(ctx *context.APIContext, form api.EditOrgOption) { | func Edit(ctx *context.APIContext, form api.EditOrgOption) { | ||||
org := ctx.Org.Organization | org := ctx.Org.Organization | ||||
if !org.IsOwnedBy(ctx.User.ID) { | if !org.IsOwnedBy(ctx.User.ID) { | ||||
@@ -11,6 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/convert" | "code.gitea.io/gitea/routers/api/v1/convert" | ||||
) | ) | ||||
// ListTeams list all the teams of an organization | |||||
func ListTeams(ctx *context.APIContext) { | func ListTeams(ctx *context.APIContext) { | ||||
org := ctx.Org.Organization | org := ctx.Org.Organization | ||||
if err := org.GetTeams(); err != nil { | if err := org.GetTeams(); err != nil { | ||||
@@ -11,7 +11,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/convert" | "code.gitea.io/gitea/routers/api/v1/convert" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch | |||||
// GetBranch get a branch of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get-branch | |||||
func GetBranch(ctx *context.APIContext) { | func GetBranch(ctx *context.APIContext) { | ||||
branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname")) | branch, err := ctx.Repo.Repository.GetBranch(ctx.Params(":branchname")) | ||||
if err != nil { | if err != nil { | ||||
@@ -28,7 +29,8 @@ func GetBranch(ctx *context.APIContext) { | |||||
ctx.JSON(200, convert.ToBranch(branch, c)) | ctx.JSON(200, convert.ToBranch(branch, c)) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-branches | |||||
// ListBranches list all the branches of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-branches | |||||
func ListBranches(ctx *context.APIContext) { | func ListBranches(ctx *context.APIContext) { | ||||
branches, err := ctx.Repo.Repository.GetBranches() | branches, err := ctx.Repo.Repository.GetBranches() | ||||
if err != nil { | if err != nil { | ||||
@@ -11,6 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// AddCollaborator add a collaborator of a repository | |||||
func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) { | func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) { | ||||
collaborator, err := models.GetUserByName(ctx.Params(":collaborator")) | collaborator, err := models.GetUserByName(ctx.Params(":collaborator")) | ||||
if err != nil { | if err != nil { | ||||
@@ -12,7 +12,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/repo" | "code.gitea.io/gitea/routers/repo" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-raw-content | |||||
// GetRawFile get a file by path on a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-raw-content | |||||
func GetRawFile(ctx *context.APIContext) { | func GetRawFile(ctx *context.APIContext) { | ||||
if !ctx.Repo.HasAccess() { | if !ctx.Repo.HasAccess() { | ||||
ctx.Status(404) | ctx.Status(404) | ||||
@@ -33,7 +34,8 @@ func GetRawFile(ctx *context.APIContext) { | |||||
} | } | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-archive | |||||
// GetArchive get archive of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Contents#download-archive | |||||
func GetArchive(ctx *context.APIContext) { | func GetArchive(ctx *context.APIContext) { | ||||
repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) | repoPath := models.RepoPath(ctx.Params(":username"), ctx.Params(":reponame")) | ||||
gitRepo, err := git.OpenRepository(repoPath) | gitRepo, err := git.OpenRepository(repoPath) | ||||
@@ -46,6 +48,7 @@ func GetArchive(ctx *context.APIContext) { | |||||
repo.Download(ctx.Context) | repo.Download(ctx.Context) | ||||
} | } | ||||
// GetEditorconfig get editor config of a repository | |||||
func GetEditorconfig(ctx *context.APIContext) { | func GetEditorconfig(ctx *context.APIContext) { | ||||
ec, err := ctx.Repo.GetEditorconfig() | ec, err := ctx.Repo.GetEditorconfig() | ||||
if err != nil { | if err != nil { | ||||
@@ -16,7 +16,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/convert" | "code.gitea.io/gitea/routers/api/v1/convert" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-hooks | |||||
// ListHooks list all hooks of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-hooks | |||||
func ListHooks(ctx *context.APIContext) { | func ListHooks(ctx *context.APIContext) { | ||||
hooks, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID) | hooks, err := models.GetWebhooksByRepoID(ctx.Repo.Repository.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -31,7 +32,8 @@ func ListHooks(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiHooks) | ctx.JSON(200, &apiHooks) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook | |||||
// CreateHook create a hook for a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create-a-hook | |||||
func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { | func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { | ||||
if !models.IsValidHookTaskType(form.Type) { | if !models.IsValidHookTaskType(form.Type) { | ||||
ctx.Error(422, "", "Invalid hook type") | ctx.Error(422, "", "Invalid hook type") | ||||
@@ -97,7 +99,8 @@ func CreateHook(ctx *context.APIContext, form api.CreateHookOption) { | |||||
ctx.JSON(201, convert.ToHook(ctx.Repo.RepoLink, w)) | ctx.JSON(201, convert.ToHook(ctx.Repo.RepoLink, w)) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#edit-a-hook | |||||
// EditHook modify a hook of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#edit-a-hook | |||||
func EditHook(ctx *context.APIContext, form api.EditHookOption) { | func EditHook(ctx *context.APIContext, form api.EditHookOption) { | ||||
w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -165,6 +168,7 @@ func EditHook(ctx *context.APIContext, form api.EditHookOption) { | |||||
ctx.JSON(200, convert.ToHook(ctx.Repo.RepoLink, w)) | ctx.JSON(200, convert.ToHook(ctx.Repo.RepoLink, w)) | ||||
} | } | ||||
// DeleteHook delete a hook of a repository | |||||
func DeleteHook(ctx *context.APIContext) { | func DeleteHook(ctx *context.APIContext) { | ||||
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | ||||
ctx.Error(500, "DeleteWebhookByRepoID", err) | ctx.Error(500, "DeleteWebhookByRepoID", err) | ||||
@@ -15,6 +15,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
) | ) | ||||
// ListIssues list the issues of a repository | |||||
func ListIssues(ctx *context.APIContext) { | func ListIssues(ctx *context.APIContext) { | ||||
issues, err := models.Issues(&models.IssuesOptions{ | issues, err := models.Issues(&models.IssuesOptions{ | ||||
RepoID: ctx.Repo.Repository.ID, | RepoID: ctx.Repo.Repository.ID, | ||||
@@ -39,6 +40,7 @@ func ListIssues(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiIssues) | ctx.JSON(200, &apiIssues) | ||||
} | } | ||||
// GetIssue get an issue of a repository | |||||
func GetIssue(ctx *context.APIContext) { | func GetIssue(ctx *context.APIContext) { | ||||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||
if err != nil { | if err != nil { | ||||
@@ -52,6 +54,7 @@ func GetIssue(ctx *context.APIContext) { | |||||
ctx.JSON(200, issue.APIFormat()) | ctx.JSON(200, issue.APIFormat()) | ||||
} | } | ||||
// CreateIssue create an issue of a repository | |||||
func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { | func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { | ||||
issue := &models.Issue{ | issue := &models.Issue{ | ||||
RepoID: ctx.Repo.Repository.ID, | RepoID: ctx.Repo.Repository.ID, | ||||
@@ -101,6 +104,7 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { | |||||
ctx.JSON(201, issue.APIFormat()) | ctx.JSON(201, issue.APIFormat()) | ||||
} | } | ||||
// EditIssue modify an issue of a repository | |||||
func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { | func EditIssue(ctx *context.APIContext, form api.EditIssueOption) { | ||||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||
if err != nil { | if err != nil { | ||||
@@ -1,6 +1,7 @@ | |||||
// Copyright 2015 The Gogs Authors. All rights reserved. | // Copyright 2015 The Gogs Authors. All rights reserved. | ||||
// Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||
// license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
package repo | package repo | ||||
import ( | import ( | ||||
@@ -12,6 +13,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// ListIssueComments list all the comments of an issue | |||||
func ListIssueComments(ctx *context.APIContext) { | func ListIssueComments(ctx *context.APIContext) { | ||||
var since time.Time | var since time.Time | ||||
if len(ctx.Query("since")) > 0 { | if len(ctx.Query("since")) > 0 { | ||||
@@ -38,6 +40,7 @@ func ListIssueComments(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiComments) | ctx.JSON(200, &apiComments) | ||||
} | } | ||||
// CreateIssueComment create a comment for an issue | |||||
func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOption) { | func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOption) { | ||||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||
if err != nil { | if err != nil { | ||||
@@ -54,6 +57,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti | |||||
ctx.JSON(201, comment.APIFormat()) | ctx.JSON(201, comment.APIFormat()) | ||||
} | } | ||||
// EditIssueComment modify a comment of an issue | |||||
func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { | func EditIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) { | ||||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -11,6 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// ListIssueLabels list all the labels of an issue | |||||
func ListIssueLabels(ctx *context.APIContext) { | func ListIssueLabels(ctx *context.APIContext) { | ||||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||
if err != nil { | if err != nil { | ||||
@@ -29,6 +30,7 @@ func ListIssueLabels(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiLabels) | ctx.JSON(200, &apiLabels) | ||||
} | } | ||||
// AddIssueLabels add labels for an issue | |||||
func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -69,6 +71,7 @@ func AddIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||||
ctx.JSON(200, &apiLabels) | ctx.JSON(200, &apiLabels) | ||||
} | } | ||||
// DeleteIssueLabel delete a label for an issue | |||||
func DeleteIssueLabel(ctx *context.APIContext) { | func DeleteIssueLabel(ctx *context.APIContext) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -103,6 +106,7 @@ func DeleteIssueLabel(ctx *context.APIContext) { | |||||
ctx.Status(204) | ctx.Status(204) | ||||
} | } | ||||
// ReplaceIssueLabels replace labels for an issue | |||||
func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -143,6 +147,7 @@ func ReplaceIssueLabels(ctx *context.APIContext, form api.IssueLabelsOption) { | |||||
ctx.JSON(200, &apiLabels) | ctx.JSON(200, &apiLabels) | ||||
} | } | ||||
// ClearIssueLabels delete all the labels for an issue | |||||
func ClearIssueLabels(ctx *context.APIContext) { | func ClearIssueLabels(ctx *context.APIContext) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -19,7 +19,8 @@ func composeDeployKeysAPILink(repoPath string) string { | |||||
return setting.AppUrl + "api/v1/repos/" + repoPath + "/keys/" | return setting.AppUrl + "api/v1/repos/" + repoPath + "/keys/" | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#list-deploy-keys | |||||
// ListDeployKeys list all the deploy keys of a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#list-deploy-keys | |||||
func ListDeployKeys(ctx *context.APIContext) { | func ListDeployKeys(ctx *context.APIContext) { | ||||
keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) | keys, err := models.ListDeployKeys(ctx.Repo.Repository.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -40,7 +41,8 @@ func ListDeployKeys(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiKeys) | ctx.JSON(200, &apiKeys) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#get-a-deploy-key | |||||
// GetDeployKey get a deploy key by id | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#get-a-deploy-key | |||||
func GetDeployKey(ctx *context.APIContext) { | func GetDeployKey(ctx *context.APIContext) { | ||||
key, err := models.GetDeployKeyByID(ctx.ParamsInt64(":id")) | key, err := models.GetDeployKeyByID(ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -61,6 +63,7 @@ func GetDeployKey(ctx *context.APIContext) { | |||||
ctx.JSON(200, convert.ToDeployKey(apiLink, key)) | ctx.JSON(200, convert.ToDeployKey(apiLink, key)) | ||||
} | } | ||||
// HandleCheckKeyStringError handle check key error | |||||
func HandleCheckKeyStringError(ctx *context.APIContext, err error) { | func HandleCheckKeyStringError(ctx *context.APIContext, err error) { | ||||
if models.IsErrKeyUnableVerify(err) { | if models.IsErrKeyUnableVerify(err) { | ||||
ctx.Error(422, "", "Unable to verify key content") | ctx.Error(422, "", "Unable to verify key content") | ||||
@@ -69,6 +72,7 @@ func HandleCheckKeyStringError(ctx *context.APIContext, err error) { | |||||
} | } | ||||
} | } | ||||
// HandleAddKeyError handle add key error | |||||
func HandleAddKeyError(ctx *context.APIContext, err error) { | func HandleAddKeyError(ctx *context.APIContext, err error) { | ||||
switch { | switch { | ||||
case models.IsErrKeyAlreadyExist(err): | case models.IsErrKeyAlreadyExist(err): | ||||
@@ -80,7 +84,8 @@ func HandleAddKeyError(ctx *context.APIContext, err error) { | |||||
} | } | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#add-a-new-deploy-key | |||||
// CreateDeployKey create deploy key for a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#add-a-new-deploy-key | |||||
func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) { | func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) { | ||||
content, err := models.CheckPublicKeyString(form.Key) | content, err := models.CheckPublicKeyString(form.Key) | ||||
if err != nil { | if err != nil { | ||||
@@ -99,7 +104,8 @@ func CreateDeployKey(ctx *context.APIContext, form api.CreateKeyOption) { | |||||
ctx.JSON(201, convert.ToDeployKey(apiLink, key)) | ctx.JSON(201, convert.ToDeployKey(apiLink, key)) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#remove-a-deploy-key | |||||
// DeleteDeploykey delete deploy key for a repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories-Deploy-Keys#remove-a-deploy-key | |||||
func DeleteDeploykey(ctx *context.APIContext) { | func DeleteDeploykey(ctx *context.APIContext) { | ||||
if err := models.DeleteDeployKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | if err := models.DeleteDeployKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | ||||
if models.IsErrKeyAccessDenied(err) { | if models.IsErrKeyAccessDenied(err) { | ||||
@@ -11,6 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// ListLabels list all the labels of a repository | |||||
func ListLabels(ctx *context.APIContext) { | func ListLabels(ctx *context.APIContext) { | ||||
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -25,6 +26,7 @@ func ListLabels(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiLabels) | ctx.JSON(200, &apiLabels) | ||||
} | } | ||||
// GetLabel get label by repository and label id | |||||
func GetLabel(ctx *context.APIContext) { | func GetLabel(ctx *context.APIContext) { | ||||
label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -39,6 +41,7 @@ func GetLabel(ctx *context.APIContext) { | |||||
ctx.JSON(200, label.APIFormat()) | ctx.JSON(200, label.APIFormat()) | ||||
} | } | ||||
// CreateLabel create a label for a repository | |||||
func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -57,6 +60,7 @@ func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) { | |||||
ctx.JSON(201, label.APIFormat()) | ctx.JSON(201, label.APIFormat()) | ||||
} | } | ||||
// EditLabel modify a label for a repository | |||||
func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { | func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -86,6 +90,7 @@ func EditLabel(ctx *context.APIContext, form api.EditLabelOption) { | |||||
ctx.JSON(200, label.APIFormat()) | ctx.JSON(200, label.APIFormat()) | ||||
} | } | ||||
// DeleteLabel delete a label for a repository | |||||
func DeleteLabel(ctx *context.APIContext) { | func DeleteLabel(ctx *context.APIContext) { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
ctx.Status(403) | ctx.Status(403) | ||||
@@ -13,6 +13,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// ListMilestones list all the milestones for a repository | |||||
func ListMilestones(ctx *context.APIContext) { | func ListMilestones(ctx *context.APIContext) { | ||||
milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) | milestones, err := models.GetMilestonesByRepoID(ctx.Repo.Repository.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -27,6 +28,7 @@ func ListMilestones(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiMilestones) | ctx.JSON(200, &apiMilestones) | ||||
} | } | ||||
// GetMilestone get a milestone for a repository | |||||
func GetMilestone(ctx *context.APIContext) { | func GetMilestone(ctx *context.APIContext) { | ||||
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -40,6 +42,7 @@ func GetMilestone(ctx *context.APIContext) { | |||||
ctx.JSON(200, milestone.APIFormat()) | ctx.JSON(200, milestone.APIFormat()) | ||||
} | } | ||||
// CreateMilestone create a milestone for a repository | |||||
func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) { | func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) { | ||||
if form.Deadline == nil { | if form.Deadline == nil { | ||||
defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local) | defaultDeadline, _ := time.ParseInLocation("2006-01-02", "9999-12-31", time.Local) | ||||
@@ -60,6 +63,7 @@ func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) { | |||||
ctx.JSON(201, milestone.APIFormat()) | ctx.JSON(201, milestone.APIFormat()) | ||||
} | } | ||||
// EditMilestone modify a milestone for a repository | |||||
func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { | func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { | ||||
milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -88,6 +92,7 @@ func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) { | |||||
ctx.JSON(200, milestone.APIFormat()) | ctx.JSON(200, milestone.APIFormat()) | ||||
} | } | ||||
// DeleteMilestone delete a milestone for a repository | |||||
func DeleteMilestone(ctx *context.APIContext) { | func DeleteMilestone(ctx *context.APIContext) { | ||||
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil { | ||||
ctx.Error(500, "DeleteMilestoneByRepoID", err) | ctx.Error(500, "DeleteMilestoneByRepoID", err) | ||||
@@ -17,7 +17,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/convert" | "code.gitea.io/gitea/routers/api/v1/convert" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories | |||||
// Search repositories via options | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#search-repositories | |||||
func Search(ctx *context.APIContext) { | func Search(ctx *context.APIContext) { | ||||
opts := &models.SearchRepoOptions{ | opts := &models.SearchRepoOptions{ | ||||
Keyword: path.Base(ctx.Query("q")), | Keyword: path.Base(ctx.Query("q")), | ||||
@@ -76,7 +77,8 @@ func Search(ctx *context.APIContext) { | |||||
}) | }) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories | |||||
// ListMyRepos list all my repositories | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories | |||||
func ListMyRepos(ctx *context.APIContext) { | func ListMyRepos(ctx *context.APIContext) { | ||||
ownRepos, err := models.GetUserRepositories(ctx.User.ID, true, 1, ctx.User.NumRepos) | ownRepos, err := models.GetUserRepositories(ctx.User.ID, true, 1, ctx.User.NumRepos) | ||||
if err != nil { | if err != nil { | ||||
@@ -109,6 +111,7 @@ func ListMyRepos(ctx *context.APIContext) { | |||||
ctx.JSON(200, &repos) | ctx.JSON(200, &repos) | ||||
} | } | ||||
// CreateUserRepo create a repository for a user | |||||
func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { | func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { | ||||
repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ | repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ | ||||
Name: opt.Name, | Name: opt.Name, | ||||
@@ -138,7 +141,8 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR | |||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#create | |||||
// Create create one repository of mine | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#create | |||||
func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | ||||
// Shouldn't reach this condition, but just in case. | // Shouldn't reach this condition, but just in case. | ||||
if ctx.User.IsOrganization() { | if ctx.User.IsOrganization() { | ||||
@@ -148,6 +152,7 @@ func Create(ctx *context.APIContext, opt api.CreateRepoOption) { | |||||
CreateUserRepo(ctx, ctx.User, opt) | CreateUserRepo(ctx, ctx.User, opt) | ||||
} | } | ||||
// CreateOrgRepo create one repository of the organization | |||||
func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { | func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { | ||||
org, err := models.GetOrgByName(ctx.Params(":org")) | org, err := models.GetOrgByName(ctx.Params(":org")) | ||||
if err != nil { | if err != nil { | ||||
@@ -166,7 +171,8 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) { | |||||
CreateUserRepo(ctx, org, opt) | CreateUserRepo(ctx, org, opt) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#migrate | |||||
// Migrate migrate remote git repository to gitea | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#migrate | |||||
func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { | func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { | ||||
ctxUser := ctx.User | ctxUser := ctx.User | ||||
// Not equal means context user is an organization, | // Not equal means context user is an organization, | ||||
@@ -238,13 +244,15 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) { | |||||
ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(201, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#get | |||||
// Get get one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#get | |||||
func Get(ctx *context.APIContext) { | func Get(ctx *context.APIContext) { | ||||
repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) | ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true})) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Repositories#delete | |||||
// Delete delete one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete | |||||
func Delete(ctx *context.APIContext) { | func Delete(ctx *context.APIContext) { | ||||
owner := ctx.Repo.Owner | owner := ctx.Repo.Owner | ||||
repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
@@ -11,7 +11,8 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users#list-access-tokens-for-a-user | |||||
// ListAccessTokens list all the access tokens | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users#list-access-tokens-for-a-user | |||||
func ListAccessTokens(ctx *context.APIContext) { | func ListAccessTokens(ctx *context.APIContext) { | ||||
tokens, err := models.ListAccessTokens(ctx.User.ID) | tokens, err := models.ListAccessTokens(ctx.User.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -26,7 +27,8 @@ func ListAccessTokens(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiTokens) | ctx.JSON(200, &apiTokens) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users#create-a-access-token | |||||
// CreateAccessToken create access tokens | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users#create-a-access-token | |||||
func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption) { | func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption) { | ||||
t := &models.AccessToken{ | t := &models.AccessToken{ | ||||
UID: ctx.User.ID, | UID: ctx.User.ID, | ||||
@@ -13,7 +13,8 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/convert" | "code.gitea.io/gitea/routers/api/v1/convert" | ||||
) | ) | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user | |||||
// ListEmails list all the emails of mine | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#list-email-addresses-for-a-user | |||||
func ListEmails(ctx *context.APIContext) { | func ListEmails(ctx *context.APIContext) { | ||||
emails, err := models.GetEmailAddresses(ctx.User.ID) | emails, err := models.GetEmailAddresses(ctx.User.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -27,7 +28,8 @@ func ListEmails(ctx *context.APIContext) { | |||||
ctx.JSON(200, &apiEmails) | ctx.JSON(200, &apiEmails) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#add-email-addresses | |||||
// AddEmail add email for me | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#add-email-addresses | |||||
func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) { | func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) { | ||||
if len(form.Emails) == 0 { | if len(form.Emails) == 0 { | ||||
ctx.Status(422) | ctx.Status(422) | ||||
@@ -59,7 +61,8 @@ func AddEmail(ctx *context.APIContext, form api.CreateEmailOption) { | |||||
ctx.JSON(201, &apiEmails) | ctx.JSON(201, &apiEmails) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Emails#delete-email-addresses | |||||
// DeleteEmail delete email | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Emails#delete-email-addresses | |||||
func DeleteEmail(ctx *context.APIContext, form api.CreateEmailOption) { | func DeleteEmail(ctx *context.APIContext, form api.CreateEmailOption) { | ||||
if len(form.Emails) == 0 { | if len(form.Emails) == 0 { | ||||
ctx.Status(204) | ctx.Status(204) | ||||
@@ -11,7 +11,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
func responseApiUsers(ctx *context.APIContext, users []*models.User) { | |||||
func responseAPIUsers(ctx *context.APIContext, users []*models.User) { | |||||
apiUsers := make([]*api.User, len(users)) | apiUsers := make([]*api.User, len(users)) | ||||
for i := range users { | for i := range users { | ||||
apiUsers[i] = users[i].APIFormat() | apiUsers[i] = users[i].APIFormat() | ||||
@@ -25,14 +25,16 @@ func listUserFollowers(ctx *context.APIContext, u *models.User) { | |||||
ctx.Error(500, "GetUserFollowers", err) | ctx.Error(500, "GetUserFollowers", err) | ||||
return | return | ||||
} | } | ||||
responseApiUsers(ctx, users) | |||||
responseAPIUsers(ctx, users) | |||||
} | } | ||||
// ListMyFollowers list all my followers | |||||
func ListMyFollowers(ctx *context.APIContext) { | func ListMyFollowers(ctx *context.APIContext) { | ||||
listUserFollowers(ctx, ctx.User) | listUserFollowers(ctx, ctx.User) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-followers-of-a-user | |||||
// ListFollowers list user's followers | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-followers-of-a-user | |||||
func ListFollowers(ctx *context.APIContext) { | func ListFollowers(ctx *context.APIContext) { | ||||
u := GetUserByParams(ctx) | u := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -47,14 +49,16 @@ func listUserFollowing(ctx *context.APIContext, u *models.User) { | |||||
ctx.Error(500, "GetFollowing", err) | ctx.Error(500, "GetFollowing", err) | ||||
return | return | ||||
} | } | ||||
responseApiUsers(ctx, users) | |||||
responseAPIUsers(ctx, users) | |||||
} | } | ||||
// ListMyFollowing list all my followings | |||||
func ListMyFollowing(ctx *context.APIContext) { | func ListMyFollowing(ctx *context.APIContext) { | ||||
listUserFollowing(ctx, ctx.User) | listUserFollowing(ctx, ctx.User) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-users-followed-by-another-user | |||||
// ListFollowing list user's followings | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#list-users-followed-by-another-user | |||||
func ListFollowing(ctx *context.APIContext) { | func ListFollowing(ctx *context.APIContext) { | ||||
u := GetUserByParams(ctx) | u := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -71,7 +75,8 @@ func checkUserFollowing(ctx *context.APIContext, u *models.User, followID int64) | |||||
} | } | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-you-are-following-a-user | |||||
// CheckMyFollowing check if the repo is followed by me | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-you-are-following-a-user | |||||
func CheckMyFollowing(ctx *context.APIContext) { | func CheckMyFollowing(ctx *context.APIContext) { | ||||
target := GetUserByParams(ctx) | target := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -80,7 +85,8 @@ func CheckMyFollowing(ctx *context.APIContext) { | |||||
checkUserFollowing(ctx, ctx.User, target.ID) | checkUserFollowing(ctx, ctx.User, target.ID) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-one-user-follows-another | |||||
// CheckFollowing check if the repo is followed by user | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#check-if-one-user-follows-another | |||||
func CheckFollowing(ctx *context.APIContext) { | func CheckFollowing(ctx *context.APIContext) { | ||||
u := GetUserByParams(ctx) | u := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -93,7 +99,8 @@ func CheckFollowing(ctx *context.APIContext) { | |||||
checkUserFollowing(ctx, u, target.ID) | checkUserFollowing(ctx, u, target.ID) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#follow-a-user | |||||
// Follow follow one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#follow-a-user | |||||
func Follow(ctx *context.APIContext) { | func Follow(ctx *context.APIContext) { | ||||
target := GetUserByParams(ctx) | target := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -106,7 +113,8 @@ func Follow(ctx *context.APIContext) { | |||||
ctx.Status(204) | ctx.Status(204) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Followers#unfollow-a-user | |||||
// Unfollow unfollow one repository | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Followers#unfollow-a-user | |||||
func Unfollow(ctx *context.APIContext) { | func Unfollow(ctx *context.APIContext) { | ||||
target := GetUserByParams(ctx) | target := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -14,6 +14,7 @@ import ( | |||||
"code.gitea.io/gitea/routers/api/v1/repo" | "code.gitea.io/gitea/routers/api/v1/repo" | ||||
) | ) | ||||
// GetUserByParamsName get user by name | |||||
func GetUserByParamsName(ctx *context.APIContext, name string) *models.User { | func GetUserByParamsName(ctx *context.APIContext, name string) *models.User { | ||||
user, err := models.GetUserByName(ctx.Params(name)) | user, err := models.GetUserByName(ctx.Params(name)) | ||||
if err != nil { | if err != nil { | ||||
@@ -52,12 +53,14 @@ func listPublicKeys(ctx *context.APIContext, uid int64) { | |||||
ctx.JSON(200, &apiKeys) | ctx.JSON(200, &apiKeys) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-your-public-keys | |||||
// ListMyPublicKeys list all my public keys | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-your-public-keys | |||||
func ListMyPublicKeys(ctx *context.APIContext) { | func ListMyPublicKeys(ctx *context.APIContext) { | ||||
listPublicKeys(ctx, ctx.User.ID) | listPublicKeys(ctx, ctx.User.ID) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-public-keys-for-a-user | |||||
// ListPublicKeys list all user's public keys | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#list-public-keys-for-a-user | |||||
func ListPublicKeys(ctx *context.APIContext) { | func ListPublicKeys(ctx *context.APIContext) { | ||||
user := GetUserByParams(ctx) | user := GetUserByParams(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -66,7 +69,8 @@ func ListPublicKeys(ctx *context.APIContext) { | |||||
listPublicKeys(ctx, user.ID) | listPublicKeys(ctx, user.ID) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#get-a-single-public-key | |||||
// GetPublicKey get one public key | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#get-a-single-public-key | |||||
func GetPublicKey(ctx *context.APIContext) { | func GetPublicKey(ctx *context.APIContext) { | ||||
key, err := models.GetPublicKeyByID(ctx.ParamsInt64(":id")) | key, err := models.GetPublicKeyByID(ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -99,12 +103,14 @@ func CreateUserPublicKey(ctx *context.APIContext, form api.CreateKeyOption, uid | |||||
ctx.JSON(201, convert.ToPublicKey(apiLink, key)) | ctx.JSON(201, convert.ToPublicKey(apiLink, key)) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key | |||||
// CreatePublicKey create one public key for me | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#create-a-public-key | |||||
func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { | func CreatePublicKey(ctx *context.APIContext, form api.CreateKeyOption) { | ||||
CreateUserPublicKey(ctx, form, ctx.User.ID) | CreateUserPublicKey(ctx, form, ctx.User.ID) | ||||
} | } | ||||
// https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#delete-a-public-key | |||||
// DeletePublicKey delete one public key of mine | |||||
// see https://github.com/gogits/go-gogs-client/wiki/Users-Public-Keys#delete-a-public-key | |||||
func DeletePublicKey(ctx *context.APIContext) { | func DeletePublicKey(ctx *context.APIContext) { | ||||
if err := models.DeletePublicKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | if err := models.DeletePublicKey(ctx.User, ctx.ParamsInt64(":id")); err != nil { | ||||
if models.IsErrKeyAccessDenied(err) { | if models.IsErrKeyAccessDenied(err) { | ||||
@@ -13,6 +13,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// Search search users | |||||
func Search(ctx *context.APIContext) { | func Search(ctx *context.APIContext) { | ||||
opts := &models.SearchUserOptions{ | opts := &models.SearchUserOptions{ | ||||
Keyword: ctx.Query("q"), | Keyword: ctx.Query("q"), | ||||
@@ -51,6 +52,7 @@ func Search(ctx *context.APIContext) { | |||||
}) | }) | ||||
} | } | ||||
// GetInfo get user's information | |||||
func GetInfo(ctx *context.APIContext) { | func GetInfo(ctx *context.APIContext) { | ||||
u, err := models.GetUserByName(ctx.Params(":username")) | u, err := models.GetUserByName(ctx.Params(":username")) | ||||
if err != nil { | if err != nil { | ||||
@@ -69,6 +71,7 @@ func GetInfo(ctx *context.APIContext) { | |||||
ctx.JSON(200, u.APIFormat()) | ctx.JSON(200, u.APIFormat()) | ||||
} | } | ||||
// GetAuthenticatedUser get curent user's information | |||||
func GetAuthenticatedUser(ctx *context.APIContext) { | func GetAuthenticatedUser(ctx *context.APIContext) { | ||||
ctx.JSON(200, ctx.User.APIFormat()) | ctx.JSON(200, ctx.User.APIFormat()) | ||||
} | } |
@@ -17,10 +17,11 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
COMMITS base.TplName = "repo/commits" | |||||
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) { | func RefCommits(ctx *context.Context) { | ||||
switch { | switch { | ||||
case len(ctx.Repo.TreePath) == 0: | case len(ctx.Repo.TreePath) == 0: | ||||
@@ -32,7 +33,7 @@ func RefCommits(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { | |||||
func renderIssueLinks(oldCommits *list.List, repoLink string) *list.List { | |||||
newCommits := list.New() | newCommits := list.New() | ||||
for e := oldCommits.Front(); e != nil; e = e.Next() { | for e := oldCommits.Front(); e != nil; e = e.Next() { | ||||
c := e.Value.(*git.Commit) | c := e.Value.(*git.Commit) | ||||
@@ -41,6 +42,7 @@ func RenderIssueLinks(oldCommits *list.List, repoLink string) *list.List { | |||||
return newCommits | return newCommits | ||||
} | } | ||||
// Commits render branch's commits | |||||
func Commits(ctx *context.Context) { | func Commits(ctx *context.Context) { | ||||
ctx.Data["PageIsCommits"] = true | ctx.Data["PageIsCommits"] = true | ||||
@@ -62,7 +64,7 @@ func Commits(ctx *context.Context) { | |||||
ctx.Handle(500, "CommitsByRange", err) | ctx.Handle(500, "CommitsByRange", err) | ||||
return | return | ||||
} | } | ||||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = models.ValidateCommitsWithEmails(commits) | commits = models.ValidateCommitsWithEmails(commits) | ||||
ctx.Data["Commits"] = commits | ctx.Data["Commits"] = commits | ||||
@@ -70,9 +72,10 @@ func Commits(ctx *context.Context) { | |||||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name | ctx.Data["Reponame"] = ctx.Repo.Repository.Name | ||||
ctx.Data["CommitCount"] = commitsCount | ctx.Data["CommitCount"] = commitsCount | ||||
ctx.Data["Branch"] = ctx.Repo.BranchName | ctx.Data["Branch"] = ctx.Repo.BranchName | ||||
ctx.HTML(200, COMMITS) | |||||
ctx.HTML(200, tplCommits) | |||||
} | } | ||||
// SearchCommits render commits filtered by keyword | |||||
func SearchCommits(ctx *context.Context) { | func SearchCommits(ctx *context.Context) { | ||||
ctx.Data["PageIsCommits"] = true | ctx.Data["PageIsCommits"] = true | ||||
@@ -87,7 +90,7 @@ func SearchCommits(ctx *context.Context) { | |||||
ctx.Handle(500, "SearchCommits", err) | ctx.Handle(500, "SearchCommits", err) | ||||
return | return | ||||
} | } | ||||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = models.ValidateCommitsWithEmails(commits) | commits = models.ValidateCommitsWithEmails(commits) | ||||
ctx.Data["Commits"] = commits | ctx.Data["Commits"] = commits | ||||
@@ -96,9 +99,10 @@ func SearchCommits(ctx *context.Context) { | |||||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name | ctx.Data["Reponame"] = ctx.Repo.Repository.Name | ||||
ctx.Data["CommitCount"] = commits.Len() | ctx.Data["CommitCount"] = commits.Len() | ||||
ctx.Data["Branch"] = ctx.Repo.BranchName | ctx.Data["Branch"] = ctx.Repo.BranchName | ||||
ctx.HTML(200, COMMITS) | |||||
ctx.HTML(200, tplCommits) | |||||
} | } | ||||
// FileHistory show a file's reversions | |||||
func FileHistory(ctx *context.Context) { | func FileHistory(ctx *context.Context) { | ||||
ctx.Data["IsRepoToolbarCommits"] = true | ctx.Data["IsRepoToolbarCommits"] = true | ||||
@@ -129,7 +133,7 @@ func FileHistory(ctx *context.Context) { | |||||
ctx.Handle(500, "CommitsByFileAndRange", err) | ctx.Handle(500, "CommitsByFileAndRange", err) | ||||
return | return | ||||
} | } | ||||
commits = RenderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = renderIssueLinks(commits, ctx.Repo.RepoLink) | |||||
commits = models.ValidateCommitsWithEmails(commits) | commits = models.ValidateCommitsWithEmails(commits) | ||||
ctx.Data["Commits"] = commits | ctx.Data["Commits"] = commits | ||||
@@ -138,9 +142,10 @@ func FileHistory(ctx *context.Context) { | |||||
ctx.Data["FileName"] = fileName | ctx.Data["FileName"] = fileName | ||||
ctx.Data["CommitCount"] = commitsCount | ctx.Data["CommitCount"] = commitsCount | ||||
ctx.Data["Branch"] = branchName | ctx.Data["Branch"] = branchName | ||||
ctx.HTML(200, COMMITS) | |||||
ctx.HTML(200, tplCommits) | |||||
} | } | ||||
// Diff show different from current commit to previous commit | |||||
func Diff(ctx *context.Context) { | func Diff(ctx *context.Context) { | ||||
ctx.Data["PageIsDiff"] = true | ctx.Data["PageIsDiff"] = true | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
@@ -194,9 +199,10 @@ func Diff(ctx *context.Context) { | |||||
ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", parents[0]) | ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", parents[0]) | ||||
} | } | ||||
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitID) | ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", commitID) | ||||
ctx.HTML(200, DIFF) | |||||
ctx.HTML(200, tplDiff) | |||||
} | } | ||||
// RawDiff dumps diff results of repository in given commit ID to io.Writer | |||||
func RawDiff(ctx *context.Context) { | func RawDiff(ctx *context.Context) { | ||||
if err := models.GetRawDiff( | if err := models.GetRawDiff( | ||||
models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), | models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), | ||||
@@ -209,6 +215,7 @@ func RawDiff(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// CompareDiff show different from one commit to another commit | |||||
func CompareDiff(ctx *context.Context) { | func CompareDiff(ctx *context.Context) { | ||||
ctx.Data["IsRepoToolbarCommits"] = true | ctx.Data["IsRepoToolbarCommits"] = true | ||||
ctx.Data["IsDiffCompare"] = true | ctx.Data["IsDiffCompare"] = true | ||||
@@ -253,5 +260,5 @@ func CompareDiff(ctx *context.Context) { | |||||
ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitID) | ctx.Data["SourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", afterCommitID) | ||||
ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitID) | ctx.Data["BeforeSourcePath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "src", beforeCommitID) | ||||
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitID) | ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(userName, repoName, "raw", afterCommitID) | ||||
ctx.HTML(200, DIFF) | |||||
ctx.HTML(200, tplDiff) | |||||
} | } |
@@ -14,6 +14,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
) | ) | ||||
// ServeData download file from io.Reader | |||||
func ServeData(ctx *context.Context, name string, reader io.Reader) error { | func ServeData(ctx *context.Context, name string, reader io.Reader) error { | ||||
buf := make([]byte, 1024) | buf := make([]byte, 1024) | ||||
n, _ := reader.Read(buf) | n, _ := reader.Read(buf) | ||||
@@ -34,6 +35,7 @@ func ServeData(ctx *context.Context, name string, reader io.Reader) error { | |||||
return err | return err | ||||
} | } | ||||
// ServeBlob download a git.Blob | |||||
func ServeBlob(ctx *context.Context, blob *git.Blob) error { | func ServeBlob(ctx *context.Context, blob *git.Blob) error { | ||||
dataRc, err := blob.Data() | dataRc, err := blob.Data() | ||||
if err != nil { | if err != nil { | ||||
@@ -43,6 +45,7 @@ func ServeBlob(ctx *context.Context, blob *git.Blob) error { | |||||
return ServeData(ctx, ctx.Repo.TreePath, dataRc) | return ServeData(ctx, ctx.Repo.TreePath, dataRc) | ||||
} | } | ||||
// SingleDownload download a file by repos path | |||||
func SingleDownload(ctx *context.Context) { | func SingleDownload(ctx *context.Context) { | ||||
blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreePath) | blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreePath) | ||||
if err != nil { | if err != nil { | ||||
@@ -22,10 +22,10 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
EDIT_FILE base.TplName = "repo/editor/edit" | |||||
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) { | func editFile(ctx *context.Context, isNewFile bool) { | ||||
@@ -98,13 +98,15 @@ func editFile(ctx *context.Context, isNewFile bool) { | |||||
ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | ||||
ctx.Data["EditorconfigURLPrefix"] = fmt.Sprintf("%s/api/v1/repos/%s/editorconfig/", setting.AppSubUrl, ctx.Repo.Repository.FullName()) | ctx.Data["EditorconfigURLPrefix"] = fmt.Sprintf("%s/api/v1/repos/%s/editorconfig/", setting.AppSubUrl, ctx.Repo.Repository.FullName()) | ||||
ctx.HTML(200, EDIT_FILE) | |||||
ctx.HTML(200, tplEditFile) | |||||
} | } | ||||
// EditFile render edit file page | |||||
func EditFile(ctx *context.Context) { | func EditFile(ctx *context.Context) { | ||||
editFile(ctx, false) | editFile(ctx, false) | ||||
} | } | ||||
// NewFile render create file page | |||||
func NewFile(ctx *context.Context) { | func NewFile(ctx *context.Context) { | ||||
editFile(ctx, true) | editFile(ctx, true) | ||||
} | } | ||||
@@ -146,20 +148,20 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, EDIT_FILE) | |||||
ctx.HTML(200, tplEditFile) | |||||
return | return | ||||
} | } | ||||
if len(form.TreePath) == 0 { | if len(form.TreePath) == 0 { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_cannot_be_empty"), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_cannot_be_empty"), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
if oldBranchName != branchName { | if oldBranchName != branchName { | ||||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | ||||
ctx.Data["Err_NewBranchName"] = true | ctx.Data["Err_NewBranchName"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -180,13 +182,13 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
if index != len(treeNames)-1 { | if index != len(treeNames)-1 { | ||||
if !entry.IsDir() { | if !entry.IsDir() { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
} else { | } else { | ||||
if entry.IsDir() { | if entry.IsDir() { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", part), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_a_directory", part), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -197,7 +199,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
if err != nil { | if err != nil { | ||||
if git.IsErrNotExist(err) { | if git.IsErrNotExist(err) { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_editing_no_longer_exists", oldTreePath), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_editing_no_longer_exists", oldTreePath), tplEditFile, &form) | |||||
} else { | } else { | ||||
ctx.Handle(500, "GetTreeEntryByPath", err) | ctx.Handle(500, "GetTreeEntryByPath", err) | ||||
} | } | ||||
@@ -212,7 +214,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
for _, file := range files { | for _, file := range files { | ||||
if file == form.TreePath { | if file == form.TreePath { | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+lastCommit+"..."+ctx.Repo.CommitID), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_changed_while_editing", ctx.Repo.RepoLink+"/compare/"+lastCommit+"..."+ctx.Repo.CommitID), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -230,7 +232,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
} | } | ||||
if entry != nil { | if entry != nil { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.file_already_exists", form.TreePath), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -260,21 +262,24 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo | |||||
IsNewFile: isNewFile, | IsNewFile: isNewFile, | ||||
}); err != nil { | }); err != nil { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_update_file", form.TreePath, err), EDIT_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.fail_to_update_file", form.TreePath, err), tplEditFile, &form) | |||||
return | return | ||||
} | } | ||||
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + strings.NewReplacer("%", "%25", "#", "%23", " ", "%20", "?", "%3F").Replace(form.TreePath)) | ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + strings.NewReplacer("%", "%25", "#", "%23", " ", "%20", "?", "%3F").Replace(form.TreePath)) | ||||
} | } | ||||
// EditFilePost response for editing file | |||||
func EditFilePost(ctx *context.Context, form auth.EditRepoFileForm) { | func EditFilePost(ctx *context.Context, form auth.EditRepoFileForm) { | ||||
editFilePost(ctx, form, false) | editFilePost(ctx, form, false) | ||||
} | } | ||||
// NewFilePost response for creating file | |||||
func NewFilePost(ctx *context.Context, form auth.EditRepoFileForm) { | func NewFilePost(ctx *context.Context, form auth.EditRepoFileForm) { | ||||
editFilePost(ctx, form, true) | editFilePost(ctx, form, true) | ||||
} | } | ||||
// DiffPreviewPost render preview diff page | |||||
func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { | func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { | ||||
treePath := ctx.Repo.TreePath | treePath := ctx.Repo.TreePath | ||||
@@ -299,9 +304,10 @@ func DiffPreviewPost(ctx *context.Context, form auth.EditPreviewDiffForm) { | |||||
} | } | ||||
ctx.Data["File"] = diff.Files[0] | ctx.Data["File"] = diff.Files[0] | ||||
ctx.HTML(200, EDIT_DIFF_PREVIEW) | |||||
ctx.HTML(200, tplEditDiffPreview) | |||||
} | } | ||||
// DeleteFile render delete file page | |||||
func DeleteFile(ctx *context.Context) { | func DeleteFile(ctx *context.Context) { | ||||
ctx.Data["PageIsDelete"] = true | ctx.Data["PageIsDelete"] = true | ||||
ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName | ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName | ||||
@@ -310,9 +316,10 @@ func DeleteFile(ctx *context.Context) { | |||||
ctx.Data["commit_message"] = "" | ctx.Data["commit_message"] = "" | ||||
ctx.Data["commit_choice"] = "direct" | ctx.Data["commit_choice"] = "direct" | ||||
ctx.Data["new_branch_name"] = "" | ctx.Data["new_branch_name"] = "" | ||||
ctx.HTML(200, DELETE_FILE) | |||||
ctx.HTML(200, tplDeleteFile) | |||||
} | } | ||||
// DeleteFilePost response for deleting file | |||||
func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { | func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { | ||||
ctx.Data["PageIsDelete"] = true | ctx.Data["PageIsDelete"] = true | ||||
ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName | ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName | ||||
@@ -330,14 +337,14 @@ func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { | |||||
ctx.Data["new_branch_name"] = branchName | ctx.Data["new_branch_name"] = branchName | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, DELETE_FILE) | |||||
ctx.HTML(200, tplDeleteFile) | |||||
return | return | ||||
} | } | ||||
if oldBranchName != branchName { | if oldBranchName != branchName { | ||||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | ||||
ctx.Data["Err_NewBranchName"] = true | ctx.Data["Err_NewBranchName"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), DELETE_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplDeleteFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -374,6 +381,7 @@ func renderUploadSettings(ctx *context.Context) { | |||||
ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles | ctx.Data["UploadMaxFiles"] = setting.Repository.Upload.MaxFiles | ||||
} | } | ||||
// UploadFile render upload file page | |||||
func UploadFile(ctx *context.Context) { | func UploadFile(ctx *context.Context) { | ||||
ctx.Data["PageIsUpload"] = true | ctx.Data["PageIsUpload"] = true | ||||
renderUploadSettings(ctx) | renderUploadSettings(ctx) | ||||
@@ -391,9 +399,10 @@ func UploadFile(ctx *context.Context) { | |||||
ctx.Data["commit_choice"] = "direct" | ctx.Data["commit_choice"] = "direct" | ||||
ctx.Data["new_branch_name"] = "" | ctx.Data["new_branch_name"] = "" | ||||
ctx.HTML(200, UPLOAD_FILE) | |||||
ctx.HTML(200, tplUploadFile) | |||||
} | } | ||||
// UploadFilePost response for uploading file | |||||
func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | ||||
ctx.Data["PageIsUpload"] = true | ctx.Data["PageIsUpload"] = true | ||||
renderUploadSettings(ctx) | renderUploadSettings(ctx) | ||||
@@ -422,14 +431,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||||
ctx.Data["new_branch_name"] = branchName | ctx.Data["new_branch_name"] = branchName | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, UPLOAD_FILE) | |||||
ctx.HTML(200, tplUploadFile) | |||||
return | return | ||||
} | } | ||||
if oldBranchName != branchName { | if oldBranchName != branchName { | ||||
if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { | ||||
ctx.Data["Err_NewBranchName"] = true | ctx.Data["Err_NewBranchName"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), UPLOAD_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.branch_already_exists", branchName), tplUploadFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -451,7 +460,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||||
// User can only upload files to a directory. | // User can only upload files to a directory. | ||||
if !entry.IsDir() { | if !entry.IsDir() { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), UPLOAD_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplUploadFile, &form) | |||||
return | return | ||||
} | } | ||||
} | } | ||||
@@ -475,13 +484,14 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { | |||||
Files: form.Files, | Files: form.Files, | ||||
}); err != nil { | }); err != nil { | ||||
ctx.Data["Err_TreePath"] = true | ctx.Data["Err_TreePath"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.editor.unable_to_upload_files", form.TreePath, err), UPLOAD_FILE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.editor.unable_to_upload_files", form.TreePath, err), tplUploadFile, &form) | |||||
return | return | ||||
} | } | ||||
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath) | ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath) | ||||
} | } | ||||
// UploadFileToServer upload file to server file dir not git | |||||
func UploadFileToServer(ctx *context.Context) { | func UploadFileToServer(ctx *context.Context) { | ||||
file, header, err := ctx.Req.FormFile("file") | file, header, err := ctx.Req.FormFile("file") | ||||
if err != nil { | if err != nil { | ||||
@@ -525,6 +535,7 @@ func UploadFileToServer(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// RemoveUploadFileFromServer remove file from server file dir | |||||
func RemoveUploadFileFromServer(ctx *context.Context, form auth.RemoveUploadFileForm) { | func RemoveUploadFileFromServer(ctx *context.Context, form auth.RemoveUploadFileForm) { | ||||
if len(form.File) == 0 { | if len(form.File) == 0 { | ||||
ctx.Status(204) | ctx.Status(204) | ||||
@@ -29,6 +29,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
) | ) | ||||
// HTTP implmentation git smart HTTP protocol | |||||
func HTTP(ctx *context.Context) { | func HTTP(ctx *context.Context) { | ||||
username := ctx.Params(":username") | username := ctx.Params(":username") | ||||
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") | reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") | ||||
@@ -170,7 +171,7 @@ func HTTP(ctx *context.Context) { | |||||
return | return | ||||
} | } | ||||
var lastLine int64 = 0 | |||||
var lastLine int64 | |||||
for { | for { | ||||
head := input[lastLine : lastLine+2] | head := input[lastLine : lastLine+2] | ||||
if head[0] == '0' && head[1] == '0' { | if head[0] == '0' && head[1] == '0' { | ||||
@@ -193,15 +194,15 @@ func HTTP(ctx *context.Context) { | |||||
fields := strings.Fields(string(line)) | fields := strings.Fields(string(line)) | ||||
if len(fields) >= 3 { | if len(fields) >= 3 { | ||||
oldCommitId := fields[0][4:] | |||||
newCommitId := fields[1] | |||||
oldCommitID := fields[0][4:] | |||||
newCommitID := fields[1] | |||||
refFullName := fields[2] | refFullName := fields[2] | ||||
// FIXME: handle error. | // FIXME: handle error. | ||||
if err = models.PushUpdate(models.PushUpdateOptions{ | if err = models.PushUpdate(models.PushUpdateOptions{ | ||||
RefFullName: refFullName, | RefFullName: refFullName, | ||||
OldCommitID: oldCommitId, | |||||
NewCommitID: newCommitId, | |||||
OldCommitID: oldCommitID, | |||||
NewCommitID: newCommitID, | |||||
PusherID: authUser.ID, | PusherID: authUser.ID, | ||||
PusherName: authUser.Name, | PusherName: authUser.Name, | ||||
RepoUserName: username, | RepoUserName: username, | ||||
@@ -474,6 +475,7 @@ func getGitRepoPath(subdir string) (string, error) { | |||||
return fpath, nil | return fpath, nil | ||||
} | } | ||||
// HTTPBackend middleware for git smart HTTP protocol | |||||
func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc { | func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc { | ||||
return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
for _, route := range routes { | for _, route := range routes { | ||||
@@ -27,23 +27,25 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
ISSUES base.TplName = "repo/issue/list" | |||||
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 ( | var ( | ||||
// ErrFileTypeForbidden not allowed file type error | |||||
ErrFileTypeForbidden = errors.New("File type is not allowed") | 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{ | IssueTemplateCandidates = []string{ | ||||
"ISSUE_TEMPLATE.md", | "ISSUE_TEMPLATE.md", | ||||
".gogs/ISSUE_TEMPLATE.md", | ".gogs/ISSUE_TEMPLATE.md", | ||||
@@ -51,6 +53,7 @@ var ( | |||||
} | } | ||||
) | ) | ||||
// MustEnableIssues check if repository enable internal issues | |||||
func MustEnableIssues(ctx *context.Context) { | func MustEnableIssues(ctx *context.Context) { | ||||
if !ctx.Repo.Repository.EnableIssues { | if !ctx.Repo.Repository.EnableIssues { | ||||
ctx.Handle(404, "MustEnableIssues", nil) | ctx.Handle(404, "MustEnableIssues", nil) | ||||
@@ -63,6 +66,7 @@ func MustEnableIssues(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// MustAllowPulls check if repository enable pull requests | |||||
func MustAllowPulls(ctx *context.Context) { | func MustAllowPulls(ctx *context.Context) { | ||||
if !ctx.Repo.Repository.AllowsPulls() { | if !ctx.Repo.Repository.AllowsPulls() { | ||||
ctx.Handle(404, "MustAllowPulls", nil) | ctx.Handle(404, "MustAllowPulls", nil) | ||||
@@ -76,6 +80,7 @@ func MustAllowPulls(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// RetrieveLabels find all the labels of a repository | |||||
func RetrieveLabels(ctx *context.Context) { | func RetrieveLabels(ctx *context.Context) { | ||||
labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -89,6 +94,7 @@ func RetrieveLabels(ctx *context.Context) { | |||||
ctx.Data["NumLabels"] = len(labels) | ctx.Data["NumLabels"] = len(labels) | ||||
} | } | ||||
// Issues render issues page | |||||
func Issues(ctx *context.Context) { | func Issues(ctx *context.Context) { | ||||
isPullList := ctx.Params(":type") == "pulls" | isPullList := ctx.Params(":type") == "pulls" | ||||
if isPullList { | if isPullList { | ||||
@@ -244,7 +250,7 @@ func Issues(ctx *context.Context) { | |||||
ctx.Data["State"] = "open" | ctx.Data["State"] = "open" | ||||
} | } | ||||
ctx.HTML(200, ISSUES) | |||||
ctx.HTML(200, tplIssues) | |||||
} | } | ||||
func renderAttachmentSettings(ctx *context.Context) { | func renderAttachmentSettings(ctx *context.Context) { | ||||
@@ -255,6 +261,7 @@ func renderAttachmentSettings(ctx *context.Context) { | |||||
ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles | ctx.Data["AttachmentMaxFiles"] = setting.AttachmentMaxFiles | ||||
} | } | ||||
// RetrieveRepoMilestonesAndAssignees find all the milestones and assignees of a repository | |||||
func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) { | func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repository) { | ||||
var err error | var err error | ||||
ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false) | ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false) | ||||
@@ -275,6 +282,7 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *models.Repos | |||||
} | } | ||||
} | } | ||||
// RetrieveRepoMetas find all the meta information of a repository | |||||
func RetrieveRepoMetas(ctx *context.Context, repo *models.Repository) []*models.Label { | func RetrieveRepoMetas(ctx *context.Context, repo *models.Repository) []*models.Label { | ||||
if !ctx.Repo.IsWriter() { | if !ctx.Repo.IsWriter() { | ||||
return nil | return nil | ||||
@@ -332,12 +340,13 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles | |||||
} | } | ||||
} | } | ||||
// NewIssue render createing issue page | |||||
func NewIssue(ctx *context.Context) { | func NewIssue(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.issues.new") | ctx.Data["Title"] = ctx.Tr("repo.issues.new") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
ctx.Data["RequireSimpleMDE"] = true | ctx.Data["RequireSimpleMDE"] = true | ||||
setTemplateIfExists(ctx, ISSUE_TEMPLATE_KEY, IssueTemplateCandidates) | |||||
setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates) | |||||
renderAttachmentSettings(ctx) | renderAttachmentSettings(ctx) | ||||
RetrieveRepoMetas(ctx, ctx.Repo.Repository) | RetrieveRepoMetas(ctx, ctx.Repo.Repository) | ||||
@@ -345,9 +354,10 @@ func NewIssue(ctx *context.Context) { | |||||
return | return | ||||
} | } | ||||
ctx.HTML(200, ISSUE_NEW) | |||||
ctx.HTML(200, tplIssueNew) | |||||
} | } | ||||
// ValidateRepoMetas check and returns repository's meta informations | |||||
func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64, int64, int64) { | func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64, int64, int64) { | ||||
var ( | var ( | ||||
repo = ctx.Repo.Repository | repo = ctx.Repo.Repository | ||||
@@ -402,6 +412,7 @@ func ValidateRepoMetas(ctx *context.Context, form auth.CreateIssueForm) ([]int64 | |||||
return labelIDs, milestoneID, assigneeID | return labelIDs, milestoneID, assigneeID | ||||
} | } | ||||
// NewIssuePost response for creating new issue | |||||
func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.issues.new") | ctx.Data["Title"] = ctx.Tr("repo.issues.new") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
@@ -424,7 +435,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | |||||
} | } | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, ISSUE_NEW) | |||||
ctx.HTML(200, tplIssueNew) | |||||
return | return | ||||
} | } | ||||
@@ -446,6 +457,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) | ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) | ||||
} | } | ||||
// UploadIssueAttachment response for uploading issue's attachment | |||||
func UploadIssueAttachment(ctx *context.Context) { | func UploadIssueAttachment(ctx *context.Context) { | ||||
if !setting.AttachmentEnabled { | if !setting.AttachmentEnabled { | ||||
ctx.Error(404, "attachment is not enabled") | ctx.Error(404, "attachment is not enabled") | ||||
@@ -493,6 +505,7 @@ func UploadIssueAttachment(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// ViewIssue render issue view page | |||||
func ViewIssue(ctx *context.Context) { | func ViewIssue(ctx *context.Context) { | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
ctx.Data["RequireDropzone"] = true | ctx.Data["RequireDropzone"] = true | ||||
@@ -639,7 +652,7 @@ func ViewIssue(ctx *context.Context) { | |||||
ctx.Data["Issue"] = issue | ctx.Data["Issue"] = issue | ||||
ctx.Data["IsIssueOwner"] = ctx.Repo.IsWriter() || (ctx.IsSigned && issue.IsPoster(ctx.User.ID)) | ctx.Data["IsIssueOwner"] = ctx.Repo.IsWriter() || (ctx.IsSigned && issue.IsPoster(ctx.User.ID)) | ||||
ctx.Data["SignInLink"] = setting.AppSubUrl + "/user/login?redirect_to=" + ctx.Data["Link"].(string) | ctx.Data["SignInLink"] = setting.AppSubUrl + "/user/login?redirect_to=" + ctx.Data["Link"].(string) | ||||
ctx.HTML(200, ISSUE_VIEW) | |||||
ctx.HTML(200, tplIssueView) | |||||
} | } | ||||
func getActionIssue(ctx *context.Context) *models.Issue { | func getActionIssue(ctx *context.Context) *models.Issue { | ||||
@@ -655,6 +668,7 @@ func getActionIssue(ctx *context.Context) *models.Issue { | |||||
return issue | return issue | ||||
} | } | ||||
// UpdateIssueTitle change issue's title | |||||
func UpdateIssueTitle(ctx *context.Context) { | func UpdateIssueTitle(ctx *context.Context) { | ||||
issue := getActionIssue(ctx) | issue := getActionIssue(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -682,6 +696,7 @@ func UpdateIssueTitle(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// UpdateIssueContent change issue's content | |||||
func UpdateIssueContent(ctx *context.Context) { | func UpdateIssueContent(ctx *context.Context) { | ||||
issue := getActionIssue(ctx) | issue := getActionIssue(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -704,6 +719,7 @@ func UpdateIssueContent(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// UpdateIssueLabel change issue's labels | |||||
func UpdateIssueLabel(ctx *context.Context) { | func UpdateIssueLabel(ctx *context.Context) { | ||||
issue := getActionIssue(ctx) | issue := getActionIssue(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -745,6 +761,7 @@ func UpdateIssueLabel(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// UpdateIssueMilestone change issue's milestone | |||||
func UpdateIssueMilestone(ctx *context.Context) { | func UpdateIssueMilestone(ctx *context.Context) { | ||||
issue := getActionIssue(ctx) | issue := getActionIssue(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -772,6 +789,7 @@ func UpdateIssueMilestone(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// UpdateIssueAssignee change issue's assignee | |||||
func UpdateIssueAssignee(ctx *context.Context) { | func UpdateIssueAssignee(ctx *context.Context) { | ||||
issue := getActionIssue(ctx) | issue := getActionIssue(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -796,6 +814,7 @@ func UpdateIssueAssignee(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// NewComment create a comment for issue | |||||
func NewComment(ctx *context.Context, form auth.CreateCommentForm) { | func NewComment(ctx *context.Context, form auth.CreateCommentForm) { | ||||
issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||
if err != nil { | if err != nil { | ||||
@@ -882,6 +901,7 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) { | |||||
log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID) | log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID) | ||||
} | } | ||||
// UpdateCommentContent change comment of issue's content | |||||
func UpdateCommentContent(ctx *context.Context) { | func UpdateCommentContent(ctx *context.Context) { | ||||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -914,6 +934,7 @@ func UpdateCommentContent(ctx *context.Context) { | |||||
}) | }) | ||||
} | } | ||||
// DeleteComment delete comment of issue | |||||
func DeleteComment(ctx *context.Context) { | func DeleteComment(ctx *context.Context) { | ||||
comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | comment, err := models.GetCommentByID(ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -937,15 +958,17 @@ func DeleteComment(ctx *context.Context) { | |||||
ctx.Status(200) | ctx.Status(200) | ||||
} | } | ||||
// Labels render issue's labels page | |||||
func Labels(ctx *context.Context) { | func Labels(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.labels") | ctx.Data["Title"] = ctx.Tr("repo.labels") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
ctx.Data["PageIsLabels"] = true | ctx.Data["PageIsLabels"] = true | ||||
ctx.Data["RequireMinicolors"] = true | ctx.Data["RequireMinicolors"] = true | ||||
ctx.Data["LabelTemplates"] = models.LabelTemplates | ctx.Data["LabelTemplates"] = models.LabelTemplates | ||||
ctx.HTML(200, LABELS) | |||||
ctx.HTML(200, tplLabels) | |||||
} | } | ||||
// InitializeLabels init labels for a repository | |||||
func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { | func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||
@@ -973,6 +996,7 @@ func InitializeLabels(ctx *context.Context, form auth.InitializeLabelsForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||
} | } | ||||
// NewLabel create new label for repository | |||||
func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.labels") | ctx.Data["Title"] = ctx.Tr("repo.labels") | ||||
ctx.Data["PageIsLabels"] = true | ctx.Data["PageIsLabels"] = true | ||||
@@ -995,6 +1019,7 @@ func NewLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||
} | } | ||||
// UpdateLabel update a label's name and color | |||||
func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { | func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { | ||||
l, err := models.GetLabelByID(form.ID) | l, err := models.GetLabelByID(form.ID) | ||||
if err != nil { | if err != nil { | ||||
@@ -1016,6 +1041,7 @@ func UpdateLabel(ctx *context.Context, form auth.CreateLabelForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ctx.Redirect(ctx.Repo.RepoLink + "/labels") | ||||
} | } | ||||
// DeleteLabel delete a label | |||||
func DeleteLabel(ctx *context.Context) { | func DeleteLabel(ctx *context.Context) { | ||||
if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteLabel: " + err.Error()) | ctx.Flash.Error("DeleteLabel: " + err.Error()) | ||||
@@ -1029,6 +1055,7 @@ func DeleteLabel(ctx *context.Context) { | |||||
return | return | ||||
} | } | ||||
// Milestones render milestones page | |||||
func Milestones(ctx *context.Context) { | func Milestones(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.milestones") | ctx.Data["Title"] = ctx.Tr("repo.milestones") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
@@ -1069,18 +1096,20 @@ func Milestones(ctx *context.Context) { | |||||
} | } | ||||
ctx.Data["IsShowClosed"] = isShowClosed | ctx.Data["IsShowClosed"] = isShowClosed | ||||
ctx.HTML(200, MILESTONE) | |||||
ctx.HTML(200, tplMilestone) | |||||
} | } | ||||
// NewMilestone render creating milestone page | |||||
func NewMilestone(ctx *context.Context) { | func NewMilestone(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
ctx.Data["PageIsMilestones"] = true | ctx.Data["PageIsMilestones"] = true | ||||
ctx.Data["RequireDatetimepicker"] = true | ctx.Data["RequireDatetimepicker"] = true | ||||
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ||||
ctx.HTML(200, MILESTONE_NEW) | |||||
ctx.HTML(200, tplMilestoneNew) | |||||
} | } | ||||
// NewMilestonePost response for creating milestone | |||||
func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | ctx.Data["Title"] = ctx.Tr("repo.milestones.new") | ||||
ctx.Data["PageIsIssueList"] = true | ctx.Data["PageIsIssueList"] = true | ||||
@@ -1089,7 +1118,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, MILESTONE_NEW) | |||||
ctx.HTML(200, tplMilestoneNew) | |||||
return | return | ||||
} | } | ||||
@@ -1099,7 +1128,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | ||||
if err != nil { | if err != nil { | ||||
ctx.Data["Err_Deadline"] = true | ctx.Data["Err_Deadline"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), tplMilestoneNew, &form) | |||||
return | return | ||||
} | } | ||||
@@ -1117,6 +1146,7 @@ func NewMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | ||||
} | } | ||||
// EditMilestone render edting milestone page | |||||
func EditMilestone(ctx *context.Context) { | func EditMilestone(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | ||||
ctx.Data["PageIsMilestones"] = true | ctx.Data["PageIsMilestones"] = true | ||||
@@ -1138,9 +1168,10 @@ func EditMilestone(ctx *context.Context) { | |||||
if len(m.DeadlineString) > 0 { | if len(m.DeadlineString) > 0 { | ||||
ctx.Data["deadline"] = m.DeadlineString | ctx.Data["deadline"] = m.DeadlineString | ||||
} | } | ||||
ctx.HTML(200, MILESTONE_NEW) | |||||
ctx.HTML(200, tplMilestoneNew) | |||||
} | } | ||||
// EditMilestonePost response for edting milestone | |||||
func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | ctx.Data["Title"] = ctx.Tr("repo.milestones.edit") | ||||
ctx.Data["PageIsMilestones"] = true | ctx.Data["PageIsMilestones"] = true | ||||
@@ -1149,7 +1180,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language()) | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, MILESTONE_NEW) | |||||
ctx.HTML(200, tplMilestoneNew) | |||||
return | return | ||||
} | } | ||||
@@ -1159,7 +1190,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | deadline, err := time.ParseInLocation("2006-01-02", form.Deadline, time.Local) | ||||
if err != nil { | if err != nil { | ||||
ctx.Data["Err_Deadline"] = true | ctx.Data["Err_Deadline"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), MILESTONE_NEW, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.milestones.invalid_due_date_format"), tplMilestoneNew, &form) | |||||
return | return | ||||
} | } | ||||
@@ -1184,6 +1215,7 @@ func EditMilestonePost(ctx *context.Context, form auth.CreateMilestoneForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | ctx.Redirect(ctx.Repo.RepoLink + "/milestones") | ||||
} | } | ||||
// ChangeMilestonStatus response for change a milestone's status | |||||
func ChangeMilestonStatus(ctx *context.Context) { | func ChangeMilestonStatus(ctx *context.Context) { | ||||
m, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | m, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")) | ||||
if err != nil { | if err != nil { | ||||
@@ -1218,6 +1250,7 @@ func ChangeMilestonStatus(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// DeleteMilestone delete a milestone | |||||
func DeleteMilestone(ctx *context.Context) { | func DeleteMilestone(ctx *context.Context) { | ||||
if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | if err := models.DeleteMilestoneByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteMilestoneByRepoID: " + err.Error()) | ctx.Flash.Error("DeleteMilestoneByRepoID: " + err.Error()) | ||||
@@ -21,16 +21,16 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
FORK base.TplName = "repo/pulls/fork" | |||||
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 ( | var ( | ||||
PullRequestTemplateCandidates = []string{ | |||||
pullRequestTemplateCandidates = []string{ | |||||
"PULL_REQUEST.md", | "PULL_REQUEST.md", | ||||
".gogs/PULL_REQUEST.md", | ".gogs/PULL_REQUEST.md", | ||||
".github/PULL_REQUEST.md", | ".github/PULL_REQUEST.md", | ||||
@@ -72,6 +72,7 @@ func getForkRepository(ctx *context.Context) *models.Repository { | |||||
return forkRepo | return forkRepo | ||||
} | } | ||||
// Fork render repository fork page | |||||
func Fork(ctx *context.Context) { | func Fork(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("new_fork") | ctx.Data["Title"] = ctx.Tr("new_fork") | ||||
@@ -81,9 +82,10 @@ func Fork(ctx *context.Context) { | |||||
} | } | ||||
ctx.Data["ContextUser"] = ctx.User | ctx.Data["ContextUser"] = ctx.User | ||||
ctx.HTML(200, FORK) | |||||
ctx.HTML(200, tplFork) | |||||
} | } | ||||
// ForkPost response for forking a repository | |||||
func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | ||||
ctx.Data["Title"] = ctx.Tr("new_fork") | ctx.Data["Title"] = ctx.Tr("new_fork") | ||||
@@ -99,7 +101,7 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
ctx.Data["ContextUser"] = ctxUser | ctx.Data["ContextUser"] = ctxUser | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, FORK) | |||||
ctx.HTML(200, tplFork) | |||||
return | return | ||||
} | } | ||||
@@ -122,11 +124,11 @@ func ForkPost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
ctx.Data["Err_RepoName"] = true | ctx.Data["Err_RepoName"] = true | ||||
switch { | switch { | ||||
case models.IsErrRepoAlreadyExist(err): | case models.IsErrRepoAlreadyExist(err): | ||||
ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), FORK, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), tplFork, &form) | |||||
case models.IsErrNameReserved(err): | case models.IsErrNameReserved(err): | ||||
ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), FORK, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplFork, &form) | |||||
case models.IsErrNamePatternNotAllowed(err): | case models.IsErrNamePatternNotAllowed(err): | ||||
ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), FORK, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplFork, &form) | |||||
default: | default: | ||||
ctx.Handle(500, "ForkPost", err) | ctx.Handle(500, "ForkPost", err) | ||||
} | } | ||||
@@ -171,6 +173,7 @@ func checkPullInfo(ctx *context.Context) *models.Issue { | |||||
return issue | return issue | ||||
} | } | ||||
// PrepareMergedViewPullInfo show meta information for a merged pull request view page | |||||
func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) { | func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) { | ||||
pull := issue.PullRequest | pull := issue.PullRequest | ||||
ctx.Data["HasMerged"] = true | ctx.Data["HasMerged"] = true | ||||
@@ -190,6 +193,7 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) { | |||||
} | } | ||||
} | } | ||||
// PrepareViewPullInfo show meta information for a pull request preview page | |||||
func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo { | func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullRequestInfo { | ||||
repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
pull := issue.PullRequest | pull := issue.PullRequest | ||||
@@ -242,6 +246,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.PullReq | |||||
return prInfo | return prInfo | ||||
} | } | ||||
// ViewPullCommits show commits for a pull request | |||||
func ViewPullCommits(ctx *context.Context) { | func ViewPullCommits(ctx *context.Context) { | ||||
ctx.Data["PageIsPullList"] = true | ctx.Data["PageIsPullList"] = true | ||||
ctx.Data["PageIsPullCommits"] = true | ctx.Data["PageIsPullCommits"] = true | ||||
@@ -291,9 +296,10 @@ func ViewPullCommits(ctx *context.Context) { | |||||
ctx.Data["Commits"] = commits | ctx.Data["Commits"] = commits | ||||
ctx.Data["CommitCount"] = commits.Len() | ctx.Data["CommitCount"] = commits.Len() | ||||
ctx.HTML(200, PULL_COMMITS) | |||||
ctx.HTML(200, tplPullCommits) | |||||
} | } | ||||
// ViewPullFiles render pull request changed files list page | |||||
func ViewPullFiles(ctx *context.Context) { | func ViewPullFiles(ctx *context.Context) { | ||||
ctx.Data["PageIsPullList"] = true | ctx.Data["PageIsPullList"] = true | ||||
ctx.Data["PageIsPullFiles"] = true | ctx.Data["PageIsPullFiles"] = true | ||||
@@ -375,9 +381,10 @@ func ViewPullFiles(ctx *context.Context) { | |||||
ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(headTarget, "raw", endCommitID) | ctx.Data["RawPath"] = setting.AppSubUrl + "/" + path.Join(headTarget, "raw", endCommitID) | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
ctx.HTML(200, PULL_FILES) | |||||
ctx.HTML(200, tplPullFiles) | |||||
} | } | ||||
// MergePullRequest response for merging pull request | |||||
func MergePullRequest(ctx *context.Context) { | func MergePullRequest(ctx *context.Context) { | ||||
issue := checkPullInfo(ctx) | issue := checkPullInfo(ctx) | ||||
if ctx.Written() { | if ctx.Written() { | ||||
@@ -414,6 +421,7 @@ func MergePullRequest(ctx *context.Context) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) | ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) | ||||
} | } | ||||
// ParseCompareInfo parse compare info between two commit for preparing pull request | |||||
func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.PullRequestInfo, string, string) { | func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *git.Repository, *git.PullRequestInfo, string, string) { | ||||
baseRepo := ctx.Repo.Repository | baseRepo := ctx.Repo.Repository | ||||
@@ -520,6 +528,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, * | |||||
return headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch | return headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch | ||||
} | } | ||||
// PrepareCompareDiff render pull request preview diff page | |||||
func PrepareCompareDiff( | func PrepareCompareDiff( | ||||
ctx *context.Context, | ctx *context.Context, | ||||
headUser *models.User, | headUser *models.User, | ||||
@@ -578,12 +587,13 @@ func PrepareCompareDiff( | |||||
return false | return false | ||||
} | } | ||||
// CompareAndPullRequest render pull request preview page | |||||
func CompareAndPullRequest(ctx *context.Context) { | func CompareAndPullRequest(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | ||||
ctx.Data["PageIsComparePull"] = true | ctx.Data["PageIsComparePull"] = true | ||||
ctx.Data["IsDiffCompare"] = true | ctx.Data["IsDiffCompare"] = true | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
setTemplateIfExists(ctx, PULL_REQUEST_TEMPLATE_KEY, PullRequestTemplateCandidates) | |||||
setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates) | |||||
renderAttachmentSettings(ctx) | renderAttachmentSettings(ctx) | ||||
headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx) | headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch := ParseCompareInfo(ctx) | ||||
@@ -600,7 +610,7 @@ func CompareAndPullRequest(ctx *context.Context) { | |||||
} else { | } else { | ||||
ctx.Data["HasPullRequest"] = true | ctx.Data["HasPullRequest"] = true | ||||
ctx.Data["PullRequest"] = pr | ctx.Data["PullRequest"] = pr | ||||
ctx.HTML(200, COMPARE_PULL) | |||||
ctx.HTML(200, tplComparePull) | |||||
return | return | ||||
} | } | ||||
@@ -617,9 +627,10 @@ func CompareAndPullRequest(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
ctx.HTML(200, COMPARE_PULL) | |||||
ctx.HTML(200, tplComparePull) | |||||
} | } | ||||
// CompareAndPullRequestPost response for creating pull request | |||||
func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) { | func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | ctx.Data["Title"] = ctx.Tr("repo.pulls.compare_changes") | ||||
ctx.Data["PageIsComparePull"] = true | ctx.Data["PageIsComparePull"] = true | ||||
@@ -656,7 +667,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) | |||||
return | return | ||||
} | } | ||||
ctx.HTML(200, COMPARE_PULL) | |||||
ctx.HTML(200, tplComparePull) | |||||
return | return | ||||
} | } | ||||
@@ -702,6 +713,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) | ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) | ||||
} | } | ||||
// TriggerTask response for a trigger task request | |||||
func TriggerTask(ctx *context.Context) { | func TriggerTask(ctx *context.Context) { | ||||
pusherID := ctx.QueryInt64("pusher") | pusherID := ctx.QueryInt64("pusher") | ||||
branch := ctx.Query("branch") | branch := ctx.Query("branch") | ||||
@@ -17,8 +17,8 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
RELEASES base.TplName = "repo/release/list" | |||||
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. | // calReleaseNumCommitsBehind calculates given release has how many commits behind release target. | ||||
@@ -49,6 +49,7 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel | |||||
return nil | return nil | ||||
} | } | ||||
// Releases render releases list page | |||||
func Releases(ctx *context.Context) { | func Releases(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.release.releases") | ctx.Data["Title"] = ctx.Tr("repo.release.releases") | ||||
ctx.Data["PageIsReleaseList"] = true | ctx.Data["PageIsReleaseList"] = true | ||||
@@ -150,27 +151,29 @@ func Releases(ctx *context.Context) { | |||||
ctx.Data["Page"] = pager | ctx.Data["Page"] = pager | ||||
models.SortReleases(tags) | models.SortReleases(tags) | ||||
ctx.Data["Releases"] = tags | ctx.Data["Releases"] = tags | ||||
ctx.HTML(200, RELEASES) | |||||
ctx.HTML(200, tplReleases) | |||||
} | } | ||||
// NewRelease render creating release page | |||||
func NewRelease(ctx *context.Context) { | func NewRelease(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | ||||
ctx.Data["PageIsReleaseList"] = true | ctx.Data["PageIsReleaseList"] = true | ||||
ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch | ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch | ||||
ctx.HTML(200, RELEASE_NEW) | |||||
ctx.HTML(200, tplReleaseNew) | |||||
} | } | ||||
// NewReleasePost response for creating a release | |||||
func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | ctx.Data["Title"] = ctx.Tr("repo.release.new_release") | ||||
ctx.Data["PageIsReleaseList"] = true | ctx.Data["PageIsReleaseList"] = true | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, RELEASE_NEW) | |||||
ctx.HTML(200, tplReleaseNew) | |||||
return | return | ||||
} | } | ||||
if !ctx.Repo.GitRepo.IsBranchExist(form.Target) { | if !ctx.Repo.GitRepo.IsBranchExist(form.Target) { | ||||
ctx.RenderWithErr(ctx.Tr("form.target_branch_not_exist"), RELEASE_NEW, &form) | |||||
ctx.RenderWithErr(ctx.Tr("form.target_branch_not_exist"), tplReleaseNew, &form) | |||||
return | return | ||||
} | } | ||||
@@ -213,9 +216,9 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | |||||
ctx.Data["Err_TagName"] = true | ctx.Data["Err_TagName"] = true | ||||
switch { | switch { | ||||
case models.IsErrReleaseAlreadyExist(err): | case models.IsErrReleaseAlreadyExist(err): | ||||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), RELEASE_NEW, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form) | |||||
case models.IsErrInvalidTagName(err): | case models.IsErrInvalidTagName(err): | ||||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), RELEASE_NEW, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), tplReleaseNew, &form) | |||||
default: | default: | ||||
ctx.Handle(500, "CreateRelease", err) | ctx.Handle(500, "CreateRelease", err) | ||||
} | } | ||||
@@ -226,6 +229,7 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/releases") | ctx.Redirect(ctx.Repo.RepoLink + "/releases") | ||||
} | } | ||||
// EditRelease render release edit page | |||||
func EditRelease(ctx *context.Context) { | func EditRelease(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | ||||
ctx.Data["PageIsReleaseList"] = true | ctx.Data["PageIsReleaseList"] = true | ||||
@@ -249,9 +253,10 @@ func EditRelease(ctx *context.Context) { | |||||
ctx.Data["prerelease"] = rel.IsPrerelease | ctx.Data["prerelease"] = rel.IsPrerelease | ||||
ctx.Data["IsDraft"] = rel.IsDraft | ctx.Data["IsDraft"] = rel.IsDraft | ||||
ctx.HTML(200, RELEASE_NEW) | |||||
ctx.HTML(200, tplReleaseNew) | |||||
} | } | ||||
// EditReleasePost response for edit release | |||||
func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | ctx.Data["Title"] = ctx.Tr("repo.release.edit_release") | ||||
ctx.Data["PageIsReleaseList"] = true | ctx.Data["PageIsReleaseList"] = true | ||||
@@ -274,7 +279,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | |||||
ctx.Data["prerelease"] = rel.IsPrerelease | ctx.Data["prerelease"] = rel.IsPrerelease | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, RELEASE_NEW) | |||||
ctx.HTML(200, tplReleaseNew) | |||||
return | return | ||||
} | } | ||||
@@ -289,6 +294,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/releases") | ctx.Redirect(ctx.Repo.RepoLink + "/releases") | ||||
} | } | ||||
// DeleteRelease delete a release | |||||
func DeleteRelease(ctx *context.Context) { | func DeleteRelease(ctx *context.Context) { | ||||
if err := models.DeleteReleaseByID(ctx.QueryInt64("id")); err != nil { | if err := models.DeleteReleaseByID(ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteReleaseByID: " + err.Error()) | ctx.Flash.Error("DeleteReleaseByID: " + err.Error()) | ||||
@@ -23,10 +23,11 @@ import ( | |||||
) | ) | ||||
const ( | const ( | ||||
CREATE base.TplName = "repo/create" | |||||
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) { | func MustBeNotBare(ctx *context.Context) { | ||||
if ctx.Repo.Repository.IsBare { | if ctx.Repo.Repository.IsBare { | ||||
ctx.Handle(404, "MustBeNotBare", nil) | ctx.Handle(404, "MustBeNotBare", nil) | ||||
@@ -64,6 +65,7 @@ func checkContextUser(ctx *context.Context, uid int64) *models.User { | |||||
return org | return org | ||||
} | } | ||||
// Create render creating repository page | |||||
func Create(ctx *context.Context) { | func Create(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("new_repo") | ctx.Data["Title"] = ctx.Tr("new_repo") | ||||
@@ -81,7 +83,7 @@ func Create(ctx *context.Context) { | |||||
} | } | ||||
ctx.Data["ContextUser"] = ctxUser | ctx.Data["ContextUser"] = ctxUser | ||||
ctx.HTML(200, CREATE) | |||||
ctx.HTML(200, tplCreate) | |||||
} | } | ||||
func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) { | func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) { | ||||
@@ -102,6 +104,7 @@ func handleCreateError(ctx *context.Context, owner *models.User, err error, name | |||||
} | } | ||||
} | } | ||||
// CreatePost response for creating repository | |||||
func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | ||||
ctx.Data["Title"] = ctx.Tr("new_repo") | ctx.Data["Title"] = ctx.Tr("new_repo") | ||||
@@ -116,7 +119,7 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
ctx.Data["ContextUser"] = ctxUser | ctx.Data["ContextUser"] = ctxUser | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, CREATE) | |||||
ctx.HTML(200, tplCreate) | |||||
return | return | ||||
} | } | ||||
@@ -141,9 +144,10 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { | |||||
} | } | ||||
} | } | ||||
handleCreateError(ctx, ctxUser, err, "CreatePost", CREATE, &form) | |||||
handleCreateError(ctx, ctxUser, err, "CreatePost", tplCreate, &form) | |||||
} | } | ||||
// Migrate render migration of repository page | |||||
func Migrate(ctx *context.Context) { | func Migrate(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("new_migrate") | ctx.Data["Title"] = ctx.Tr("new_migrate") | ||||
ctx.Data["private"] = ctx.User.LastRepoVisibility | ctx.Data["private"] = ctx.User.LastRepoVisibility | ||||
@@ -156,9 +160,10 @@ func Migrate(ctx *context.Context) { | |||||
} | } | ||||
ctx.Data["ContextUser"] = ctxUser | ctx.Data["ContextUser"] = ctxUser | ||||
ctx.HTML(200, MIGRATE) | |||||
ctx.HTML(200, tplMigrate) | |||||
} | } | ||||
// MigratePost response for migrating from external git repository | |||||
func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | ||||
ctx.Data["Title"] = ctx.Tr("new_migrate") | ctx.Data["Title"] = ctx.Tr("new_migrate") | ||||
@@ -169,7 +174,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||||
ctx.Data["ContextUser"] = ctxUser | ctx.Data["ContextUser"] = ctxUser | ||||
if ctx.HasError() { | if ctx.HasError() { | ||||
ctx.HTML(200, MIGRATE) | |||||
ctx.HTML(200, tplMigrate) | |||||
return | return | ||||
} | } | ||||
@@ -180,11 +185,11 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||||
addrErr := err.(models.ErrInvalidCloneAddr) | addrErr := err.(models.ErrInvalidCloneAddr) | ||||
switch { | switch { | ||||
case addrErr.IsURLError: | case addrErr.IsURLError: | ||||
ctx.RenderWithErr(ctx.Tr("form.url_error"), MIGRATE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("form.url_error"), tplMigrate, &form) | |||||
case addrErr.IsPermissionDenied: | case addrErr.IsPermissionDenied: | ||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), MIGRATE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), tplMigrate, &form) | |||||
case addrErr.IsInvalidPath: | case addrErr.IsInvalidPath: | ||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), MIGRATE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), tplMigrate, &form) | |||||
default: | default: | ||||
ctx.Handle(500, "Unknown error", err) | ctx.Handle(500, "Unknown error", err) | ||||
} | } | ||||
@@ -216,17 +221,18 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||||
if strings.Contains(err.Error(), "Authentication failed") || | if strings.Contains(err.Error(), "Authentication failed") || | ||||
strings.Contains(err.Error(), "could not read Username") { | strings.Contains(err.Error(), "could not read Username") { | ||||
ctx.Data["Err_Auth"] = true | ctx.Data["Err_Auth"] = true | ||||
ctx.RenderWithErr(ctx.Tr("form.auth_failed", models.HandleCloneUserCredentials(err.Error(), true)), MIGRATE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("form.auth_failed", models.HandleCloneUserCredentials(err.Error(), true)), tplMigrate, &form) | |||||
return | return | ||||
} else if strings.Contains(err.Error(), "fatal:") { | } else if strings.Contains(err.Error(), "fatal:") { | ||||
ctx.Data["Err_CloneAddr"] = true | ctx.Data["Err_CloneAddr"] = true | ||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", models.HandleCloneUserCredentials(err.Error(), true)), MIGRATE, &form) | |||||
ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", models.HandleCloneUserCredentials(err.Error(), true)), tplMigrate, &form) | |||||
return | return | ||||
} | } | ||||
handleCreateError(ctx, ctxUser, err, "MigratePost", MIGRATE, &form) | |||||
handleCreateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form) | |||||
} | } | ||||
// Action response for actions to a repository | |||||
func Action(ctx *context.Context) { | func Action(ctx *context.Context) { | ||||
var err error | var err error | ||||
switch ctx.Params(":action") { | switch ctx.Params(":action") { | ||||
@@ -261,6 +267,7 @@ func Action(ctx *context.Context) { | |||||
ctx.Redirect(redirectTo) | ctx.Redirect(redirectTo) | ||||
} | } | ||||
// Download download an archive of a repository | |||||
func Download(ctx *context.Context) { | func Download(ctx *context.Context) { | ||||
var ( | var ( | ||||
uri = ctx.Params("*") | uri = ctx.Params("*") | ||||
@@ -26,12 +26,14 @@ const ( | |||||
tplDeployKeys base.TplName = "repo/settings/deploy_keys" | tplDeployKeys base.TplName = "repo/settings/deploy_keys" | ||||
) | ) | ||||
// Settings show a repository's settings page | |||||
func Settings(ctx *context.Context) { | func Settings(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings") | ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
ctx.Data["PageIsSettingsOptions"] = true | ctx.Data["PageIsSettingsOptions"] = true | ||||
ctx.HTML(200, tplSettingsOptions) | ctx.HTML(200, tplSettingsOptions) | ||||
} | } | ||||
// SettingsPost response for changes of a repository | |||||
func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings") | ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
ctx.Data["PageIsSettingsOptions"] = true | ctx.Data["PageIsSettingsOptions"] = true | ||||
@@ -293,6 +295,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { | |||||
} | } | ||||
} | } | ||||
// Collaboration render a repository's collaboration page | |||||
func Collaboration(ctx *context.Context) { | func Collaboration(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings") | ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
ctx.Data["PageIsSettingsCollaboration"] = true | ctx.Data["PageIsSettingsCollaboration"] = true | ||||
@@ -307,6 +310,7 @@ func Collaboration(ctx *context.Context) { | |||||
ctx.HTML(200, tplCollaboration) | ctx.HTML(200, tplCollaboration) | ||||
} | } | ||||
// CollaborationPost response for actions for a collaboration of a repository | |||||
func CollaborationPost(ctx *context.Context) { | func CollaborationPost(ctx *context.Context) { | ||||
name := strings.ToLower(ctx.Query("collaborator")) | name := strings.ToLower(ctx.Query("collaborator")) | ||||
if len(name) == 0 || ctx.Repo.Owner.LowerName == name { | if len(name) == 0 || ctx.Repo.Owner.LowerName == name { | ||||
@@ -352,6 +356,7 @@ func CollaborationPost(ctx *context.Context) { | |||||
ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path) | ctx.Redirect(setting.AppSubUrl + ctx.Req.URL.Path) | ||||
} | } | ||||
// ChangeCollaborationAccessMode response for changing access of a collaboration | |||||
func ChangeCollaborationAccessMode(ctx *context.Context) { | func ChangeCollaborationAccessMode(ctx *context.Context) { | ||||
if err := ctx.Repo.Repository.ChangeCollaborationAccessMode( | if err := ctx.Repo.Repository.ChangeCollaborationAccessMode( | ||||
ctx.QueryInt64("uid"), | ctx.QueryInt64("uid"), | ||||
@@ -360,6 +365,7 @@ func ChangeCollaborationAccessMode(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// DeleteCollaboration delete a collaboration for a repository | |||||
func DeleteCollaboration(ctx *context.Context) { | func DeleteCollaboration(ctx *context.Context) { | ||||
if err := ctx.Repo.Repository.DeleteCollaboration(ctx.QueryInt64("id")); err != nil { | if err := ctx.Repo.Repository.DeleteCollaboration(ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteCollaboration: " + err.Error()) | ctx.Flash.Error("DeleteCollaboration: " + err.Error()) | ||||
@@ -396,6 +402,7 @@ func parseOwnerAndRepo(ctx *context.Context) (*models.User, *models.Repository) | |||||
return owner, repo | return owner, repo | ||||
} | } | ||||
// GitHooks hooks of a repository | |||||
func GitHooks(ctx *context.Context) { | func GitHooks(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | ||||
ctx.Data["PageIsSettingsGitHooks"] = true | ctx.Data["PageIsSettingsGitHooks"] = true | ||||
@@ -410,6 +417,7 @@ func GitHooks(ctx *context.Context) { | |||||
ctx.HTML(200, tplGithooks) | ctx.HTML(200, tplGithooks) | ||||
} | } | ||||
// GitHooksEdit render for editing a hook of repository page | |||||
func GitHooksEdit(ctx *context.Context) { | func GitHooksEdit(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | ctx.Data["Title"] = ctx.Tr("repo.settings.githooks") | ||||
ctx.Data["PageIsSettingsGitHooks"] = true | ctx.Data["PageIsSettingsGitHooks"] = true | ||||
@@ -428,6 +436,7 @@ func GitHooksEdit(ctx *context.Context) { | |||||
ctx.HTML(200, tplGithookEdit) | ctx.HTML(200, tplGithookEdit) | ||||
} | } | ||||
// GitHooksEditPost response for editing a git hook of a repository | |||||
func GitHooksEditPost(ctx *context.Context) { | func GitHooksEditPost(ctx *context.Context) { | ||||
name := ctx.Params(":name") | name := ctx.Params(":name") | ||||
hook, err := ctx.Repo.GitRepo.GetHook(name) | hook, err := ctx.Repo.GitRepo.GetHook(name) | ||||
@@ -447,6 +456,7 @@ func GitHooksEditPost(ctx *context.Context) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git") | ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks/git") | ||||
} | } | ||||
// DeployKeys render the deploy keys list of a repository page | |||||
func DeployKeys(ctx *context.Context) { | func DeployKeys(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | ||||
ctx.Data["PageIsSettingsKeys"] = true | ctx.Data["PageIsSettingsKeys"] = true | ||||
@@ -461,6 +471,7 @@ func DeployKeys(ctx *context.Context) { | |||||
ctx.HTML(200, tplDeployKeys) | ctx.HTML(200, tplDeployKeys) | ||||
} | } | ||||
// DeployKeysPost response for adding a deploy key of a repository | |||||
func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { | func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | ctx.Data["Title"] = ctx.Tr("repo.settings.deploy_keys") | ||||
ctx.Data["PageIsSettingsKeys"] = true | ctx.Data["PageIsSettingsKeys"] = true | ||||
@@ -511,6 +522,7 @@ func DeployKeysPost(ctx *context.Context, form auth.AddSSHKeyForm) { | |||||
ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") | ctx.Redirect(ctx.Repo.RepoLink + "/settings/keys") | ||||
} | } | ||||
// DeleteDeployKey response for deleting a deploy key | |||||
func DeleteDeployKey(ctx *context.Context) { | func DeleteDeployKey(ctx *context.Context) { | ||||
if err := models.DeleteDeployKey(ctx.User, ctx.QueryInt64("id")); err != nil { | if err := models.DeleteDeployKey(ctx.User, ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteDeployKey: " + err.Error()) | ctx.Flash.Error("DeleteDeployKey: " + err.Error()) | ||||
@@ -28,6 +28,7 @@ const ( | |||||
tplOrgHookNew base.TplName = "org/settings/hook_new" | tplOrgHookNew base.TplName = "org/settings/hook_new" | ||||
) | ) | ||||
// Webhooks render web hooks list page | |||||
func Webhooks(ctx *context.Context) { | func Webhooks(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.hooks") | ctx.Data["Title"] = ctx.Tr("repo.settings.hooks") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -44,7 +45,7 @@ func Webhooks(ctx *context.Context) { | |||||
ctx.HTML(200, tplHooks) | ctx.HTML(200, tplHooks) | ||||
} | } | ||||
type OrgRepoCtx struct { | |||||
type orgRepoCtx struct { | |||||
OrgID int64 | OrgID int64 | ||||
RepoID int64 | RepoID int64 | ||||
Link string | Link string | ||||
@@ -52,9 +53,9 @@ type OrgRepoCtx struct { | |||||
} | } | ||||
// getOrgRepoCtx determines whether this is a repo context or organization context. | // getOrgRepoCtx determines whether this is a repo context or organization context. | ||||
func getOrgRepoCtx(ctx *context.Context) (*OrgRepoCtx, error) { | |||||
func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) { | |||||
if len(ctx.Repo.RepoLink) > 0 { | if len(ctx.Repo.RepoLink) > 0 { | ||||
return &OrgRepoCtx{ | |||||
return &orgRepoCtx{ | |||||
RepoID: ctx.Repo.Repository.ID, | RepoID: ctx.Repo.Repository.ID, | ||||
Link: ctx.Repo.RepoLink, | Link: ctx.Repo.RepoLink, | ||||
NewTemplate: tplHookNew, | NewTemplate: tplHookNew, | ||||
@@ -62,7 +63,7 @@ func getOrgRepoCtx(ctx *context.Context) (*OrgRepoCtx, error) { | |||||
} | } | ||||
if len(ctx.Org.OrgLink) > 0 { | if len(ctx.Org.OrgLink) > 0 { | ||||
return &OrgRepoCtx{ | |||||
return &orgRepoCtx{ | |||||
OrgID: ctx.Org.Organization.ID, | OrgID: ctx.Org.Organization.ID, | ||||
Link: ctx.Org.OrgLink, | Link: ctx.Org.OrgLink, | ||||
NewTemplate: tplOrgHookNew, | NewTemplate: tplOrgHookNew, | ||||
@@ -81,6 +82,7 @@ func checkHookType(ctx *context.Context) string { | |||||
return hookType | return hookType | ||||
} | } | ||||
// WebhooksNew render creating webhook page | |||||
func WebhooksNew(ctx *context.Context) { | func WebhooksNew(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -102,6 +104,7 @@ func WebhooksNew(ctx *context.Context) { | |||||
ctx.HTML(200, orCtx.NewTemplate) | ctx.HTML(200, orCtx.NewTemplate) | ||||
} | } | ||||
// ParseHookEvent convert web form content to models.HookEvent | |||||
func ParseHookEvent(form auth.WebhookForm) *models.HookEvent { | func ParseHookEvent(form auth.WebhookForm) *models.HookEvent { | ||||
return &models.HookEvent{ | return &models.HookEvent{ | ||||
PushOnly: form.PushOnly(), | PushOnly: form.PushOnly(), | ||||
@@ -115,6 +118,7 @@ func ParseHookEvent(form auth.WebhookForm) *models.HookEvent { | |||||
} | } | ||||
} | } | ||||
// WebHooksNewPost response for creating webhook | |||||
func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { | func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -161,6 +165,7 @@ func WebHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { | |||||
ctx.Redirect(orCtx.Link + "/settings/hooks") | ctx.Redirect(orCtx.Link + "/settings/hooks") | ||||
} | } | ||||
// SlackHooksNewPost response for creating slack hook | |||||
func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings") | ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -211,7 +216,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||||
ctx.Redirect(orCtx.Link + "/settings/hooks") | ctx.Redirect(orCtx.Link + "/settings/hooks") | ||||
} | } | ||||
func checkWebhook(ctx *context.Context) (*OrgRepoCtx, *models.Webhook) { | |||||
func checkWebhook(ctx *context.Context) (*orgRepoCtx, *models.Webhook) { | |||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
orCtx, err := getOrgRepoCtx(ctx) | orCtx, err := getOrgRepoCtx(ctx) | ||||
@@ -251,6 +256,7 @@ func checkWebhook(ctx *context.Context) (*OrgRepoCtx, *models.Webhook) { | |||||
return orCtx, w | return orCtx, w | ||||
} | } | ||||
// WebHooksEdit render editing web hook page | |||||
func WebHooksEdit(ctx *context.Context) { | func WebHooksEdit(ctx *context.Context) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -265,6 +271,7 @@ func WebHooksEdit(ctx *context.Context) { | |||||
ctx.HTML(200, orCtx.NewTemplate) | ctx.HTML(200, orCtx.NewTemplate) | ||||
} | } | ||||
// WebHooksEditPost response for editing web hook | |||||
func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { | func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -303,6 +310,7 @@ func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { | |||||
ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ||||
} | } | ||||
// SlackHooksEditPost reponse for editing slack hook | |||||
func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { | func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { | ||||
ctx.Data["Title"] = ctx.Tr("repo.settings") | ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
ctx.Data["PageIsSettingsHooks"] = true | ctx.Data["PageIsSettingsHooks"] = true | ||||
@@ -346,6 +354,7 @@ func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||||
ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ||||
} | } | ||||
// TestWebhook test if web hook is work fine | |||||
func TestWebhook(ctx *context.Context) { | func TestWebhook(ctx *context.Context) { | ||||
// Grab latest commit or fake one if it's empty repository. | // Grab latest commit or fake one if it's empty repository. | ||||
commit := ctx.Repo.Commit | commit := ctx.Repo.Commit | ||||
@@ -393,6 +402,7 @@ func TestWebhook(ctx *context.Context) { | |||||
} | } | ||||
} | } | ||||
// DeleteWebhook delete a webhook | |||||
func DeleteWebhook(ctx *context.Context) { | func DeleteWebhook(ctx *context.Context) { | ||||
if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | if err := models.DeleteWebhookByRepoID(ctx.Repo.Repository.ID, ctx.QueryInt64("id")); err != nil { | ||||
ctx.Flash.Error("DeleteWebhookByRepoID: " + err.Error()) | ctx.Flash.Error("DeleteWebhookByRepoID: " + err.Error()) | ||||