API endpoint for changing/creating/deleting multiple files (#24887)

This PR creates an API endpoint for creating/updating/deleting multiple
files in one API call similar to the solution provided by
[GitLab](https://docs.gitlab.com/ee/api/commits.html#create-a-commit-with-multiple-files-and-actions).

To archive this, the CreateOrUpdateRepoFile and DeleteRepoFIle functions
in files service are unified into one function supporting multiple files
and actions.

Resolves #14619
This commit is contained in:
Denys Konovalov 2023-05-29 11:41:35 +02:00 committed by GitHub
parent 245f2c08db
commit 275d4b7e3f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 1309 additions and 778 deletions

View file

@ -11,18 +11,22 @@ import (
files_service "code.gitea.io/gitea/services/repository/files"
)
func createFileInBranch(user *user_model.User, repo *repo_model.Repository, treePath, branchName, content string) (*api.FileResponse, error) {
opts := &files_service.UpdateRepoFileOptions{
func createFileInBranch(user *user_model.User, repo *repo_model.Repository, treePath, branchName, content string) (*api.FilesResponse, error) {
opts := &files_service.ChangeRepoFilesOptions{
Files: []*files_service.ChangeRepoFile{
{
Operation: "create",
TreePath: treePath,
Content: content,
},
},
OldBranch: branchName,
TreePath: treePath,
Content: content,
IsNewFile: true,
Author: nil,
Committer: nil,
}
return files_service.CreateOrUpdateRepoFile(git.DefaultContext, repo, user, opts)
return files_service.ChangeRepoFiles(git.DefaultContext, repo, user, opts)
}
func createFile(user *user_model.User, repo *repo_model.Repository, treePath string) (*api.FileResponse, error) {
func createFile(user *user_model.User, repo *repo_model.Repository, treePath string) (*api.FilesResponse, error) {
return createFileInBranch(user, repo, treePath, repo.DefaultBranch, "This is a NEW file")
}