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 <philip.c.peterson@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
f521e88240
commit
757b4c17e9
|
@ -2272,6 +2272,17 @@ ROUTER = console
|
||||||
;PULL = 300
|
;PULL = 300
|
||||||
;GC = 60
|
;GC = 60
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Git Reflog timeout in days
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;[git.reflog]
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;ENABLED = true
|
||||||
|
;EXPIRATION = 90
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;[mirror]
|
;[mirror]
|
||||||
|
|
|
@ -1093,6 +1093,11 @@ Default templates for project boards:
|
||||||
- `DISABLE_CORE_PROTECT_NTFS`: **false** Set to true to forcibly set `core.protectNTFS` to false.
|
- `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.
|
- `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`)
|
## Git - Timeout settings (`git.timeout`)
|
||||||
|
|
||||||
- `DEFAULT`: **360**: Git operations default timeout seconds.
|
- `DEFAULT`: **360**: Git operations default timeout seconds.
|
||||||
|
|
|
@ -201,6 +201,23 @@ func InitFull(ctx context.Context) (err error) {
|
||||||
return syncGitConfig()
|
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)
|
// syncGitConfig only modifies gitconfig, won't change global variables (otherwise there will be data-race problem)
|
||||||
func syncGitConfig() (err error) {
|
func syncGitConfig() (err error) {
|
||||||
if err = os.MkdirAll(HomeDir(), os.ModePerm); err != nil {
|
if err = os.MkdirAll(HomeDir(), os.ModePerm); err != nil {
|
||||||
|
@ -224,6 +241,16 @@ func syncGitConfig() (err error) {
|
||||||
return err
|
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 CheckGitVersionAtLeast("2.10") == nil {
|
||||||
if err := configSet("receive.advertisePushOptions", "true"); err != nil {
|
if err := configSet("receive.advertisePushOptions", "true"); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -12,9 +12,13 @@ import (
|
||||||
|
|
||||||
// Git settings
|
// Git settings
|
||||||
var Git = struct {
|
var Git = struct {
|
||||||
Path string
|
Path string
|
||||||
HomePath string
|
HomePath string
|
||||||
DisableDiffHighlight bool
|
DisableDiffHighlight bool
|
||||||
|
Reflog struct {
|
||||||
|
Enabled bool
|
||||||
|
Expiration int
|
||||||
|
} `ini:"git.reflog"`
|
||||||
MaxGitDiffLines int
|
MaxGitDiffLines int
|
||||||
MaxGitDiffLineCharacters int
|
MaxGitDiffLineCharacters int
|
||||||
MaxGitDiffFiles int
|
MaxGitDiffFiles int
|
||||||
|
@ -37,6 +41,13 @@ var Git = struct {
|
||||||
GC int `ini:"GC"`
|
GC int `ini:"GC"`
|
||||||
} `ini:"git.timeout"`
|
} `ini:"git.timeout"`
|
||||||
}{
|
}{
|
||||||
|
Reflog: struct {
|
||||||
|
Enabled bool
|
||||||
|
Expiration int
|
||||||
|
}{
|
||||||
|
Enabled: true,
|
||||||
|
Expiration: 90,
|
||||||
|
},
|
||||||
DisableDiffHighlight: false,
|
DisableDiffHighlight: false,
|
||||||
MaxGitDiffLines: 1000,
|
MaxGitDiffLines: 1000,
|
||||||
MaxGitDiffLineCharacters: 5000,
|
MaxGitDiffLineCharacters: 5000,
|
||||||
|
|
|
@ -2934,6 +2934,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_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_line_characters = Max Diff Characters (for a single line)
|
||||||
config.git_max_diff_files = Max Diff Files (to be shown)
|
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_gc_args = GC Arguments
|
||||||
config.git_migrate_timeout = Migration Timeout
|
config.git_migrate_timeout = Migration Timeout
|
||||||
config.git_mirror_timeout = Mirror Update Timeout
|
config.git_mirror_timeout = Mirror Update Timeout
|
||||||
|
|
|
@ -331,7 +331,19 @@
|
||||||
<dd>{{.Git.MaxGitDiffFiles}}</dd>
|
<dd>{{.Git.MaxGitDiffFiles}}</dd>
|
||||||
<dt>{{.locale.Tr "admin.config.git_gc_args"}}</dt>
|
<dt>{{.locale.Tr "admin.config.git_gc_args"}}</dt>
|
||||||
<dd><code>{{.Git.GCArgs}}</code></dd>
|
<dd><code>{{.Git.GCArgs}}</code></dd>
|
||||||
|
|
||||||
<div class="ui divider"></div>
|
<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>
|
<dt>{{.locale.Tr "admin.config.git_migrate_timeout"}}</dt>
|
||||||
<dd>{{.Git.Timeout.Migrate}} {{.locale.Tr "tool.raw_seconds"}}</dd>
|
<dd>{{.Git.Timeout.Migrate}} {{.locale.Tr "tool.raw_seconds"}}</dd>
|
||||||
<dt>{{.locale.Tr "admin.config.git_mirror_timeout"}}</dt>
|
<dt>{{.locale.Tr "admin.config.git_mirror_timeout"}}</dt>
|
||||||
|
|
Loading…
Reference in a new issue