 252efbda5c
			
		
	
	
	252efbda5c
	
	
	
		
			
			After https://github.com/go-gitea/gitea/pull/22385 introduced LFS GC, it never worked due to a bug in the INI library: fields in structs embedded more than one level deep are not populated from the INI file. This PR fixes the issue by replacing the multi-level embedded struct with a single-level struct for parsing the cron.gc_lfs configuration. Added a new test for retrieving cron settings to demonstrate the bug in the INI package. --- Fix #9048 by cherrypicking the fix from Gitea Gitea PR: https://github.com/go-gitea/gitea/pull/35198 Confirmed to work on my own instance, I now see the cron schedule for gc_lfs listed in the site admin menu where it was empty before <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Bug fixes - [PR](https://codeberg.org/forgejo/forgejo/pulls/9202): <!--number 9202 --><!--line 0 --><!--description TEZTIEdDIGlzIG5ldmVyIHJ1bm5pbmcgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgcGFyc2luZyBvZiB0aGUgSU5JIGZpbGU=-->LFS GC is never running because of a bug in the parsing of the INI file<!--description--> <!--end release-notes-assistant--> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9202 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Co-authored-by: Andrew Cassidy <drewcassidy@me.com> Co-committed-by: Andrew Cassidy <drewcassidy@me.com>
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2025 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package cron
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"forgejo.org/modules/setting"
 | |
| 	"forgejo.org/modules/test"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func Test_GCLFSConfig(t *testing.T) {
 | |
| 	cfg, err := setting.NewConfigProviderFromData(`
 | |
| [cron.gc_lfs]
 | |
| ENABLED = true
 | |
| RUN_AT_START = true
 | |
| SCHEDULE = "@every 2h"
 | |
| OLDER_THAN = "1h"
 | |
| LAST_UPDATED_MORE_THAN_AGO = "7h"
 | |
| NUMBER_TO_CHECK_PER_REPO = 10
 | |
| PROPORTION_TO_CHECK_PER_REPO = 0.1
 | |
| `)
 | |
| 	require.NoError(t, err)
 | |
| 	defer test.MockVariableValue(&setting.CfgProvider, cfg)()
 | |
| 
 | |
| 	config := &GCLFSConfig{
 | |
| 		BaseConfig: BaseConfig{
 | |
| 			Enabled:    false,
 | |
| 			RunAtStart: false,
 | |
| 			Schedule:   "@every 24h",
 | |
| 		},
 | |
| 		OlderThan:                24 * time.Hour * 7,
 | |
| 		LastUpdatedMoreThanAgo:   24 * time.Hour * 3,
 | |
| 		NumberToCheckPerRepo:     100,
 | |
| 		ProportionToCheckPerRepo: 0.6,
 | |
| 	}
 | |
| 
 | |
| 	_, err = setting.GetCronSettings("gc_lfs", config)
 | |
| 	require.NoError(t, err)
 | |
| 	assert.True(t, config.Enabled)
 | |
| 	assert.True(t, config.RunAtStart)
 | |
| 	assert.Equal(t, "@every 2h", config.Schedule)
 | |
| 	assert.Equal(t, 1*time.Hour, config.OlderThan)
 | |
| 	assert.Equal(t, 7*time.Hour, config.LastUpdatedMoreThanAgo)
 | |
| 	assert.Equal(t, int64(10), config.NumberToCheckPerRepo)
 | |
| 	assert.InDelta(t, 0.1, config.ProportionToCheckPerRepo, 0.001)
 | |
| }
 |