aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-02-25 13:35:47 +0800
committerGitHub <noreply@github.com>2024-02-25 05:35:47 +0000
commit1ef87773b1e75b99b4b842303542fd17d9c2e6f7 (patch)
tree6166ed87694fc257fba7bf7cdfaad9d39eddac5a
parent4e3d81e44ee3f504f7262966533305561e04101f (diff)
downloadgitea-1ef87773b1e75b99b4b842303542fd17d9c2e6f7.tar.gz
gitea-1ef87773b1e75b99b4b842303542fd17d9c2e6f7.zip
Refactor modules/git global variables (#29376)
Move some global variables into a struct to improve maintainability
-rw-r--r--modules/git/git.go38
-rw-r--r--modules/git/repo.go2
-rw-r--r--routers/private/hook_post_receive.go2
-rw-r--r--routers/private/hook_pre_receive.go2
-rw-r--r--routers/private/hook_proc_receive.go2
-rw-r--r--routers/private/serv.go2
-rw-r--r--routers/web/misc/misc.go2
-rw-r--r--routers/web/repo/githttp.go2
8 files changed, 27 insertions, 25 deletions
diff --git a/modules/git/git.go b/modules/git/git.go
index 8621df0f49..f688ea7488 100644
--- a/modules/git/git.go
+++ b/modules/git/git.go
@@ -33,16 +33,18 @@ var (
// DefaultContext is the default context to run git commands in, must be initialized by git.InitXxx
DefaultContext context.Context
- SupportProcReceive bool // >= 2.29
- SupportHashSha256 bool // >= 2.42, SHA-256 repositories no longer an ‘experimental curiosity’
+ DefaultFeatures struct {
+ GitVersion *version.Version
- gitVersion *version.Version
+ SupportProcReceive bool // >= 2.29
+ SupportHashSha256 bool // >= 2.42, SHA-256 repositories no longer an ‘experimental curiosity’
+ }
)
// loadGitVersion tries to get the current git version and stores it into a global variable
func loadGitVersion() error {
// doesn't need RWMutex because it's executed by Init()
- if gitVersion != nil {
+ if DefaultFeatures.GitVersion != nil {
return nil
}
@@ -53,7 +55,7 @@ func loadGitVersion() error {
ver, err := parseGitVersionLine(strings.TrimSpace(stdout))
if err == nil {
- gitVersion = ver
+ DefaultFeatures.GitVersion = ver
}
return err
}
@@ -93,7 +95,7 @@ func SetExecutablePath(path string) error {
return err
}
- if gitVersion.LessThan(versionRequired) {
+ if DefaultFeatures.GitVersion.LessThan(versionRequired) {
moreHint := "get git: https://git-scm.com/download/"
if runtime.GOOS == "linux" {
// there are a lot of CentOS/RHEL users using old git, so we add a special hint for them
@@ -102,22 +104,22 @@ func SetExecutablePath(path string) error {
moreHint = "get git: https://git-scm.com/download/linux and https://ius.io"
}
}
- return fmt.Errorf("installed git version %q is not supported, Gitea requires git version >= %q, %s", gitVersion.Original(), RequiredVersion, moreHint)
+ return fmt.Errorf("installed git version %q is not supported, Gitea requires git version >= %q, %s", DefaultFeatures.GitVersion.Original(), RequiredVersion, moreHint)
}
- if err = checkGitVersionCompatibility(gitVersion); err != nil {
- return fmt.Errorf("installed git version %s has a known compatibility issue with Gitea: %w, please upgrade (or downgrade) git", gitVersion.String(), err)
+ if err = checkGitVersionCompatibility(DefaultFeatures.GitVersion); err != nil {
+ return fmt.Errorf("installed git version %s has a known compatibility issue with Gitea: %w, please upgrade (or downgrade) git", DefaultFeatures.GitVersion.String(), err)
}
return nil
}
// VersionInfo returns git version information
func VersionInfo() string {
- if gitVersion == nil {
+ if DefaultFeatures.GitVersion == nil {
return "(git not found)"
}
format := "%s"
- args := []any{gitVersion.Original()}
+ args := []any{DefaultFeatures.GitVersion.Original()}
// Since git wire protocol has been released from git v2.18
if setting.Git.EnableAutoGitWireProtocol && CheckGitVersionAtLeast("2.18") == nil {
format += ", Wire Protocol %s Enabled"
@@ -187,9 +189,9 @@ func InitFull(ctx context.Context) (err error) {
if CheckGitVersionAtLeast("2.9") == nil {
globalCommandArgs = append(globalCommandArgs, "-c", "credential.helper=")
}
- SupportProcReceive = CheckGitVersionAtLeast("2.29") == nil
- SupportHashSha256 = CheckGitVersionAtLeast("2.42") == nil && !isGogit
- if SupportHashSha256 {
+ DefaultFeatures.SupportProcReceive = CheckGitVersionAtLeast("2.29") == nil
+ DefaultFeatures.SupportHashSha256 = CheckGitVersionAtLeast("2.42") == nil && !isGogit
+ if DefaultFeatures.SupportHashSha256 {
SupportedObjectFormats = append(SupportedObjectFormats, Sha256ObjectFormat)
} else {
log.Warn("sha256 hash support is disabled - requires Git >= 2.42. Gogit is currently unsupported")
@@ -254,7 +256,7 @@ func syncGitConfig() (err error) {
}
}
- if SupportProcReceive {
+ if DefaultFeatures.SupportProcReceive {
// set support for AGit flow
if err := configAddNonExist("receive.procReceiveRefs", "refs/for"); err != nil {
return err
@@ -309,15 +311,15 @@ func syncGitConfig() (err error) {
// CheckGitVersionAtLeast check git version is at least the constraint version
func CheckGitVersionAtLeast(atLeast string) error {
- if gitVersion == nil {
+ if DefaultFeatures.GitVersion == nil {
panic("git module is not initialized") // it shouldn't happen
}
atLeastVersion, err := version.NewVersion(atLeast)
if err != nil {
return err
}
- if gitVersion.Compare(atLeastVersion) < 0 {
- return fmt.Errorf("installed git binary version %s is not at least %s", gitVersion.Original(), atLeast)
+ if DefaultFeatures.GitVersion.Compare(atLeastVersion) < 0 {
+ return fmt.Errorf("installed git binary version %s is not at least %s", DefaultFeatures.GitVersion.Original(), atLeast)
}
return nil
}
diff --git a/modules/git/repo.go b/modules/git/repo.go
index 60078f3273..cef45c6af0 100644
--- a/modules/git/repo.go
+++ b/modules/git/repo.go
@@ -101,7 +101,7 @@ func InitRepository(ctx context.Context, repoPath string, bare bool, objectForma
if !IsValidObjectFormat(objectFormatName) {
return fmt.Errorf("invalid object format: %s", objectFormatName)
}
- if SupportHashSha256 {
+ if DefaultFeatures.SupportHashSha256 {
cmd.AddOptionValues("--object-format", objectFormatName)
}
diff --git a/routers/private/hook_post_receive.go b/routers/private/hook_post_receive.go
index 1b274ae154..8b954a8130 100644
--- a/routers/private/hook_post_receive.go
+++ b/routers/private/hook_post_receive.go
@@ -124,7 +124,7 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
// post update for agit pull request
// FIXME: use pr.Flow to test whether it's an Agit PR or a GH PR
- if git.SupportProcReceive && refFullName.IsPull() {
+ if git.DefaultFeatures.SupportProcReceive && refFullName.IsPull() {
if repo == nil {
repo = loadRepository(ctx, ownerName, repoName)
if ctx.Written() {
diff --git a/routers/private/hook_pre_receive.go b/routers/private/hook_pre_receive.go
index f28ae4c0eb..ad52f35084 100644
--- a/routers/private/hook_pre_receive.go
+++ b/routers/private/hook_pre_receive.go
@@ -122,7 +122,7 @@ func HookPreReceive(ctx *gitea_context.PrivateContext) {
preReceiveBranch(ourCtx, oldCommitID, newCommitID, refFullName)
case refFullName.IsTag():
preReceiveTag(ourCtx, oldCommitID, newCommitID, refFullName)
- case git.SupportProcReceive && refFullName.IsFor():
+ case git.DefaultFeatures.SupportProcReceive && refFullName.IsFor():
preReceiveFor(ourCtx, oldCommitID, newCommitID, refFullName)
default:
ourCtx.AssertCanWriteCode()
diff --git a/routers/private/hook_proc_receive.go b/routers/private/hook_proc_receive.go
index 5577120770..5805202bb5 100644
--- a/routers/private/hook_proc_receive.go
+++ b/routers/private/hook_proc_receive.go
@@ -18,7 +18,7 @@ import (
// HookProcReceive proc-receive hook - only handles agit Proc-Receive requests at present
func HookProcReceive(ctx *gitea_context.PrivateContext) {
opts := web.GetForm(ctx).(*private.HookOptions)
- if !git.SupportProcReceive {
+ if !git.DefaultFeatures.SupportProcReceive {
ctx.Status(http.StatusNotFound)
return
}
diff --git a/routers/private/serv.go b/routers/private/serv.go
index 00731947a5..3812ccb52b 100644
--- a/routers/private/serv.go
+++ b/routers/private/serv.go
@@ -297,7 +297,7 @@ func ServCommand(ctx *context.PrivateContext) {
}
} else {
// Because of the special ref "refs/for" we will need to delay write permission check
- if git.SupportProcReceive && unitType == unit.TypeCode {
+ if git.DefaultFeatures.SupportProcReceive && unitType == unit.TypeCode {
mode = perm.AccessModeRead
}
diff --git a/routers/web/misc/misc.go b/routers/web/misc/misc.go
index 54c93763f6..ac5496ce91 100644
--- a/routers/web/misc/misc.go
+++ b/routers/web/misc/misc.go
@@ -15,7 +15,7 @@ import (
)
func SSHInfo(rw http.ResponseWriter, req *http.Request) {
- if !git.SupportProcReceive {
+ if !git.DefaultFeatures.SupportProcReceive {
rw.WriteHeader(http.StatusNotFound)
return
}
diff --git a/routers/web/repo/githttp.go b/routers/web/repo/githttp.go
index f52abbfb02..27c7f4961d 100644
--- a/routers/web/repo/githttp.go
+++ b/routers/web/repo/githttp.go
@@ -183,7 +183,7 @@ func httpBase(ctx *context.Context) *serviceHandler {
if repoExist {
// Because of special ref "refs/for" .. , need delay write permission check
- if git.SupportProcReceive {
+ if git.DefaultFeatures.SupportProcReceive {
accessMode = perm.AccessModeRead
}