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>tags/v1.16.0-rc1
@@ -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", |