From 94fde46151eea73fb080fc24463291f3bdf3dbd0 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 8 Apr 2023 21:56:50 +0800 Subject: [PATCH] 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) --- modules/templates/htmlrenderer.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/templates/htmlrenderer.go b/modules/templates/htmlrenderer.go index f2c818798..4e7b09a9e 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