From a90988d63f25f510886073f2b4f00780e775fed0 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 31 May 2023 17:07:51 +0800 Subject: [PATCH] Update repo's default branch when adding new files in an empty one (#25017) Fix #25014 Only API needs this fix. On the Web UI, users could only add new file on the default branch. --- .gitignore | 1 + services/repository/files/update.go | 16 ++++++++-------- tests/integration/empty_repo_test.go | 6 ++++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 7ae3455d469..c53caa98064 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,7 @@ cpu.out *.db *.log +*.log.*.gz /gitea /gitea-vet diff --git a/services/repository/files/update.go b/services/repository/files/update.go index 81d5e32773a..01bf2ace009 100644 --- a/services/repository/files/update.go +++ b/services/repository/files/update.go @@ -50,7 +50,7 @@ type ChangeRepoFile struct { Options *RepoFileOptions } -// UpdateRepoFilesOptions holds the repository files update options +// ChangeRepoFilesOptions holds the repository files update options type ChangeRepoFilesOptions struct { LastCommitID string OldBranch string @@ -159,7 +159,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use return nil, err } - treePaths := []string{} + var treePaths []string for _, file := range opts.Files { // If FromTreePath is not set, set it to the opts.TreePath if file.TreePath != "" && file.FromTreePath == "" { @@ -302,7 +302,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use return nil, err } default: - return nil, fmt.Errorf("Invalid file operation: %s %s, supported operations are create, update, delete", file.Operation, file.Options.treePath) + return nil, fmt.Errorf("invalid file operation: %s %s, supported operations are create, update, delete", file.Operation, file.Options.treePath) } } @@ -334,16 +334,16 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use return nil, err } - filesReponse, err := GetFilesResponseFromCommit(ctx, repo, commit, opts.NewBranch, treePaths) + filesResponse, err := GetFilesResponseFromCommit(ctx, repo, commit, opts.NewBranch, treePaths) if err != nil { return nil, err } if repo.IsEmpty { - _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false}, "is_empty") + _ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false, DefaultBranch: opts.NewBranch}, "is_empty", "default_branch") } - return filesReponse, nil + return filesResponse, nil } // handles the check for various issues for ChangeRepoFiles @@ -437,7 +437,7 @@ func handleCheckErrors(file *ChangeRepoFile, commit *git.Commit, opts *ChangeRep return nil } -// handle creating or updating a file for ChangeRepoFiles +// CreateOrUpdateFile handles creating or updating a file for ChangeRepoFiles func CreateOrUpdateFile(ctx context.Context, t *TemporaryUploadRepository, file *ChangeRepoFile, contentStore *lfs.ContentStore, repoID int64, hasOldBranch bool) error { // Get the two paths (might be the same if not moving) from the index if they exist filesInIndex, err := t.LsFiles(file.TreePath, file.FromTreePath) @@ -540,7 +540,7 @@ func CreateOrUpdateFile(ctx context.Context, t *TemporaryUploadRepository, file if !exist { if err := contentStore.Put(lfsMetaObject.Pointer, strings.NewReader(file.Content)); err != nil { if _, err2 := git_model.RemoveLFSMetaObjectByOid(ctx, repoID, lfsMetaObject.Oid); err2 != nil { - return fmt.Errorf("Error whilst removing failed inserted LFS object %s: %v (Prev Error: %w)", lfsMetaObject.Oid, err2, err) + return fmt.Errorf("unable to remove failed inserted LFS object %s: %v (Prev Error: %w)", lfsMetaObject.Oid, err2, err) } return err } diff --git a/tests/integration/empty_repo_test.go b/tests/integration/empty_repo_test.go index 73331bc9337..cfb2456223d 100644 --- a/tests/integration/empty_repo_test.go +++ b/tests/integration/empty_repo_test.go @@ -137,4 +137,10 @@ func TestEmptyRepoAddFileByAPI(t *testing.T) { req = NewRequest(t, "GET", "/user30/empty/src/branch/new_branch/new-file.txt") resp = session.MakeRequest(t, req, http.StatusOK) assert.Contains(t, resp.Body.String(), "newly-added-api-file") + + req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/user30/empty?token=%s", token)) + resp = session.MakeRequest(t, req, http.StatusOK) + var apiRepo api.Repository + DecodeJSON(t, resp, &apiRepo) + assert.Equal(t, "new_branch", apiRepo.DefaultBranch) }