Merge pull request '[BUG] Workaround borked Git version' (#2335) from gusted/forgejo-git-workaround into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2335
Reviewed-by: oliverpool <oliverpool@noreply.codeberg.org>
This commit is contained in:
Gusted 2024-02-13 20:05:06 +00:00
commit 2d321d27d1
2 changed files with 27 additions and 3 deletions

View file

@ -33,8 +33,9 @@ var (
// DefaultContext is the default context to run git commands in, must be initialized by git.InitXxx // DefaultContext is the default context to run git commands in, must be initialized by git.InitXxx
DefaultContext context.Context DefaultContext context.Context
SupportProcReceive bool // >= 2.29 SupportProcReceive bool // >= 2.29
SupportHashSha256 bool // >= 2.42, SHA-256 repositories no longer an experimental curiosity SupportHashSha256 bool // >= 2.42, SHA-256 repositories no longer an experimental curiosity
InvertedGitFlushEnv bool // 2.43.1
gitVersion *version.Version gitVersion *version.Version
) )
@ -192,6 +193,8 @@ func InitFull(ctx context.Context) (err error) {
log.Warn("sha256 hash support is disabled - requires Git >= 2.42. Gogit is currently unsupported") log.Warn("sha256 hash support is disabled - requires Git >= 2.42. Gogit is currently unsupported")
} }
InvertedGitFlushEnv = CheckGitVersionEqual("2.43.1") == nil
if setting.LFS.StartServer { if setting.LFS.StartServer {
if CheckGitVersionAtLeast("2.1.2") != nil { if CheckGitVersionAtLeast("2.1.2") != nil {
return errors.New("LFS server support requires Git >= 2.1.2") return errors.New("LFS server support requires Git >= 2.1.2")
@ -320,6 +323,21 @@ func CheckGitVersionAtLeast(atLeast string) error {
return nil return nil
} }
// CheckGitVersionEqual checks if the git version is equal to the constraint version.
func CheckGitVersionEqual(equal string) error {
if _, err := loadGitVersion(); err != nil {
return err
}
atLeastVersion, err := version.NewVersion(equal)
if err != nil {
return err
}
if !gitVersion.Equal(atLeastVersion) {
return fmt.Errorf("installed git binary version %s is not equal to %s", gitVersion.Original(), equal)
}
return nil
}
func configSet(key, value string) error { func configSet(key, value string) error {
stdout, _, err := NewCommand(DefaultContext, "config", "--global", "--get").AddDynamicArguments(key).RunStdString(nil) stdout, _, err := NewCommand(DefaultContext, "config", "--global", "--get").AddDynamicArguments(key).RunStdString(nil)
if err != nil && !err.IsExitCode(1) { if err != nil && !err.IsExitCode(1) {

View file

@ -133,7 +133,13 @@ func (c *CheckAttributeReader) Init(ctx context.Context) error {
c.env = append(c.env, "GIT_WORK_TREE="+c.WorkTree) c.env = append(c.env, "GIT_WORK_TREE="+c.WorkTree)
} }
c.env = append(c.env, "GIT_FLUSH=1") // Version 2.43.1 has a bug where the behavior of `GIT_FLUSH` is flipped.
// Ref: https://lore.kernel.org/git/CABn0oJvg3M_kBW-u=j3QhKnO=6QOzk-YFTgonYw_UvFS1NTX4g@mail.gmail.com
if InvertedGitFlushEnv {
c.env = append(c.env, "GIT_FLUSH=0")
} else {
c.env = append(c.env, "GIT_FLUSH=1")
}
c.cmd.AddDynamicArguments(c.Attributes...) c.cmd.AddDynamicArguments(c.Attributes...)