mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Use a general approach to access custom/static/builtin assets (#24022)
The idea is to use a Layered Asset File-system (modules/assetfs/layered.go) For example: when there are 2 layers: "custom", "builtin", when access to asset "my/page.tmpl", the Layered Asset File-system will first try to use "custom" assets, if not found, then use "builtin" assets. This approach will hugely simplify a lot of code, make them testable. Other changes: * Simplify the AssetsHandlerFunc code * Simplify the `gitea embedded` sub-command code --------- Co-authored-by: Jason Song <i@wolfogre.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -13,7 +13,6 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/options"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/translation/i18n"
 | 
			
		||||
	"code.gitea.io/gitea/modules/watcher"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/text/language"
 | 
			
		||||
)
 | 
			
		||||
@@ -58,7 +57,7 @@ func InitLocales(ctx context.Context) {
 | 
			
		||||
 | 
			
		||||
	refreshLocales := func() {
 | 
			
		||||
		i18n.ResetDefaultLocales()
 | 
			
		||||
		localeNames, err := options.Dir("locale")
 | 
			
		||||
		localeNames, err := options.AssetFS().ListFiles("locale", true)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal("Failed to list locale files: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
@@ -118,13 +117,10 @@ func InitLocales(ctx context.Context) {
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	if !setting.IsProd {
 | 
			
		||||
		watcher.CreateWatcher(ctx, "Locales", &watcher.CreateWatcherOpts{
 | 
			
		||||
			PathsCallback: options.WalkLocales,
 | 
			
		||||
			BetweenCallback: func() {
 | 
			
		||||
				lock.Lock()
 | 
			
		||||
				defer lock.Unlock()
 | 
			
		||||
				refreshLocales()
 | 
			
		||||
			},
 | 
			
		||||
		go options.AssetFS().WatchLocalChanges(ctx, func() {
 | 
			
		||||
			lock.Lock()
 | 
			
		||||
			defer lock.Unlock()
 | 
			
		||||
			refreshLocales()
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user