@@ -315,6 +315,11 @@ type WhitelistOptions struct { | |||
// This function also performs check if whitelist user and team's IDs have been changed | |||
// to avoid unnecessary whitelist delete and regenerate. | |||
func UpdateProtectBranch(ctx context.Context, repo *repo_model.Repository, protectBranch *ProtectedBranch, opts WhitelistOptions) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
if err = repo.LoadOwner(ctx); err != nil { | |||
return fmt.Errorf("LoadOwner: %v", err) | |||
} | |||
@@ -445,9 +450,14 @@ func updateTeamWhitelist(ctx context.Context, repo *repo_model.Repository, curre | |||
} | |||
// DeleteProtectedBranch removes ProtectedBranch relation between the user and repository. | |||
func DeleteProtectedBranch(ctx context.Context, repoID, id int64) (err error) { | |||
func DeleteProtectedBranch(ctx context.Context, repo *repo_model.Repository, id int64) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
protectedBranch := &ProtectedBranch{ | |||
RepoID: repoID, | |||
RepoID: repo.ID, | |||
ID: id, | |||
} | |||
@@ -47,6 +47,14 @@ func (err ErrUserDoesNotHaveAccessToRepo) Unwrap() error { | |||
return util.ErrPermissionDenied | |||
} | |||
type ErrRepoIsArchived struct { | |||
Repo *Repository | |||
} | |||
func (err ErrRepoIsArchived) Error() string { | |||
return fmt.Sprintf("%s is archived", err.Repo.LogString()) | |||
} | |||
var ( | |||
reservedRepoNames = []string{".", "..", "-"} | |||
reservedRepoPatterns = []string{"*.git", "*.wiki", "*.rss", "*.atom"} | |||
@@ -654,6 +662,14 @@ func (repo *Repository) GetTrustModel() TrustModelType { | |||
return trustModel | |||
} | |||
// MustNotBeArchived returns ErrRepoIsArchived if the repo is archived | |||
func (repo *Repository) MustNotBeArchived() error { | |||
if repo.IsArchived { | |||
return ErrRepoIsArchived{Repo: repo} | |||
} | |||
return nil | |||
} | |||
// __________ .__ __ | |||
// \______ \ ____ ______ ____ _____|__|/ |_ ___________ ___.__. | |||
// | _// __ \\____ \ / _ \/ ___/ \ __\/ _ \_ __ < | | |
@@ -101,6 +101,12 @@ type APIRedirect struct{} | |||
// swagger:response string | |||
type APIString string | |||
// APIRepoArchivedError is an error that is raised when an archived repo should be modified | |||
// swagger:response repoArchivedError | |||
type APIRepoArchivedError struct { | |||
APIError | |||
} | |||
// ServerError responds with error message, status is 500 | |||
func (ctx *APIContext) ServerError(title string, err error) { | |||
ctx.Error(http.StatusInternalServerError, title, err) |
@@ -675,7 +675,7 @@ func mustEnableWiki(ctx *context.APIContext) { | |||
func mustNotBeArchived(ctx *context.APIContext) { | |||
if ctx.Repo.Repository.IsArchived { | |||
ctx.NotFound() | |||
ctx.Error(http.StatusLocked, "RepoArchived", fmt.Errorf("%s is archived", ctx.Repo.Repository.LogString())) | |||
return | |||
} | |||
} | |||
@@ -1108,23 +1108,23 @@ func Routes() *web.Route { | |||
m.Group("/branches", func() { | |||
m.Get("", repo.ListBranches) | |||
m.Get("/*", repo.GetBranch) | |||
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), repo.DeleteBranch) | |||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), bind(api.CreateBranchRepoOption{}), repo.CreateBranch) | |||
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteBranch) | |||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateBranchRepoOption{}), repo.CreateBranch) | |||
}, context.ReferencesGitRepo(), reqRepoReader(unit.TypeCode)) | |||
m.Group("/branch_protections", func() { | |||
m.Get("", repo.ListBranchProtections) | |||
m.Post("", bind(api.CreateBranchProtectionOption{}), repo.CreateBranchProtection) | |||
m.Post("", bind(api.CreateBranchProtectionOption{}), mustNotBeArchived, repo.CreateBranchProtection) | |||
m.Group("/{name}", func() { | |||
m.Get("", repo.GetBranchProtection) | |||
m.Patch("", bind(api.EditBranchProtectionOption{}), repo.EditBranchProtection) | |||
m.Patch("", bind(api.EditBranchProtectionOption{}), mustNotBeArchived, repo.EditBranchProtection) | |||
m.Delete("", repo.DeleteBranchProtection) | |||
}) | |||
}, reqToken(), reqAdmin()) | |||
m.Group("/tags", func() { | |||
m.Get("", repo.ListTags) | |||
m.Get("/*", repo.GetTag) | |||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), bind(api.CreateTagOption{}), repo.CreateTag) | |||
m.Delete("/*", reqToken(), repo.DeleteTag) | |||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateTagOption{}), repo.CreateTag) | |||
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteTag) | |||
}, reqRepoReader(unit.TypeCode), context.ReferencesGitRepo(true)) | |||
m.Group("/keys", func() { | |||
m.Combo("").Get(repo.ListDeployKeys). | |||
@@ -1245,15 +1245,15 @@ func Routes() *web.Route { | |||
m.Get("/tags/{sha}", repo.GetAnnotatedTag) | |||
m.Get("/notes/{sha}", repo.GetNote) | |||
}, context.ReferencesGitRepo(true), reqRepoReader(unit.TypeCode)) | |||
m.Post("/diffpatch", reqRepoWriter(unit.TypeCode), reqToken(), bind(api.ApplyDiffPatchFileOptions{}), repo.ApplyDiffPatch) | |||
m.Post("/diffpatch", reqRepoWriter(unit.TypeCode), reqToken(), bind(api.ApplyDiffPatchFileOptions{}), mustNotBeArchived, repo.ApplyDiffPatch) | |||
m.Group("/contents", func() { | |||
m.Get("", repo.GetContentsList) | |||
m.Post("", reqToken(), bind(api.ChangeFilesOptions{}), reqRepoBranchWriter, repo.ChangeFiles) | |||
m.Post("", reqToken(), bind(api.ChangeFilesOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.ChangeFiles) | |||
m.Get("/*", repo.GetContents) | |||
m.Group("/*", func() { | |||
m.Post("", bind(api.CreateFileOptions{}), reqRepoBranchWriter, repo.CreateFile) | |||
m.Put("", bind(api.UpdateFileOptions{}), reqRepoBranchWriter, repo.UpdateFile) | |||
m.Delete("", bind(api.DeleteFileOptions{}), reqRepoBranchWriter, repo.DeleteFile) | |||
m.Post("", bind(api.CreateFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.CreateFile) | |||
m.Put("", bind(api.UpdateFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.UpdateFile) | |||
m.Delete("", bind(api.DeleteFileOptions{}), reqRepoBranchWriter, mustNotBeArchived, repo.DeleteFile) | |||
}, reqToken()) | |||
}, reqRepoReader(unit.TypeCode)) | |||
m.Get("/signing-key.gpg", misc.SigningKey) |
@@ -117,17 +117,13 @@ func DeleteBranch(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
if ctx.Repo.Repository.IsEmpty { | |||
ctx.Error(http.StatusNotFound, "", "Git Repository is empty.") | |||
return | |||
} | |||
if ctx.Repo.Repository.IsArchived { | |||
ctx.Error(http.StatusForbidden, "", "Git Repository is archived.") | |||
return | |||
} | |||
if ctx.Repo.Repository.IsMirror { | |||
ctx.Error(http.StatusForbidden, "", "Git Repository is a mirror.") | |||
return | |||
@@ -157,10 +153,6 @@ func DeleteBranch(ctx *context.APIContext) { | |||
} | |||
} | |||
if ctx.Repo.Repository.IsArchived { | |||
ctx.Error(http.StatusForbidden, "IsArchived", fmt.Errorf("can not delete branch of an archived repository")) | |||
return | |||
} | |||
if ctx.Repo.Repository.IsMirror { | |||
ctx.Error(http.StatusForbidden, "IsMirrored", fmt.Errorf("can not delete branch of an mirror repository")) | |||
return | |||
@@ -216,17 +208,14 @@ func CreateBranch(ctx *context.APIContext) { | |||
// description: The old branch does not exist. | |||
// "409": | |||
// description: The branch with the same name already exists. | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
if ctx.Repo.Repository.IsEmpty { | |||
ctx.Error(http.StatusNotFound, "", "Git Repository is empty.") | |||
return | |||
} | |||
if ctx.Repo.Repository.IsArchived { | |||
ctx.Error(http.StatusForbidden, "", "Git Repository is archived.") | |||
return | |||
} | |||
if ctx.Repo.Repository.IsMirror { | |||
ctx.Error(http.StatusForbidden, "", "Git Repository is a mirror.") | |||
return | |||
@@ -519,6 +508,8 @@ func CreateBranchProtection(ctx *context.APIContext) { | |||
// "$ref": "#/responses/notFound" | |||
// "422": | |||
// "$ref": "#/responses/validationError" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateBranchProtectionOption) | |||
repo := ctx.Repo.Repository | |||
@@ -727,6 +718,8 @@ func EditBranchProtection(ctx *context.APIContext) { | |||
// "$ref": "#/responses/notFound" | |||
// "422": | |||
// "$ref": "#/responses/validationError" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.EditBranchProtectionOption) | |||
repo := ctx.Repo.Repository | |||
bpName := ctx.Params(":name") | |||
@@ -1004,7 +997,7 @@ func DeleteBranchProtection(ctx *context.APIContext) { | |||
return | |||
} | |||
if err := git_model.DeleteProtectedBranch(ctx, ctx.Repo.Repository.ID, bp.ID); err != nil { | |||
if err := git_model.DeleteProtectedBranch(ctx, ctx.Repo.Repository, bp.ID); err != nil { | |||
ctx.Error(http.StatusInternalServerError, "DeleteProtectedBranch", err) | |||
return | |||
} |
@@ -450,6 +450,8 @@ func ChangeFiles(ctx *context.APIContext) { | |||
// "$ref": "#/responses/notFound" | |||
// "422": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
apiOpts := web.GetForm(ctx).(*api.ChangeFilesOptions) | |||
@@ -550,6 +552,8 @@ func CreateFile(ctx *context.APIContext) { | |||
// "$ref": "#/responses/notFound" | |||
// "422": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
apiOpts := web.GetForm(ctx).(*api.CreateFileOptions) | |||
@@ -646,6 +650,8 @@ func UpdateFile(ctx *context.APIContext) { | |||
// "$ref": "#/responses/notFound" | |||
// "422": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
apiOpts := web.GetForm(ctx).(*api.UpdateFileOptions) | |||
if ctx.Repo.Repository.IsEmpty { | |||
ctx.Error(http.StatusUnprocessableEntity, "RepoIsEmpty", fmt.Errorf("repo is empty")) | |||
@@ -806,6 +812,8 @@ func DeleteFile(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
apiOpts := web.GetForm(ctx).(*api.DeleteFileOptions) | |||
if !canWriteFiles(ctx, apiOpts.BranchName) { |
@@ -631,6 +631,8 @@ func CreateIssue(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "422": | |||
// "$ref": "#/responses/validationError" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateIssueOption) | |||
var deadlineUnix timeutil.TimeStamp | |||
if form.Deadline != nil && ctx.Repo.CanWrite(unit.TypeIssues) { |
@@ -153,6 +153,8 @@ func CreateIssueAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
issue := getIssueFromContext(ctx) | |||
if issue == nil { | |||
@@ -238,6 +240,8 @@ func EditIssueAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/Attachment" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
attachment := getIssueAttachmentSafeWrite(ctx) | |||
if attachment == nil { | |||
@@ -292,6 +296,8 @@ func DeleteIssueAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/empty" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
attachment := getIssueAttachmentSafeWrite(ctx) | |||
if attachment == nil { |
@@ -358,6 +358,8 @@ func CreateIssueComment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateIssueCommentOption) | |||
issue, err := issues_model.GetIssueByIndex(ctx, ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | |||
if err != nil { | |||
@@ -486,7 +488,8 @@ func EditIssueComment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.EditIssueCommentOption) | |||
editIssueComment(ctx, *form) | |||
} |
@@ -156,6 +156,8 @@ func CreateIssueCommentAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
// Check if comment exists and load comment | |||
comment := getIssueCommentSafe(ctx) | |||
@@ -245,7 +247,8 @@ func EditIssueCommentAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/Attachment" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
attach := getIssueCommentAttachmentSafeWrite(ctx) | |||
if attach == nil { | |||
return | |||
@@ -297,7 +300,8 @@ func DeleteIssueCommentAttachment(ctx *context.APIContext) { | |||
// "$ref": "#/responses/empty" | |||
// "404": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
attach := getIssueCommentAttachmentSafeWrite(ctx) | |||
if attach == nil { | |||
return |
@@ -187,6 +187,8 @@ func CreateIssueDependency(ctx *context.APIContext) { | |||
// "$ref": "#/responses/Issue" | |||
// "404": | |||
// description: the issue does not exist | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
// We want to make <:index> depend on <Form>, i.e. <:index> is the target | |||
target := getParamsIssue(ctx) | |||
@@ -246,6 +248,8 @@ func RemoveIssueDependency(ctx *context.APIContext) { | |||
// "$ref": "#/responses/Issue" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
// We want to make <:index> depend on <Form>, i.e. <:index> is the target | |||
target := getParamsIssue(ctx) |
@@ -47,6 +47,8 @@ func ApplyDiffPatch(ctx *context.APIContext) { | |||
// "$ref": "#/responses/FileResponse" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
apiOpts := web.GetForm(ctx).(*api.ApplyDiffPatchFileOptions) | |||
opts := &files.ApplyDiffPatchOptions{ |
@@ -282,6 +282,8 @@ func CreatePullRequest(ctx *context.APIContext) { | |||
// "$ref": "#/responses/error" | |||
// "422": | |||
// "$ref": "#/responses/validationError" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := *web.GetForm(ctx).(*api.CreatePullRequestOption) | |||
if form.Head == form.Base { | |||
@@ -741,6 +743,8 @@ func MergePullRequest(ctx *context.APIContext) { | |||
// "$ref": "#/responses/empty" | |||
// "409": | |||
// "$ref": "#/responses/error" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*forms.MergePullRequestForm) | |||
@@ -1196,6 +1200,8 @@ func CancelScheduledAutoMerge(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
pullIndex := ctx.ParamsInt64(":index") | |||
pull, err := issues_model.GetPullRequestByIndex(ctx, ctx.Repo.Repository.ID, pullIndex) |
@@ -184,6 +184,8 @@ func CreateTag(ctx *context.APIContext) { | |||
// "$ref": "#/responses/empty" | |||
// "409": | |||
// "$ref": "#/responses/conflict" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateTagOption) | |||
// If target is not provided use default branch | |||
@@ -251,6 +253,8 @@ func DeleteTag(ctx *context.APIContext) { | |||
// "$ref": "#/responses/empty" | |||
// "409": | |||
// "$ref": "#/responses/conflict" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
tagName := ctx.Params("*") | |||
tag, err := repo_model.GetRelease(ctx.Repo.Repository.ID, tagName) |
@@ -52,6 +52,8 @@ func NewWikiPage(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateWikiPageOptions) | |||
@@ -128,6 +130,8 @@ func EditWikiPage(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
form := web.GetForm(ctx).(*api.CreateWikiPageOptions) | |||
@@ -234,6 +238,8 @@ func DeleteWikiPage(ctx *context.APIContext) { | |||
// "$ref": "#/responses/forbidden" | |||
// "404": | |||
// "$ref": "#/responses/notFound" | |||
// "423": | |||
// "$ref": "#/responses/repoArchivedError" | |||
wikiName := wiki_service.WebPathFromRequest(ctx.PathParamRaw(":pageName")) | |||
@@ -285,7 +285,7 @@ func DeleteProtectedBranchRulePost(ctx *context.Context) { | |||
return | |||
} | |||
if err := git_model.DeleteProtectedBranch(ctx, ctx.Repo.Repository.ID, ruleID); err != nil { | |||
if err := git_model.DeleteProtectedBranch(ctx, ctx.Repo.Repository, ruleID); err != nil { | |||
ctx.Flash.Error(ctx.Tr("repo.settings.remove_protected_branch_failed", rule.RuleName)) | |||
ctx.JSONRedirect(fmt.Sprintf("%s/settings/branches", ctx.Repo.RepoLink)) | |||
return |
@@ -25,6 +25,16 @@ import ( | |||
) | |||
func createTag(ctx context.Context, gitRepo *git.Repository, rel *repo_model.Release, msg string) (bool, error) { | |||
err := rel.LoadAttributes(ctx) | |||
if err != nil { | |||
return false, err | |||
} | |||
err = rel.Repo.MustNotBeArchived() | |||
if err != nil { | |||
return false, err | |||
} | |||
var created bool | |||
// Only actual create when publish. | |||
if !rel.IsDraft { |
@@ -29,6 +29,11 @@ import ( | |||
// CreateNewBranch creates a new repository branch | |||
func CreateNewBranch(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, oldBranchName, branchName string) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
// Check if branch name can be used | |||
if err := checkBranchName(ctx, repo, branchName); err != nil { | |||
return err | |||
@@ -246,6 +251,11 @@ func checkBranchName(ctx context.Context, repo *repo_model.Repository, name stri | |||
// CreateNewBranchFromCommit creates a new repository branch | |||
func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, commit, branchName string) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
// Check if branch name can be used | |||
if err := checkBranchName(ctx, repo, branchName); err != nil { | |||
return err | |||
@@ -267,6 +277,11 @@ func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo | |||
// RenameBranch rename a branch | |||
func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_model.User, gitRepo *git.Repository, from, to string) (string, error) { | |||
err := repo.MustNotBeArchived() | |||
if err != nil { | |||
return "", err | |||
} | |||
if from == to { | |||
return "target_exist", nil | |||
} | |||
@@ -315,6 +330,11 @@ var ( | |||
// DeleteBranch delete branch | |||
func DeleteBranch(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, gitRepo *git.Repository, branchName string) error { | |||
err := repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
if branchName == repo.DefaultBranch { | |||
return ErrBranchIsDefault | |||
} |
@@ -95,6 +95,11 @@ func (opts *ApplyDiffPatchOptions) Validate(ctx context.Context, repo *repo_mode | |||
// ApplyDiffPatch applies a patch to the given repository | |||
func ApplyDiffPatch(ctx context.Context, repo *repo_model.Repository, doer *user_model.User, opts *ApplyDiffPatchOptions) (*structs.FileResponse, error) { | |||
err := repo.MustNotBeArchived() | |||
if err != nil { | |||
return nil, err | |||
} | |||
if err := opts.Validate(ctx, repo, doer); err != nil { | |||
return nil, err | |||
} |
@@ -65,6 +65,11 @@ type RepoFileOptions struct { | |||
// ChangeRepoFiles adds, updates or removes multiple files in the given repository | |||
func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *user_model.User, opts *ChangeRepoFilesOptions) (*structs.FilesResponse, error) { | |||
err := repo.MustNotBeArchived() | |||
if err != nil { | |||
return nil, err | |||
} | |||
// If no branch name is set, assume default branch | |||
if opts.OldBranch == "" { | |||
opts.OldBranch = repo.DefaultBranch |
@@ -79,6 +79,11 @@ func prepareGitPath(gitRepo *git.Repository, wikiPath WebPath) (bool, string, er | |||
// updateWikiPage adds a new page or edits an existing page in repository wiki. | |||
func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, oldWikiName, newWikiName WebPath, content, message string, isNew bool) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
if err = validateWebPath(newWikiName); err != nil { | |||
return err | |||
} | |||
@@ -238,6 +243,11 @@ func EditWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model.R | |||
// DeleteWikiPage deletes a wiki page identified by its path. | |||
func DeleteWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, wikiName WebPath) (err error) { | |||
err = repo.MustNotBeArchived() | |||
if err != nil { | |||
return err | |||
} | |||
wikiWorkingPool.CheckIn(fmt.Sprint(repo.ID)) | |||
defer wikiWorkingPool.CheckOut(fmt.Sprint(repo.ID)) | |||
@@ -3719,6 +3719,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/validationError" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -3857,6 +3860,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/validationError" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -3952,6 +3958,9 @@ | |||
}, | |||
"409": { | |||
"description": "The branch with the same name already exists." | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -4039,6 +4048,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -4596,6 +4608,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -4703,6 +4718,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -4761,6 +4779,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -4819,6 +4840,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -4866,6 +4890,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -6137,6 +6164,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/validationError" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -6352,6 +6382,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -6457,6 +6490,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -6559,6 +6595,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -6619,6 +6658,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -7067,6 +7109,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -7169,6 +7214,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -7229,6 +7277,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -7493,6 +7544,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -7771,6 +7825,9 @@ | |||
}, | |||
"404": { | |||
"description": "the issue does not exist" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -7819,6 +7876,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -10205,6 +10265,9 @@ | |||
}, | |||
"422": { | |||
"$ref": "#/responses/validationError" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -10639,6 +10702,9 @@ | |||
}, | |||
"409": { | |||
"$ref": "#/responses/error" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -10684,6 +10750,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -12725,6 +12794,9 @@ | |||
}, | |||
"409": { | |||
"$ref": "#/responses/conflict" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -12815,6 +12887,9 @@ | |||
}, | |||
"409": { | |||
"$ref": "#/responses/conflict" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -13475,6 +13550,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -13559,6 +13637,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
}, | |||
@@ -13613,6 +13694,9 @@ | |||
}, | |||
"404": { | |||
"$ref": "#/responses/notFound" | |||
}, | |||
"423": { | |||
"$ref": "#/responses/repoArchivedError" | |||
} | |||
} | |||
} | |||
@@ -23903,6 +23987,17 @@ | |||
"redirect": { | |||
"description": "APIRedirect is a redirect response" | |||
}, | |||
"repoArchivedError": { | |||
"description": "APIRepoArchivedError is an error that is raised when an archived repo should be modified", | |||
"headers": { | |||
"message": { | |||
"type": "string" | |||
}, | |||
"url": { | |||
"type": "string" | |||
} | |||
} | |||
}, | |||
"string": { | |||
"description": "APIString is a string response", | |||
"schema": { |