From 757b4c17e900f1d11a81bc9467d90e6c245ee8f2 Mon Sep 17 00:00:00 2001 From: Philip Peterson Date: Mon, 13 Mar 2023 00:51:07 -0700 Subject: Support reflogs (#22451) This PR adds support for reflogs on all repositories. It does this by adding a global configuration entry. Implements #14865 --------- Signed-off-by: Philip Peterson Co-authored-by: Lunny Xiao --- modules/git/git.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'modules/git') diff --git a/modules/git/git.go b/modules/git/git.go index 24cfea8c7f..a31afc077a 100644 --- a/modules/git/git.go +++ b/modules/git/git.go @@ -201,6 +201,23 @@ func InitFull(ctx context.Context) (err error) { return syncGitConfig() } +func enableReflogs() error { + if err := configSet("core.logAllRefUpdates", "true"); err != nil { + return err + } + err := configSet("gc.reflogExpire", fmt.Sprintf("%d", setting.Git.Reflog.Expiration)) + return err +} + +func disableReflogs() error { + if err := configUnsetAll("core.logAllRefUpdates", "true"); err != nil { + return err + } else if err := configUnsetAll("gc.reflogExpire", ""); err != nil { + return err + } + return nil +} + // syncGitConfig only modifies gitconfig, won't change global variables (otherwise there will be data-race problem) func syncGitConfig() (err error) { if err = os.MkdirAll(HomeDir(), os.ModePerm); err != nil { @@ -224,6 +241,16 @@ func syncGitConfig() (err error) { return err } + if setting.Git.Reflog.Enabled { + if err := enableReflogs(); err != nil { + return err + } + } else { + if err := disableReflogs(); err != nil { + return err + } + } + if CheckGitVersionAtLeast("2.10") == nil { if err := configSet("receive.advertisePushOptions", "true"); err != nil { return err -- cgit v1.2.3