mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	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.
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -47,6 +47,7 @@ cpu.out | |||||||
|  |  | ||||||
| *.db | *.db | ||||||
| *.log | *.log | ||||||
|  | *.log.*.gz | ||||||
|  |  | ||||||
| /gitea | /gitea | ||||||
| /gitea-vet | /gitea-vet | ||||||
|   | |||||||
| @@ -50,7 +50,7 @@ type ChangeRepoFile struct { | |||||||
| 	Options      *RepoFileOptions | 	Options      *RepoFileOptions | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdateRepoFilesOptions holds the repository files update options | // ChangeRepoFilesOptions holds the repository files update options | ||||||
| type ChangeRepoFilesOptions struct { | type ChangeRepoFilesOptions struct { | ||||||
| 	LastCommitID string | 	LastCommitID string | ||||||
| 	OldBranch    string | 	OldBranch    string | ||||||
| @@ -159,7 +159,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use | |||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	treePaths := []string{} | 	var treePaths []string | ||||||
| 	for _, file := range opts.Files { | 	for _, file := range opts.Files { | ||||||
| 		// If FromTreePath is not set, set it to the opts.TreePath | 		// If FromTreePath is not set, set it to the opts.TreePath | ||||||
| 		if file.TreePath != "" && file.FromTreePath == "" { | 		if file.TreePath != "" && file.FromTreePath == "" { | ||||||
| @@ -302,7 +302,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use | |||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
| 		default: | 		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 | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	filesReponse, err := GetFilesResponseFromCommit(ctx, repo, commit, opts.NewBranch, treePaths) | 	filesResponse, err := GetFilesResponseFromCommit(ctx, repo, commit, opts.NewBranch, treePaths) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if repo.IsEmpty { | 	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 | // handles the check for various issues for ChangeRepoFiles | ||||||
| @@ -437,7 +437,7 @@ func handleCheckErrors(file *ChangeRepoFile, commit *git.Commit, opts *ChangeRep | |||||||
| 	return nil | 	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 { | 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 | 	// 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) | 	filesInIndex, err := t.LsFiles(file.TreePath, file.FromTreePath) | ||||||
| @@ -540,7 +540,7 @@ func CreateOrUpdateFile(ctx context.Context, t *TemporaryUploadRepository, file | |||||||
| 		if !exist { | 		if !exist { | ||||||
| 			if err := contentStore.Put(lfsMetaObject.Pointer, strings.NewReader(file.Content)); err != nil { | 			if err := contentStore.Put(lfsMetaObject.Pointer, strings.NewReader(file.Content)); err != nil { | ||||||
| 				if _, err2 := git_model.RemoveLFSMetaObjectByOid(ctx, repoID, lfsMetaObject.Oid); err2 != 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 | 				return err | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -137,4 +137,10 @@ func TestEmptyRepoAddFileByAPI(t *testing.T) { | |||||||
| 	req = NewRequest(t, "GET", "/user30/empty/src/branch/new_branch/new-file.txt") | 	req = NewRequest(t, "GET", "/user30/empty/src/branch/new_branch/new-file.txt") | ||||||
| 	resp = session.MakeRequest(t, req, http.StatusOK) | 	resp = session.MakeRequest(t, req, http.StatusOK) | ||||||
| 	assert.Contains(t, resp.Body.String(), "newly-added-api-file") | 	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) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user