mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	- name: new parameter in CreateForkOption to give the forked repository (#18066)
a custom name, intended to be used when there's a name conflict - When a fork request results in a name conflict, HTTP 409: Conflict is returned instead of 500 - API documentation for the above mentioned changes Signed-off-by: realaravinth <realaravinth@batsense.net> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							532383d7dd
						
					
				
				
					commit
					c7151c2fb6
				
			@@ -8,4 +8,6 @@ package structs
 | 
			
		||||
type CreateForkOption struct {
 | 
			
		||||
	// organization name, if forking into an organization
 | 
			
		||||
	Organization *string `json:"organization"`
 | 
			
		||||
	// name of the forked repository
 | 
			
		||||
	Name *string `json:"name"`
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -97,6 +97,8 @@ func CreateFork(ctx *context.APIContext) {
 | 
			
		||||
	//     "$ref": "#/responses/Repository"
 | 
			
		||||
	//   "403":
 | 
			
		||||
	//     "$ref": "#/responses/forbidden"
 | 
			
		||||
	//   "409":
 | 
			
		||||
	//     description: The repository with the same name already exists.
 | 
			
		||||
	//   "422":
 | 
			
		||||
	//     "$ref": "#/responses/validationError"
 | 
			
		||||
 | 
			
		||||
@@ -126,13 +128,24 @@ func CreateFork(ctx *context.APIContext) {
 | 
			
		||||
		forker = org.AsUser()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var name string
 | 
			
		||||
	if form.Name == nil {
 | 
			
		||||
		name = repo.Name
 | 
			
		||||
	} else {
 | 
			
		||||
		name = *form.Name
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fork, err := repo_service.ForkRepository(ctx.User, forker, repo_service.ForkRepoOptions{
 | 
			
		||||
		BaseRepo:    repo,
 | 
			
		||||
		Name:        repo.Name,
 | 
			
		||||
		Name:        name,
 | 
			
		||||
		Description: repo.Description,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
 | 
			
		||||
		if repo_model.IsErrRepoAlreadyExist(err) {
 | 
			
		||||
			ctx.Error(http.StatusConflict, "ForkRepository", err)
 | 
			
		||||
		} else {
 | 
			
		||||
			ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
 | 
			
		||||
		}
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3509,6 +3509,9 @@
 | 
			
		||||
          "403": {
 | 
			
		||||
            "$ref": "#/responses/forbidden"
 | 
			
		||||
          },
 | 
			
		||||
          "409": {
 | 
			
		||||
            "description": "The repository with the same name already exists."
 | 
			
		||||
          },
 | 
			
		||||
          "422": {
 | 
			
		||||
            "$ref": "#/responses/validationError"
 | 
			
		||||
          }
 | 
			
		||||
@@ -13376,6 +13379,11 @@
 | 
			
		||||
      "description": "CreateForkOption options for creating a fork",
 | 
			
		||||
      "type": "object",
 | 
			
		||||
      "properties": {
 | 
			
		||||
        "name": {
 | 
			
		||||
          "description": "name of the forked repository",
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "Name"
 | 
			
		||||
        },
 | 
			
		||||
        "organization": {
 | 
			
		||||
          "description": "organization name, if forking into an organization",
 | 
			
		||||
          "type": "string",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user