mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	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)
This commit is contained in:
		@@ -67,10 +67,14 @@ func (h *HTMLRender) TemplateLookup(name string) (*template.Template, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (h *HTMLRender) CompileTemplates() error {
 | 
					func (h *HTMLRender) CompileTemplates() error {
 | 
				
			||||||
	dirPrefix := "templates/"
 | 
						dirPrefix := "templates/"
 | 
				
			||||||
 | 
						extSuffix := ".tmpl"
 | 
				
			||||||
	tmpls := template.New("")
 | 
						tmpls := template.New("")
 | 
				
			||||||
	for _, path := range GetTemplateAssetNames() {
 | 
						for _, path := range GetTemplateAssetNames() {
 | 
				
			||||||
		name := path[len(dirPrefix):]
 | 
							if !strings.HasSuffix(path, extSuffix) {
 | 
				
			||||||
		name = strings.TrimSuffix(name, ".tmpl")
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							name := strings.TrimPrefix(path, dirPrefix)
 | 
				
			||||||
 | 
							name = strings.TrimSuffix(name, extSuffix)
 | 
				
			||||||
		tmpl := tmpls.New(filepath.ToSlash(name))
 | 
							tmpl := tmpls.New(filepath.ToSlash(name))
 | 
				
			||||||
		for _, fm := range NewFuncMap() {
 | 
							for _, fm := range NewFuncMap() {
 | 
				
			||||||
			tmpl.Funcs(fm)
 | 
								tmpl.Funcs(fm)
 | 
				
			||||||
@@ -101,7 +105,11 @@ func HTMLRenderer(ctx context.Context) (context.Context, *HTMLRender) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	renderer := &HTMLRender{}
 | 
						renderer := &HTMLRender{}
 | 
				
			||||||
	if err := renderer.CompileTemplates(); err != nil {
 | 
						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 {
 | 
						if !setting.IsProd {
 | 
				
			||||||
		watcher.CreateWatcher(ctx, "HTML Templates", &watcher.CreateWatcherOpts{
 | 
							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
 | 
						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{}) {
 | 
					func wrapFatal(format string, args []interface{}) {
 | 
				
			||||||
	if format == "" {
 | 
						if format == "" {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user