forked from forgejo/forgejo
Refactor "Content" for file uploading (#25851)
Before: the concept "Content string" is used everywhere. It has some problems: 1. Sometimes it means "base64 encoded content", sometimes it means "raw binary content" 2. It doesn't work with large files, eg: uploading a 1G LFS file would make Gitea process OOM This PR does the refactoring: use "ContentReader" / "ContentBase64" instead of "Content" This PR is not breaking because the key in API JSON is still "content": `` ContentBase64 string `json:"content"` ``
This commit is contained in:
parent
265a28802a
commit
236c645bf1
15 changed files with 103 additions and 80 deletions
|
@ -5,6 +5,7 @@ package integration
|
|||
|
||||
import (
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -64,9 +65,9 @@ func TestPullRequestTargetEvent(t *testing.T) {
|
|||
addWorkflowToBaseResp, err := files_service.ChangeRepoFiles(git.DefaultContext, baseRepo, user2, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: ".gitea/workflows/pr.yml",
|
||||
Content: "name: test\non: pull_request_target\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n",
|
||||
Operation: "create",
|
||||
TreePath: ".gitea/workflows/pr.yml",
|
||||
ContentReader: strings.NewReader("name: test\non: pull_request_target\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - run: echo helloworld\n"),
|
||||
},
|
||||
},
|
||||
Message: "add workflow",
|
||||
|
@ -92,9 +93,9 @@ func TestPullRequestTargetEvent(t *testing.T) {
|
|||
addFileToForkedResp, err := files_service.ChangeRepoFiles(git.DefaultContext, forkedRepo, user3, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "file_1.txt",
|
||||
Content: "file1",
|
||||
Operation: "create",
|
||||
TreePath: "file_1.txt",
|
||||
ContentReader: strings.NewReader("file1"),
|
||||
},
|
||||
},
|
||||
Message: "add file1",
|
||||
|
|
|
@ -46,7 +46,7 @@ func getCreateFileOptions() api.CreateFileOptions {
|
|||
Committer: time.Unix(978307190, 0),
|
||||
},
|
||||
},
|
||||
Content: contentEncoded,
|
||||
ContentBase64: contentEncoded,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
package integration
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
|
@ -15,9 +17,9 @@ func createFileInBranch(user *user_model.User, repo *repo_model.Repository, tree
|
|||
opts := &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: treePath,
|
||||
Content: content,
|
||||
Operation: "create",
|
||||
TreePath: treePath,
|
||||
ContentReader: strings.NewReader(content),
|
||||
},
|
||||
},
|
||||
OldBranch: branchName,
|
||||
|
|
|
@ -44,7 +44,7 @@ func getUpdateFileOptions() *api.UpdateFileOptions {
|
|||
},
|
||||
SHA: "103ff9234cefeee5ec5361d22b49fbb04d385885",
|
||||
},
|
||||
Content: contentEncoded,
|
||||
ContentBase64: contentEncoded,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,13 +44,13 @@ func getChangeFilesOptions() *api.ChangeFilesOptions {
|
|||
},
|
||||
Files: []*api.ChangeFileOperation{
|
||||
{
|
||||
Operation: "create",
|
||||
Content: newContentEncoded,
|
||||
Operation: "create",
|
||||
ContentBase64: newContentEncoded,
|
||||
},
|
||||
{
|
||||
Operation: "update",
|
||||
Content: updateContentEncoded,
|
||||
SHA: "103ff9234cefeee5ec5361d22b49fbb04d385885",
|
||||
Operation: "update",
|
||||
ContentBase64: updateContentEncoded,
|
||||
SHA: "103ff9234cefeee5ec5361d22b49fbb04d385885",
|
||||
},
|
||||
{
|
||||
Operation: "delete",
|
||||
|
|
|
@ -125,7 +125,7 @@ func TestEmptyRepoAddFileByAPI(t *testing.T) {
|
|||
NewBranchName: "new_branch",
|
||||
Message: "init",
|
||||
},
|
||||
Content: base64.StdEncoding.EncodeToString([]byte("newly-added-api-file")),
|
||||
ContentBase64: base64.StdEncoding.EncodeToString([]byte("newly-added-api-file")),
|
||||
})
|
||||
|
||||
resp := MakeRequest(t, req, http.StatusCreated)
|
||||
|
|
|
@ -337,7 +337,7 @@ func crudActionCreateFile(t *testing.T, ctx APITestContext, user *user_model.Use
|
|||
Email: user.Email,
|
||||
},
|
||||
},
|
||||
Content: base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("This is new text for %s", path))),
|
||||
ContentBase64: base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("This is new text for %s", path))),
|
||||
}, callback...)
|
||||
}
|
||||
|
||||
|
|
|
@ -370,9 +370,9 @@ func TestConflictChecking(t *testing.T) {
|
|||
_, err = files_service.ChangeRepoFiles(git.DefaultContext, baseRepo, user, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "important_file",
|
||||
Content: "Just a non-important file",
|
||||
Operation: "create",
|
||||
TreePath: "important_file",
|
||||
ContentReader: strings.NewReader("Just a non-important file"),
|
||||
},
|
||||
},
|
||||
Message: "Add a important file",
|
||||
|
@ -385,9 +385,9 @@ func TestConflictChecking(t *testing.T) {
|
|||
_, err = files_service.ChangeRepoFiles(git.DefaultContext, baseRepo, user, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "important_file",
|
||||
Content: "Not the same content :P",
|
||||
Operation: "create",
|
||||
TreePath: "important_file",
|
||||
ContentReader: strings.NewReader("Not the same content :P"),
|
||||
},
|
||||
},
|
||||
Message: "Add a important file",
|
||||
|
|
|
@ -6,6 +6,7 @@ package integration
|
|||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -104,9 +105,9 @@ func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_mod
|
|||
_, err = files_service.ChangeRepoFiles(git.DefaultContext, baseRepo, actor, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "File_A",
|
||||
Content: "File A",
|
||||
Operation: "create",
|
||||
TreePath: "File_A",
|
||||
ContentReader: strings.NewReader("File A"),
|
||||
},
|
||||
},
|
||||
Message: "Add File A",
|
||||
|
@ -131,9 +132,9 @@ func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_mod
|
|||
_, err = files_service.ChangeRepoFiles(git.DefaultContext, headRepo, actor, &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "File_B",
|
||||
Content: "File B",
|
||||
Operation: "create",
|
||||
TreePath: "File_B",
|
||||
ContentReader: strings.NewReader("File B"),
|
||||
},
|
||||
},
|
||||
Message: "Add File on PR branch",
|
||||
|
|
|
@ -6,6 +6,7 @@ package integration
|
|||
import (
|
||||
"net/url"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -24,9 +25,9 @@ func getCreateRepoFilesOptions(repo *repo_model.Repository) *files_service.Chang
|
|||
return &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "create",
|
||||
TreePath: "new/file.txt",
|
||||
Content: "This is a NEW file",
|
||||
Operation: "create",
|
||||
TreePath: "new/file.txt",
|
||||
ContentReader: strings.NewReader("This is a NEW file"),
|
||||
},
|
||||
},
|
||||
OldBranch: repo.DefaultBranch,
|
||||
|
@ -41,10 +42,10 @@ func getUpdateRepoFilesOptions(repo *repo_model.Repository) *files_service.Chang
|
|||
return &files_service.ChangeRepoFilesOptions{
|
||||
Files: []*files_service.ChangeRepoFile{
|
||||
{
|
||||
Operation: "update",
|
||||
TreePath: "README.md",
|
||||
SHA: "4b4851ad51df6a7d9f25c979345979eaeb5b349f",
|
||||
Content: "This is UPDATED content for the README file",
|
||||
Operation: "update",
|
||||
TreePath: "README.md",
|
||||
SHA: "4b4851ad51df6a7d9f25c979345979eaeb5b349f",
|
||||
ContentReader: strings.NewReader("This is UPDATED content for the README file"),
|
||||
},
|
||||
},
|
||||
OldBranch: repo.DefaultBranch,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue