mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	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>
This commit is contained in:
		@@ -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>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user