mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 09:44:21 +00:00 
			
		
		
		
	Return 409 when creating repo if it already exists. (#6330)
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							7780ea8890
						
					
				
				
					commit
					583968f274
				
			@@ -6,7 +6,10 @@ package integrations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
@@ -291,6 +294,44 @@ func TestAPIRepoMigrate(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPIRepoMigrateConflict(t *testing.T) {
 | 
				
			||||||
 | 
						onGiteaRun(t, testAPIRepoMigrateConflict)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func testAPIRepoMigrateConflict(t *testing.T, u *url.URL) {
 | 
				
			||||||
 | 
						username := "user2"
 | 
				
			||||||
 | 
						baseAPITestContext := NewAPITestContext(t, username, "repo1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u.Path = baseAPITestContext.GitPath()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.Run("Existing", func(t *testing.T) {
 | 
				
			||||||
 | 
							httpContext := baseAPITestContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							httpContext.Reponame = "repo-tmp-17"
 | 
				
			||||||
 | 
							dstPath, err := ioutil.TempDir("", httpContext.Reponame)
 | 
				
			||||||
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
							defer os.RemoveAll(dstPath)
 | 
				
			||||||
 | 
							t.Run("CreateRepo", doAPICreateRepository(httpContext, false))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							user, err := models.GetUserByName(httpContext.Username)
 | 
				
			||||||
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
							userID := user.ID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cloneURL := "https://github.com/go-gitea/git.git"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							req := NewRequestWithJSON(t, "POST", "/api/v1/repos/migrate?token="+httpContext.Token,
 | 
				
			||||||
 | 
								&api.MigrateRepoOption{
 | 
				
			||||||
 | 
									CloneAddr: cloneURL,
 | 
				
			||||||
 | 
									UID:       int(userID),
 | 
				
			||||||
 | 
									RepoName:  httpContext.Reponame,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							resp := httpContext.Session.MakeRequest(t, req, http.StatusConflict)
 | 
				
			||||||
 | 
							respJSON := map[string]string{}
 | 
				
			||||||
 | 
							DecodeJSON(t, resp, &respJSON)
 | 
				
			||||||
 | 
							assert.Equal(t, respJSON["message"], "The repository with the same name already exists.")
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIOrgRepoCreate(t *testing.T) {
 | 
					func TestAPIOrgRepoCreate(t *testing.T) {
 | 
				
			||||||
	testCases := []struct {
 | 
						testCases := []struct {
 | 
				
			||||||
		ctxUserID         int64
 | 
							ctxUserID         int64
 | 
				
			||||||
@@ -313,3 +354,33 @@ func TestAPIOrgRepoCreate(t *testing.T) {
 | 
				
			|||||||
		session.MakeRequest(t, req, testCase.expectedStatus)
 | 
							session.MakeRequest(t, req, testCase.expectedStatus)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPIRepoCreateConflict(t *testing.T) {
 | 
				
			||||||
 | 
						onGiteaRun(t, testAPIRepoCreateConflict)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func testAPIRepoCreateConflict(t *testing.T, u *url.URL) {
 | 
				
			||||||
 | 
						username := "user2"
 | 
				
			||||||
 | 
						baseAPITestContext := NewAPITestContext(t, username, "repo1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u.Path = baseAPITestContext.GitPath()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.Run("Existing", func(t *testing.T) {
 | 
				
			||||||
 | 
							httpContext := baseAPITestContext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							httpContext.Reponame = "repo-tmp-17"
 | 
				
			||||||
 | 
							dstPath, err := ioutil.TempDir("", httpContext.Reponame)
 | 
				
			||||||
 | 
							assert.NoError(t, err)
 | 
				
			||||||
 | 
							defer os.RemoveAll(dstPath)
 | 
				
			||||||
 | 
							t.Run("CreateRepo", doAPICreateRepository(httpContext, false))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							req := NewRequestWithJSON(t, "POST", "/api/v1/user/repos?token="+httpContext.Token,
 | 
				
			||||||
 | 
								&api.CreateRepoOption{
 | 
				
			||||||
 | 
									Name: httpContext.Reponame,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							resp := httpContext.Session.MakeRequest(t, req, http.StatusConflict)
 | 
				
			||||||
 | 
							respJSON := map[string]string{}
 | 
				
			||||||
 | 
							DecodeJSON(t, resp, &respJSON)
 | 
				
			||||||
 | 
							assert.Equal(t, respJSON["message"], "The repository with the same name already exists.")
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -226,8 +226,9 @@ func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateR
 | 
				
			|||||||
		AutoInit:    opt.AutoInit,
 | 
							AutoInit:    opt.AutoInit,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if models.IsErrRepoAlreadyExist(err) ||
 | 
							if models.IsErrRepoAlreadyExist(err) {
 | 
				
			||||||
			models.IsErrNameReserved(err) ||
 | 
								ctx.Error(409, "", "The repository with the same name already exists.")
 | 
				
			||||||
 | 
							} else if models.IsErrNameReserved(err) ||
 | 
				
			||||||
			models.IsErrNamePatternNotAllowed(err) {
 | 
								models.IsErrNamePatternNotAllowed(err) {
 | 
				
			||||||
			ctx.Error(422, "", err)
 | 
								ctx.Error(422, "", err)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user