aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-04-08 21:56:50 +0800
committerGitHub <noreply@github.com>2023-04-08 21:56:50 +0800
commit94fde46151eea73fb080fc24463291f3bdf3dbd0 (patch)
tree4b0e80b6b630023bcafc0f34b6cea4142bfb8ba3
parentfdbd64611383f8b78dc76765f6edfa3e40a3a0bf (diff)
downloadgitea-94fde46151eea73fb080fc24463291f3bdf3dbd0.tar.gz
gitea-94fde46151eea73fb080fc24463291f3bdf3dbd0.zip
Make bindata static build parse builtin templates correctly (#24003)
Close #24002 Two problems before: 1. The `log.Fatal` is missing after these `wrapFatal` calls, so the error is not shown to users. 2. `GetTemplateAssetNames` has different behaviors for local files and builtin assets, for builtin assets, it also returns directories, so we need to check the extension again. I have tested with `TAGS="bindata sqlite sqlite_unlock_notify" make build && ./gitea` , it works well now. Before, the server responds internal server error (because it doesn't complete the template parsing)
-rw-r--r--modules/templates/htmlrenderer.go21
1 files changed, 11 insertions, 10 deletions
diff --git a/modules/templates/htmlrenderer.go b/modules/templates/htmlrenderer.go
index f2c818798c..4e7b09a9ec 100644
--- a/modules/templates/htmlrenderer.go
+++ b/modules/templates/htmlrenderer.go
@@ -67,10 +67,14 @@ func (h *HTMLRender) TemplateLookup(name string) (*template.Template, error) {
func (h *HTMLRender) CompileTemplates() error {
dirPrefix := "templates/"
+ extSuffix := ".tmpl"
tmpls := template.New("")
for _, path := range GetTemplateAssetNames() {
- name := path[len(dirPrefix):]
- name = strings.TrimSuffix(name, ".tmpl")
+ if !strings.HasSuffix(path, extSuffix) {
+ continue
+ }
+ name := strings.TrimPrefix(path, dirPrefix)
+ name = strings.TrimSuffix(name, extSuffix)
tmpl := tmpls.New(filepath.ToSlash(name))
for _, fm := range NewFuncMap() {
tmpl.Funcs(fm)
@@ -101,7 +105,11 @@ func HTMLRenderer(ctx context.Context) (context.Context, *HTMLRender) {
renderer := &HTMLRender{}
if err := renderer.CompileTemplates(); err != nil {
- handleFatalError(err)
+ wrapFatal(handleNotDefinedPanicError(err))
+ wrapFatal(handleUnexpected(err))
+ wrapFatal(handleExpectedEnd(err))
+ wrapFatal(handleGenericTemplateError(err))
+ log.Fatal("HTMLRenderer error: %v", err)
}
if !setting.IsProd {
watcher.CreateWatcher(ctx, "HTML Templates", &watcher.CreateWatcherOpts{
@@ -116,13 +124,6 @@ func HTMLRenderer(ctx context.Context) (context.Context, *HTMLRender) {
return context.WithValue(ctx, rendererKey, renderer), renderer
}
-func handleFatalError(err error) {
- wrapFatal(handleNotDefinedPanicError(err))
- wrapFatal(handleUnexpected(err))
- wrapFatal(handleExpectedEnd(err))
- wrapFatal(handleGenericTemplateError(err))
-}
-
func wrapFatal(format string, args []interface{}) {
if format == "" {
return