Backport #22451 by @philip-peterson 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 <philip.c.peterson@gmail.com> Co-authored-by: Philip Peterson <philip-peterson@users.noreply.github.com>tags/v1.19.0
@@ -2256,6 +2256,17 @@ ROUTER = console | |||
;PULL = 300 | |||
;GC = 60 | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;; Git Reflog timeout in days | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;[git.reflog] | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;ENABLED = true | |||
;EXPIRATION = 90 | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
;[mirror] |
@@ -1087,6 +1087,11 @@ Default templates for project boards: | |||
- `DISABLE_CORE_PROTECT_NTFS`: **false** Set to true to forcibly set `core.protectNTFS` to false. | |||
- `DISABLE_PARTIAL_CLONE`: **false** Disable the usage of using partial clones for git. | |||
## Git - Reflog settings (`git.reflog`) | |||
- `ENABLED`: **true** Set to true to enable Git to write changes to reflogs in each repo. | |||
- `EXPIRATION`: **90** Reflog entry lifetime, in days. Entries are removed opportunistically by Git. | |||
## Git - Timeout settings (`git.timeout`) | |||
- `DEFAULT`: **360**: Git operations default timeout seconds. |
@@ -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 |
@@ -12,9 +12,13 @@ import ( | |||
// Git settings | |||
var Git = struct { | |||
Path string | |||
HomePath string | |||
DisableDiffHighlight bool | |||
Path string | |||
HomePath string | |||
DisableDiffHighlight bool | |||
Reflog struct { | |||
Enabled bool | |||
Expiration int | |||
} `ini:"git.reflog"` | |||
MaxGitDiffLines int | |||
MaxGitDiffLineCharacters int | |||
MaxGitDiffFiles int | |||
@@ -37,6 +41,13 @@ var Git = struct { | |||
GC int `ini:"GC"` | |||
} `ini:"git.timeout"` | |||
}{ | |||
Reflog: struct { | |||
Enabled bool | |||
Expiration int | |||
}{ | |||
Enabled: true, | |||
Expiration: 90, | |||
}, | |||
DisableDiffHighlight: false, | |||
MaxGitDiffLines: 1000, | |||
MaxGitDiffLineCharacters: 5000, |
@@ -2928,6 +2928,8 @@ config.git_disable_diff_highlight = Disable Diff Syntax Highlight | |||
config.git_max_diff_lines = Max Diff Lines (for a single file) | |||
config.git_max_diff_line_characters = Max Diff Characters (for a single line) | |||
config.git_max_diff_files = Max Diff Files (to be shown) | |||
config.git_enable_reflogs = Enable Reflogs | |||
config.git_reflog_expiry_time = Expiry Time | |||
config.git_gc_args = GC Arguments | |||
config.git_migrate_timeout = Migration Timeout | |||
config.git_mirror_timeout = Mirror Update Timeout |
@@ -331,7 +331,19 @@ | |||
<dd>{{.Git.MaxGitDiffFiles}}</dd> | |||
<dt>{{.locale.Tr "admin.config.git_gc_args"}}</dt> | |||
<dd><code>{{.Git.GCArgs}}</code></dd> | |||
<div class="ui divider"></div> | |||
<dt>{{.locale.Tr "admin.config.git_enable_reflogs"}}</dt> | |||
<dd>{{if .Git.Reflog.Enabled}}{{svg "octicon-check"}}{{else}}{{svg "octicon-x"}}{{end}}</dd> | |||
{{if .Git.Reflog.Enabled}} | |||
<dt>{{.locale.Tr "admin.config.git_reflog_expiry_time"}}</dt> | |||
<dd>{{.locale.Tr "tool.days" .Git.Reflog.Expiration}}</dd> | |||
{{end}} | |||
<div class="ui divider"></div> | |||
<dt>{{.locale.Tr "admin.config.git_migrate_timeout"}}</dt> | |||
<dd>{{.Git.Timeout.Migrate}} {{.locale.Tr "tool.raw_seconds"}}</dd> | |||
<dt>{{.locale.Tr "admin.config.git_mirror_timeout"}}</dt> |