diff options
Diffstat (limited to 'modules/templates/base.go')
-rw-r--r-- | modules/templates/base.go | 93 |
1 files changed, 19 insertions, 74 deletions
diff --git a/modules/templates/base.go b/modules/templates/base.go index e0f8350afb..e95ce31cfc 100644 --- a/modules/templates/base.go +++ b/modules/templates/base.go @@ -4,14 +4,10 @@ package templates import ( - "fmt" - "io/fs" - "os" - "path/filepath" "strings" "time" - "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/assetfs" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" ) @@ -47,81 +43,30 @@ func BaseVars() Vars { } } -func getDirTemplateAssetNames(dir string) []string { - return getDirAssetNames(dir, false) +func AssetFS() *assetfs.LayeredFS { + return assetfs.Layered(CustomAssets(), BuiltinAssets()) } -func getDirAssetNames(dir string, mailer bool) []string { - var tmpls []string - - if mailer { - dir += filepath.Join(dir, "mail") - } - f, err := os.Stat(dir) - if err != nil { - if os.IsNotExist(err) { - return tmpls - } - log.Warn("Unable to check if templates dir %s is a directory. Error: %v", dir, err) - return tmpls - } - if !f.IsDir() { - log.Warn("Templates dir %s is a not directory.", dir) - return tmpls - } +func CustomAssets() *assetfs.Layer { + return assetfs.Local("custom", setting.CustomPath, "templates") +} - files, err := util.StatDir(dir) +func ListWebTemplateAssetNames(assets *assetfs.LayeredFS) ([]string, error) { + files, err := assets.ListAllFiles(".", true) if err != nil { - log.Warn("Failed to read %s templates dir. %v", dir, err) - return tmpls + return nil, err } - - prefix := "templates/" - if mailer { - prefix += "mail/" - } - for _, filePath := range files { - if !mailer && strings.HasPrefix(filePath, "mail/") { - continue - } - - if !strings.HasSuffix(filePath, ".tmpl") { - continue - } - - tmpls = append(tmpls, prefix+filePath) - } - return tmpls + return util.SliceRemoveAllFunc(files, func(file string) bool { + return strings.HasPrefix(file, "mail/") || !strings.HasSuffix(file, ".tmpl") + }), nil } -func walkAssetDir(root string, skipMail bool, callback func(path, name string, d fs.DirEntry, err error) error) error { - mailRoot := filepath.Join(root, "mail") - if err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error { - name := path[len(root):] - if len(name) > 0 && name[0] == '/' { - name = name[1:] - } - if err != nil { - if os.IsNotExist(err) { - return callback(path, name, d, err) - } - return err - } - if skipMail && path == mailRoot && d.IsDir() { - return fs.SkipDir - } - if util.CommonSkip(d.Name()) { - if d.IsDir() { - return fs.SkipDir - } - return nil - } - if strings.HasSuffix(d.Name(), ".tmpl") || d.IsDir() { - return callback(path, name, d, err) - } - return nil - }); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("unable to get files for template assets in %s: %w", root, err) +func ListMailTemplateAssetNames(assets *assetfs.LayeredFS) ([]string, error) { + files, err := assets.ListAllFiles(".", true) + if err != nil { + return nil, err } - return nil + return util.SliceRemoveAllFunc(files, func(file string) bool { + return !strings.HasPrefix(file, "mail/") || !strings.HasSuffix(file, ".tmpl") + }), nil } |