mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Backport #13511 Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		| @@ -251,3 +251,61 @@ func (ctx *APIContext) NotFound(objs ...interface{}) { | |||||||
| 		"errors":            errors, | 		"errors":            errors, | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // RepoRefForAPI handles repository reference names when the ref name is not explicitly given | ||||||
|  | func RepoRefForAPI() macaron.Handler { | ||||||
|  | 	return func(ctx *APIContext) { | ||||||
|  | 		// Empty repository does not have reference information. | ||||||
|  | 		if ctx.Repo.Repository.IsEmpty { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var err error | ||||||
|  |  | ||||||
|  | 		if ctx.Repo.GitRepo == nil { | ||||||
|  | 			repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) | ||||||
|  | 			ctx.Repo.GitRepo, err = git.OpenRepository(repoPath) | ||||||
|  | 			if err != nil { | ||||||
|  | 				ctx.InternalServerError(err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			// We opened it, we should close it | ||||||
|  | 			defer func() { | ||||||
|  | 				// If it's been set to nil then assume someone else has closed it. | ||||||
|  | 				if ctx.Repo.GitRepo != nil { | ||||||
|  | 					ctx.Repo.GitRepo.Close() | ||||||
|  | 				} | ||||||
|  | 			}() | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		refName := getRefName(ctx.Context, RepoRefAny) | ||||||
|  |  | ||||||
|  | 		if ctx.Repo.GitRepo.IsBranchExist(refName) { | ||||||
|  | 			ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(refName) | ||||||
|  | 			if err != nil { | ||||||
|  | 				ctx.InternalServerError(err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() | ||||||
|  | 		} else if ctx.Repo.GitRepo.IsTagExist(refName) { | ||||||
|  | 			ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetTagCommit(refName) | ||||||
|  | 			if err != nil { | ||||||
|  | 				ctx.InternalServerError(err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() | ||||||
|  | 		} else if len(refName) == 40 { | ||||||
|  | 			ctx.Repo.CommitID = refName | ||||||
|  | 			ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommit(refName) | ||||||
|  | 			if err != nil { | ||||||
|  | 				ctx.NotFound("GetCommit", err) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			ctx.NotFound(fmt.Errorf("not exist: '%s'", ctx.Params("*"))) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		ctx.Next() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
| @@ -690,7 +690,6 @@ func RepoRefByType(refType RepoRefType) macaron.Handler { | |||||||
| 			err     error | 			err     error | ||||||
| 		) | 		) | ||||||
|  |  | ||||||
| 		// For API calls. |  | ||||||
| 		if ctx.Repo.GitRepo == nil { | 		if ctx.Repo.GitRepo == nil { | ||||||
| 			repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) | 			repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) | ||||||
| 			ctx.Repo.GitRepo, err = git.OpenRepository(repoPath) | 			ctx.Repo.GitRepo, err = git.OpenRepository(repoPath) | ||||||
| @@ -759,7 +758,7 @@ func RepoRefByType(refType RepoRefType) macaron.Handler { | |||||||
|  |  | ||||||
| 				ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommit(refName) | 				ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommit(refName) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					ctx.NotFound("GetCommit", nil) | 					ctx.NotFound("GetCommit", err) | ||||||
| 					return | 					return | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
|   | |||||||
| @@ -184,14 +184,14 @@ func reqToken() macaron.Handler { | |||||||
| 			ctx.RequireCSRF() | 			ctx.RequireCSRF() | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		ctx.Context.Error(http.StatusUnauthorized) | 		ctx.Error(http.StatusUnauthorized, "reqToken", "token is required") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func reqBasicAuth() macaron.Handler { | func reqBasicAuth() macaron.Handler { | ||||||
| 	return func(ctx *context.APIContext) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.Context.IsBasicAuth { | 		if !ctx.Context.IsBasicAuth { | ||||||
| 			ctx.Context.Error(http.StatusUnauthorized) | 			ctx.Error(http.StatusUnauthorized, "reqBasicAuth", "basic auth required") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		ctx.CheckForOTP() | 		ctx.CheckForOTP() | ||||||
| @@ -200,9 +200,9 @@ func reqBasicAuth() macaron.Handler { | |||||||
|  |  | ||||||
| // reqSiteAdmin user should be the site admin | // reqSiteAdmin user should be the site admin | ||||||
| func reqSiteAdmin() macaron.Handler { | func reqSiteAdmin() macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqSiteAdmin", "user should be the site admin") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -210,9 +210,9 @@ func reqSiteAdmin() macaron.Handler { | |||||||
|  |  | ||||||
| // reqOwner user should be the owner of the repo or site admin. | // reqOwner user should be the owner of the repo or site admin. | ||||||
| func reqOwner() macaron.Handler { | func reqOwner() macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserRepoOwner() && !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserRepoOwner() && !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqOwner", "user should be the owner of the repo") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -220,9 +220,9 @@ func reqOwner() macaron.Handler { | |||||||
|  |  | ||||||
| // reqAdmin user should be an owner or a collaborator with admin write of a repository, or site admin | // reqAdmin user should be an owner or a collaborator with admin write of a repository, or site admin | ||||||
| func reqAdmin() macaron.Handler { | func reqAdmin() macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqAdmin", "user should be an owner or a collaborator with admin write of a repository") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -230,9 +230,9 @@ func reqAdmin() macaron.Handler { | |||||||
|  |  | ||||||
| // reqRepoWriter user should have a permission to write to a repo, or be a site admin | // reqRepoWriter user should have a permission to write to a repo, or be a site admin | ||||||
| func reqRepoWriter(unitTypes ...models.UnitType) macaron.Handler { | func reqRepoWriter(unitTypes ...models.UnitType) macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserRepoWriter(unitTypes) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserRepoWriter(unitTypes) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqRepoWriter", "user should have a permission to write to a repo") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -240,9 +240,9 @@ func reqRepoWriter(unitTypes ...models.UnitType) macaron.Handler { | |||||||
|  |  | ||||||
| // reqRepoReader user should have specific read permission or be a repo admin or a site admin | // reqRepoReader user should have specific read permission or be a repo admin or a site admin | ||||||
| func reqRepoReader(unitType models.UnitType) macaron.Handler { | func reqRepoReader(unitType models.UnitType) macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserRepoReaderSpecific(unitType) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserRepoReaderSpecific(unitType) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqRepoReader", "user should have specific read permission or be a repo admin or a site admin") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -250,9 +250,9 @@ func reqRepoReader(unitType models.UnitType) macaron.Handler { | |||||||
|  |  | ||||||
| // reqAnyRepoReader user should have any permission to read repository or permissions of site admin | // reqAnyRepoReader user should have any permission to read repository or permissions of site admin | ||||||
| func reqAnyRepoReader() macaron.Handler { | func reqAnyRepoReader() macaron.Handler { | ||||||
| 	return func(ctx *context.Context) { | 	return func(ctx *context.APIContext) { | ||||||
| 		if !ctx.IsUserRepoReaderAny() && !ctx.IsUserSiteAdmin() { | 		if !ctx.IsUserRepoReaderAny() && !ctx.IsUserSiteAdmin() { | ||||||
| 			ctx.Error(http.StatusForbidden) | 			ctx.Error(http.StatusForbidden, "reqAnyRepoReader", "user should have any permission to read repository or permissions of site admin") | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -495,7 +495,6 @@ func mustNotBeArchived(ctx *context.APIContext) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // RegisterRoutes registers all v1 APIs routes to web application. | // RegisterRoutes registers all v1 APIs routes to web application. | ||||||
| // FIXME: custom form error response |  | ||||||
| func RegisterRoutes(m *macaron.Macaron) { | func RegisterRoutes(m *macaron.Macaron) { | ||||||
| 	bind := binding.Bind | 	bind := binding.Bind | ||||||
|  |  | ||||||
| @@ -628,7 +627,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 			m.Group("/:username/:reponame", func() { | 			m.Group("/:username/:reponame", func() { | ||||||
| 				m.Combo("").Get(reqAnyRepoReader(), repo.Get). | 				m.Combo("").Get(reqAnyRepoReader(), repo.Get). | ||||||
| 					Delete(reqToken(), reqOwner(), repo.Delete). | 					Delete(reqToken(), reqOwner(), repo.Delete). | ||||||
| 					Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), context.RepoRef(), repo.Edit) | 					Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), context.RepoRefForAPI(), repo.Edit) | ||||||
| 				m.Post("/transfer", reqOwner(), bind(api.TransferRepoOption{}), repo.Transfer) | 				m.Post("/transfer", reqOwner(), bind(api.TransferRepoOption{}), repo.Transfer) | ||||||
| 				m.Combo("/notifications"). | 				m.Combo("/notifications"). | ||||||
| 					Get(reqToken(), notify.ListRepoNotifications). | 					Get(reqToken(), notify.ListRepoNotifications). | ||||||
| @@ -640,7 +639,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 						m.Combo("").Get(repo.GetHook). | 						m.Combo("").Get(repo.GetHook). | ||||||
| 							Patch(bind(api.EditHookOption{}), repo.EditHook). | 							Patch(bind(api.EditHookOption{}), repo.EditHook). | ||||||
| 							Delete(repo.DeleteHook) | 							Delete(repo.DeleteHook) | ||||||
| 						m.Post("/tests", context.RepoRef(), repo.TestHook) | 						m.Post("/tests", context.RepoRefForAPI(), repo.TestHook) | ||||||
| 					}) | 					}) | ||||||
| 					m.Group("/git", func() { | 					m.Group("/git", func() { | ||||||
| 						m.Combo("").Get(repo.ListGitHooks) | 						m.Combo("").Get(repo.ListGitHooks) | ||||||
| @@ -657,14 +656,14 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 						Put(reqAdmin(), bind(api.AddCollaboratorOption{}), repo.AddCollaborator). | 						Put(reqAdmin(), bind(api.AddCollaboratorOption{}), repo.AddCollaborator). | ||||||
| 						Delete(reqAdmin(), repo.DeleteCollaborator) | 						Delete(reqAdmin(), repo.DeleteCollaborator) | ||||||
| 				}, reqToken()) | 				}, reqToken()) | ||||||
| 				m.Get("/raw/*", context.RepoRefByType(context.RepoRefAny), reqRepoReader(models.UnitTypeCode), repo.GetRawFile) | 				m.Get("/raw/*", context.RepoRefForAPI(), reqRepoReader(models.UnitTypeCode), repo.GetRawFile) | ||||||
| 				m.Get("/archive/*", reqRepoReader(models.UnitTypeCode), repo.GetArchive) | 				m.Get("/archive/*", reqRepoReader(models.UnitTypeCode), repo.GetArchive) | ||||||
| 				m.Combo("/forks").Get(repo.ListForks). | 				m.Combo("/forks").Get(repo.ListForks). | ||||||
| 					Post(reqToken(), reqRepoReader(models.UnitTypeCode), bind(api.CreateForkOption{}), repo.CreateFork) | 					Post(reqToken(), reqRepoReader(models.UnitTypeCode), bind(api.CreateForkOption{}), repo.CreateFork) | ||||||
| 				m.Group("/branches", func() { | 				m.Group("/branches", func() { | ||||||
| 					m.Get("", repo.ListBranches) | 					m.Get("", repo.ListBranches) | ||||||
| 					m.Get("/*", context.RepoRefByType(context.RepoRefBranch), repo.GetBranch) | 					m.Get("/*", repo.GetBranch) | ||||||
| 					m.Delete("/*", reqRepoWriter(models.UnitTypeCode), context.RepoRefByType(context.RepoRefBranch), repo.DeleteBranch) | 					m.Delete("/*", context.ReferencesGitRepo(false), reqRepoWriter(models.UnitTypeCode), repo.DeleteBranch) | ||||||
| 				}, reqRepoReader(models.UnitTypeCode)) | 				}, reqRepoReader(models.UnitTypeCode)) | ||||||
| 				m.Group("/branch_protections", func() { | 				m.Group("/branch_protections", func() { | ||||||
| 					m.Get("", repo.ListBranchProtections) | 					m.Get("", repo.ListBranchProtections) | ||||||
| @@ -785,7 +784,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 					}) | 					}) | ||||||
| 				}, reqRepoReader(models.UnitTypeReleases)) | 				}, reqRepoReader(models.UnitTypeReleases)) | ||||||
| 				m.Post("/mirror-sync", reqToken(), reqRepoWriter(models.UnitTypeCode), repo.MirrorSync) | 				m.Post("/mirror-sync", reqToken(), reqRepoWriter(models.UnitTypeCode), repo.MirrorSync) | ||||||
| 				m.Get("/editorconfig/:filename", context.RepoRef(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig) | 				m.Get("/editorconfig/:filename", context.RepoRefForAPI(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig) | ||||||
| 				m.Group("/pulls", func() { | 				m.Group("/pulls", func() { | ||||||
| 					m.Combo("").Get(bind(api.ListPullRequestsOptions{}), repo.ListPullRequests). | 					m.Combo("").Get(bind(api.ListPullRequestsOptions{}), repo.ListPullRequests). | ||||||
| 						Post(reqToken(), mustNotBeArchived, bind(api.CreatePullRequestOption{}), repo.CreatePullRequest) | 						Post(reqToken(), mustNotBeArchived, bind(api.CreatePullRequestOption{}), repo.CreatePullRequest) | ||||||
| @@ -827,9 +826,9 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 					}) | 					}) | ||||||
| 					m.Get("/refs", repo.GetGitAllRefs) | 					m.Get("/refs", repo.GetGitAllRefs) | ||||||
| 					m.Get("/refs/*", repo.GetGitRefs) | 					m.Get("/refs/*", repo.GetGitRefs) | ||||||
| 					m.Get("/trees/:sha", context.RepoRef(), repo.GetTree) | 					m.Get("/trees/:sha", context.RepoRefForAPI(), repo.GetTree) | ||||||
| 					m.Get("/blobs/:sha", context.RepoRef(), repo.GetBlob) | 					m.Get("/blobs/:sha", context.RepoRefForAPI(), repo.GetBlob) | ||||||
| 					m.Get("/tags/:sha", context.RepoRef(), repo.GetTag) | 					m.Get("/tags/:sha", context.RepoRefForAPI(), repo.GetTag) | ||||||
| 				}, reqRepoReader(models.UnitTypeCode)) | 				}, reqRepoReader(models.UnitTypeCode)) | ||||||
| 				m.Group("/contents", func() { | 				m.Group("/contents", func() { | ||||||
| 					m.Get("", repo.GetContentsList) | 					m.Get("", repo.GetContentsList) | ||||||
|   | |||||||
| @@ -45,15 +45,12 @@ func GetBranch(ctx *context.APIContext) { | |||||||
| 	// responses: | 	// responses: | ||||||
| 	//   "200": | 	//   "200": | ||||||
| 	//     "$ref": "#/responses/Branch" | 	//     "$ref": "#/responses/Branch" | ||||||
|  | 	//   "404": | ||||||
|  | 	//     "$ref": "#/responses/notFound" | ||||||
|  |  | ||||||
| 	if ctx.Repo.TreePath != "" { | 	branchName := ctx.Params("*") | ||||||
| 		// if TreePath != "", then URL contained extra slashes |  | ||||||
| 		// (i.e. "master/subbranch" instead of "master"), so branch does | 	branch, err := repo_module.GetBranch(ctx.Repo.Repository, branchName) | ||||||
| 		// not exist |  | ||||||
| 		ctx.NotFound() |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	branch, err := repo_module.GetBranch(ctx.Repo.Repository, ctx.Repo.BranchName) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if git.IsErrBranchNotExist(err) { | 		if git.IsErrBranchNotExist(err) { | ||||||
| 			ctx.NotFound(err) | 			ctx.NotFound(err) | ||||||
| @@ -69,7 +66,7 @@ func GetBranch(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	branchProtection, err := ctx.Repo.Repository.GetBranchProtection(ctx.Repo.BranchName) | 	branchProtection, err := ctx.Repo.Repository.GetBranchProtection(branchName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetBranchProtection", err) | 		ctx.Error(http.StatusInternalServerError, "GetBranchProtection", err) | ||||||
| 		return | 		return | ||||||
| @@ -112,21 +109,17 @@ func DeleteBranch(ctx *context.APIContext) { | |||||||
| 	//     "$ref": "#/responses/empty" | 	//     "$ref": "#/responses/empty" | ||||||
| 	//   "403": | 	//   "403": | ||||||
| 	//     "$ref": "#/responses/error" | 	//     "$ref": "#/responses/error" | ||||||
|  | 	//   "404": | ||||||
|  | 	//     "$ref": "#/responses/notFound" | ||||||
|  |  | ||||||
| 	if ctx.Repo.TreePath != "" { | 	branchName := ctx.Params("*") | ||||||
| 		// if TreePath != "", then URL contained extra slashes |  | ||||||
| 		// (i.e. "master/subbranch" instead of "master"), so branch does |  | ||||||
| 		// not exist |  | ||||||
| 		ctx.NotFound() |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if ctx.Repo.Repository.DefaultBranch == ctx.Repo.BranchName { | 	if ctx.Repo.Repository.DefaultBranch == branchName { | ||||||
| 		ctx.Error(http.StatusForbidden, "DefaultBranch", fmt.Errorf("can not delete default branch")) | 		ctx.Error(http.StatusForbidden, "DefaultBranch", fmt.Errorf("can not delete default branch")) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	isProtected, err := ctx.Repo.Repository.IsProtectedBranch(ctx.Repo.BranchName, ctx.User) | 	isProtected, err := ctx.Repo.Repository.IsProtectedBranch(branchName, ctx.User) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.InternalServerError(err) | 		ctx.InternalServerError(err) | ||||||
| 		return | 		return | ||||||
| @@ -136,7 +129,7 @@ func DeleteBranch(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	branch, err := repo_module.GetBranch(ctx.Repo.Repository, ctx.Repo.BranchName) | 	branch, err := repo_module.GetBranch(ctx.Repo.Repository, branchName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if git.IsErrBranchNotExist(err) { | 		if git.IsErrBranchNotExist(err) { | ||||||
| 			ctx.NotFound(err) | 			ctx.NotFound(err) | ||||||
| @@ -152,7 +145,7 @@ func DeleteBranch(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := ctx.Repo.GitRepo.DeleteBranch(ctx.Repo.BranchName, git.DeleteBranchOptions{ | 	if err := ctx.Repo.GitRepo.DeleteBranch(branchName, git.DeleteBranchOptions{ | ||||||
| 		Force: true, | 		Force: true, | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "DeleteBranch", err) | 		ctx.Error(http.StatusInternalServerError, "DeleteBranch", err) | ||||||
| @@ -164,7 +157,7 @@ func DeleteBranch(ctx *context.APIContext) { | |||||||
| 		ctx.Repo.Repository, | 		ctx.Repo.Repository, | ||||||
| 		ctx.Repo.BranchName, | 		ctx.Repo.BranchName, | ||||||
| 		repofiles.PushUpdateOptions{ | 		repofiles.PushUpdateOptions{ | ||||||
| 			RefFullName:  git.BranchPrefix + ctx.Repo.BranchName, | 			RefFullName:  git.BranchPrefix + branchName, | ||||||
| 			OldCommitID:  c.ID.String(), | 			OldCommitID:  c.ID.String(), | ||||||
| 			NewCommitID:  git.EmptySHA, | 			NewCommitID:  git.EmptySHA, | ||||||
| 			PusherID:     ctx.User.ID, | 			PusherID:     ctx.User.ID, | ||||||
| @@ -175,7 +168,7 @@ func DeleteBranch(ctx *context.APIContext) { | |||||||
| 		log.Error("Update: %v", err) | 		log.Error("Update: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := ctx.Repo.Repository.AddDeletedBranch(ctx.Repo.BranchName, c.ID.String(), ctx.User.ID); err != nil { | 	if err := ctx.Repo.Repository.AddDeletedBranch(branchName, c.ID.String(), ctx.User.ID); err != nil { | ||||||
| 		log.Warn("AddDeletedBranch: %v", err) | 		log.Warn("AddDeletedBranch: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2318,6 +2318,9 @@ | |||||||
|         "responses": { |         "responses": { | ||||||
|           "200": { |           "200": { | ||||||
|             "$ref": "#/responses/Branch" |             "$ref": "#/responses/Branch" | ||||||
|  |           }, | ||||||
|  |           "404": { | ||||||
|  |             "$ref": "#/responses/notFound" | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
| @@ -2359,6 +2362,9 @@ | |||||||
|           }, |           }, | ||||||
|           "403": { |           "403": { | ||||||
|             "$ref": "#/responses/error" |             "$ref": "#/responses/error" | ||||||
|  |           }, | ||||||
|  |           "404": { | ||||||
|  |             "$ref": "#/responses/notFound" | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user