-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clean-up HookPreReceive and restore functionality for pushing non-sta…
…ndard refs (#16705) * Clean-up HookPreReceive and restore functionality for pushing non-standard refs There was an inadvertent breaking change in #15629 meaning that notes refs and other git extension refs will be automatically rejected. Further following #14295 and #15629 the pre-recieve hook code is untenably long and too complex. This PR refactors the hook code and removes the incorrect forced rejection of non-standard refs. Fix #16688 Signed-off-by: Andrew Thornton <art27@cantab.net>
- Loading branch information
Showing
9 changed files
with
1,000 additions
and
780 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// Copyright 2021 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// Package private includes all internal routes. The package name internal is ideal but Golang is not allowed, so we use private as package name instead. | ||
package private | ||
|
||
import ( | ||
"fmt" | ||
"net/http" | ||
|
||
"code.gitea.io/gitea/models" | ||
gitea_context "code.gitea.io/gitea/modules/context" | ||
"code.gitea.io/gitea/modules/git" | ||
"code.gitea.io/gitea/modules/log" | ||
"code.gitea.io/gitea/modules/private" | ||
) | ||
|
||
// ________ _____ .__ __ | ||
// \______ \ _____/ ____\____ __ __| |_/ |_ | ||
// | | \_/ __ \ __\\__ \ | | \ |\ __\ | ||
// | ` \ ___/| | / __ \| | / |_| | | ||
// /_______ /\___ >__| (____ /____/|____/__| | ||
// \/ \/ \/ | ||
// __________ .__ | ||
// \______ \____________ ____ ____ | |__ | ||
// | | _/\_ __ \__ \ / \_/ ___\| | \ | ||
// | | \ | | \// __ \| | \ \___| Y \ | ||
// |______ / |__| (____ /___| /\___ >___| / | ||
// \/ \/ \/ \/ \/ | ||
|
||
// SetDefaultBranch updates the default branch | ||
func SetDefaultBranch(ctx *gitea_context.PrivateContext) { | ||
ownerName := ctx.Params(":owner") | ||
repoName := ctx.Params(":repo") | ||
branch := ctx.Params(":branch") | ||
repo, err := models.GetRepositoryByOwnerAndName(ownerName, repoName) | ||
if err != nil { | ||
log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err) | ||
ctx.JSON(http.StatusInternalServerError, private.Response{ | ||
Err: fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err), | ||
}) | ||
return | ||
} | ||
if repo.OwnerName == "" { | ||
repo.OwnerName = ownerName | ||
} | ||
|
||
repo.DefaultBranch = branch | ||
gitRepo, err := git.OpenRepository(repo.RepoPath()) | ||
if err != nil { | ||
ctx.JSON(http.StatusInternalServerError, private.Response{ | ||
Err: fmt.Sprintf("Failed to get git repository: %s/%s Error: %v", ownerName, repoName, err), | ||
}) | ||
return | ||
} | ||
if err := gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil { | ||
if !git.IsErrUnsupportedVersion(err) { | ||
gitRepo.Close() | ||
ctx.JSON(http.StatusInternalServerError, private.Response{ | ||
Err: fmt.Sprintf("Unable to set default branch on repository: %s/%s Error: %v", ownerName, repoName, err), | ||
}) | ||
return | ||
} | ||
} | ||
gitRepo.Close() | ||
|
||
if err := repo.UpdateDefaultBranch(); err != nil { | ||
ctx.JSON(http.StatusInternalServerError, private.Response{ | ||
Err: fmt.Sprintf("Unable to set default branch on repository: %s/%s Error: %v", ownerName, repoName, err), | ||
}) | ||
return | ||
} | ||
ctx.PlainText(http.StatusOK, []byte("success")) | ||
} |
Oops, something went wrong.