From 141d52cc0f356776bd6fa538dbda276c3ba44118 Mon Sep 17 00:00:00 2001 From: Terence Le Huu Phuong <32878496+tle-huu@users.noreply.github.com> Date: Fri, 29 May 2020 20:16:20 +0200 Subject: Add API Endpoint for Branch Creation (#11607) * [FEATURE] [API] Add Endpoint for Branch Creation Issue: https://github.com/go-gitea/gitea/issues/11376 This commit introduces an API endpoint for branch creation. The added route is POST /repos/{owner}/{repo}/branches. A JSON with the name of the new branch and the name of the old branch is required as parameters. Signed-off-by: Terence Le Huu Phuong * Put all the logic into CreateBranch and removed CreateRepoBranch * - Added the error ErrBranchDoesNotExist in error.go - Made the CreateNewBranch function return an errBranchDoesNotExist error when the OldBranch does not exist - Made the CreateBranch API function checks that the repository is not empty and that branch exists. * - Added a resetFixtures helper function in integration_test.go to fine-tune test env resetting - Added api test for CreateBranch - Used resetFixture instead of the more general prepareTestEnv in the repo_branch_test CreateBranch tests * Moved the resetFixtures call inside the loop for APICreateBranch function * Put the prepareTestEnv back in repo_branch_test * fix import order/sort api branch test Co-authored-by: zeripath --- modules/repository/branch.go | 4 +++- modules/structs/repo.go | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'modules') diff --git a/modules/repository/branch.go b/modules/repository/branch.go index 418ba25c89..94be6f0f5a 100644 --- a/modules/repository/branch.go +++ b/modules/repository/branch.go @@ -71,7 +71,9 @@ func CreateNewBranch(doer *models.User, repo *models.Repository, oldBranchName, } if !git.IsBranchExist(repo.RepoPath(), oldBranchName) { - return fmt.Errorf("OldBranch: %s does not exist. Cannot create new branch from this", oldBranchName) + return models.ErrBranchDoesNotExist{ + BranchName: oldBranchName, + } } basePath, err := models.CreateTemporaryPath("branch-maker") diff --git a/modules/structs/repo.go b/modules/structs/repo.go index 70de9b7469..832d330e74 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -160,6 +160,22 @@ type EditRepoOption struct { Archived *bool `json:"archived,omitempty"` } +// CreateBranchRepoOption options when creating a branch in a repository +// swagger:model +type CreateBranchRepoOption struct { + + // Name of the branch to create + // + // required: true + // unique: true + BranchName string `json:"new_branch_name" binding:"Required;GitRefName;MaxSize(100)"` + + // Name of the old branch to create from + // + // unique: true + OldBranchName string `json:"old_branch_name" binding:"GitRefName;MaxSize(100)"` +} + // TransferRepoOption options when transfer a repository's ownership // swagger:model type TransferRepoOption struct { -- cgit v1.2.3