From 355ab0c62c1d58200d68e30d112db398ea00297a Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sun, 26 May 2019 01:15:39 +0800
Subject: [PATCH] Fix wrong init dependency on markup extensions (#7038)

* fix wrong init dependency on markup extensions
---
 cmd/web.go               | 3 ---
 contrib/pr/checkout.go   | 2 ++
 modules/markup/markup.go | 8 ++++++++
 routers/init.go          | 2 ++
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/cmd/web.go b/cmd/web.go
index 6da6ec942e..e6d0300a15 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -15,7 +15,6 @@ import (
 	"strings"
 
 	"code.gitea.io/gitea/modules/log"
-	"code.gitea.io/gitea/modules/markup/external"
 	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/routers"
 	"code.gitea.io/gitea/routers/routes"
@@ -111,8 +110,6 @@ func runWeb(ctx *cli.Context) error {
 
 	routers.GlobalInit()
 
-	external.RegisterParsers()
-
 	m := routes.NewMacaron()
 	routes.RegisterRoutes(m)
 
diff --git a/contrib/pr/checkout.go b/contrib/pr/checkout.go
index 7af27c2a9e..880c029510 100644
--- a/contrib/pr/checkout.go
+++ b/contrib/pr/checkout.go
@@ -20,6 +20,7 @@ import (
 	"strconv"
 	"time"
 
+	"code.gitea.io/gitea/modules/markup"
 	"code.gitea.io/gitea/modules/markup/external"
 	"code.gitea.io/gitea/routers"
 	"code.gitea.io/gitea/routers/routes"
@@ -113,6 +114,7 @@ func runPR() {
 	log.Printf("[PR] Setting up router\n")
 	//routers.GlobalInit()
 	external.RegisterParsers()
+	markup.Init()
 	m := routes.NewMacaron()
 	routes.RegisterRoutes(m)
 
diff --git a/modules/markup/markup.go b/modules/markup/markup.go
index 0ea4099600..dc43b533c0 100644
--- a/modules/markup/markup.go
+++ b/modules/markup/markup.go
@@ -15,6 +15,14 @@ import (
 func Init() {
 	getIssueFullPattern()
 	NewSanitizer()
+
+	// since setting maybe changed extensions, this will reload all parser extensions mapping
+	extParsers = make(map[string]Parser)
+	for _, parser := range parsers {
+		for _, ext := range parser.Extensions() {
+			extParsers[strings.ToLower(ext)] = parser
+		}
+	}
 }
 
 // Parser defines an interface for parsering markup file to HTML
diff --git a/routers/init.go b/routers/init.go
index 88422cc6ed..cfeb928819 100644
--- a/routers/init.go
+++ b/routers/init.go
@@ -19,6 +19,7 @@ import (
 	"code.gitea.io/gitea/modules/log"
 	"code.gitea.io/gitea/modules/mailer"
 	"code.gitea.io/gitea/modules/markup"
+	"code.gitea.io/gitea/modules/markup/external"
 	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/modules/ssh"
 
@@ -75,6 +76,7 @@ func GlobalInit() {
 
 	if setting.InstallLock {
 		highlight.NewContext()
+		external.RegisterParsers()
 		markup.Init()
 		if err := initDBEngine(); err == nil {
 			log.Info("ORM engine initialization successful!")