1
1
mirror of https://github.com/go-gitea/gitea synced 2025-07-10 04:27:22 +00:00

pass env GNUPGHOME to git command, move the existing .gitconfig to new home, make the fix for 1.17rc more clear.

This commit is contained in:
wxiaoguang
2022-07-04 12:49:19 +08:00
parent f345b4c9df
commit 1a386b7f66
2 changed files with 69 additions and 30 deletions

View File

@ -20,6 +20,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"github.com/hashicorp/go-version"
)
@ -167,6 +168,47 @@ func InitSimple(ctx context.Context) error {
var initOnce sync.Once
func initFixGitHome117rc() error {
// Gitea 1.17-rc uses "setting.RepoRootPath" for Git HOME, which is incorrect.
// Do this check to make sure there is no legacy file in the RepoRootPath. This check might be able to be removed with 1.19 release.
// remove the auto generated git config file (it will be moved to new home)
gitConfigNewPath := filepath.Join(HomeDir(), ".gitconfig")
gitConfigLegacyPath := filepath.Join(setting.RepoRootPath, ".gitconfig")
if ok, err := util.IsExist(gitConfigLegacyPath); ok && err == nil {
if err = os.MkdirAll(HomeDir(), os.ModePerm); err != nil {
return err
}
if ok, err = util.IsExist(gitConfigNewPath); !ok && err == nil {
err = util.CopyFile(gitConfigLegacyPath, gitConfigNewPath)
} else {
err = util.CopyFile(gitConfigLegacyPath, gitConfigNewPath+".bak")
}
if err != nil {
return err
}
_ = os.Remove(gitConfigLegacyPath)
}
// remove the empty directories, if some directories are non-empty, warn users and exit
var hasCheckErr bool
for _, wellDirName := range []string{".ssh", ".gnupg"} {
checkLegacyDir := filepath.Join(setting.RepoRootPath, wellDirName)
_ = os.Remove(checkLegacyDir) // try to remove the empty dummy directory first
_, checkErr := os.Stat(checkLegacyDir) // if the directory is not empty, then it won't be removed, it should be handled manually
if checkErr == nil || !errors.Is(checkErr, os.ErrNotExist) {
log.Error(`Git HOME has been moved to [git].HOME_PATH, but there are legacy file in old place. Please backup and remove the legacy files %q`, checkLegacyDir)
hasCheckErr = true
}
}
if hasCheckErr {
log.Fatal("Please fix errors above, remove legacy files.")
}
return nil
}
// InitOnceWithSync initializes git module with version check and change global variables, sync gitconfig.
// This method will update the global variables ONLY ONCE (just like git.CheckLFSVersion -- which is not ideal too),
// otherwise there will be data-race problem at the moment.
@ -176,28 +218,12 @@ func InitOnceWithSync(ctx context.Context) (err error) {
}
initOnce.Do(func() {
err = InitSimple(ctx)
if err != nil {
if err = InitSimple(ctx); err != nil {
return
}
// Gitea 1.17-rc uses "setting.RepoRootPath" for Git HOME, which is incorrect.
// Do this check to make sure there is no legacy file in the RepoRootPath. This check might be able to be removed with 1.19 release.
var hasCheckErr bool
_ = os.Remove(filepath.Join(setting.RepoRootPath, ".gitconfig")) // remove the auto generated git config file
_ = os.Remove(filepath.Join(setting.RepoRootPath, ".ssh")) // remove the empty dummy ".ssh" directory
for _, wellKnownName := range []string{".ssh", ".gnupg"} {
checkLegacyFile := filepath.Join(setting.RepoRootPath, wellKnownName)
_, checkErr := os.Stat(checkLegacyFile)
if checkErr == nil || !errors.Is(checkErr, os.ErrNotExist) {
log.Error(`Git HOME has been moved to [git].HOME_PATH, but there are legacy file in old place. Please backup and remove the legacy files %q`, checkLegacyFile)
hasCheckErr = true
}
if err = initFixGitHome117rc(); err != nil {
return
}
if hasCheckErr {
log.Fatal("Please fix errors above, remove legacy files")
}
// end of legacy Gitea 1.17-rc check
// Since git wire protocol has been released from git v2.18
if setting.Git.EnableAutoGitWireProtocol && CheckGitVersionAtLeast("2.18") == nil {