Integrated optional bindata for the templatesmaster
@@ -29,6 +29,7 @@ _testmain.go | |||||
coverage.out | coverage.out | ||||
/modules/public/bindata.go | /modules/public/bindata.go | ||||
/modules/templates/bindata.go | |||||
*.db | *.db | ||||
*.log | *.log | ||||
@@ -7,7 +7,6 @@ package cmd | |||||
import ( | import ( | ||||
"crypto/tls" | "crypto/tls" | ||||
"fmt" | "fmt" | ||||
"io/ioutil" | |||||
"net" | "net" | ||||
"net/http" | "net/http" | ||||
"net/http/fcgi" | "net/http/fcgi" | ||||
@@ -15,7 +14,6 @@ import ( | |||||
"path" | "path" | ||||
"strings" | "strings" | ||||
"code.gitea.io/git" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/auth" | "code.gitea.io/gitea/modules/auth" | ||||
"code.gitea.io/gitea/modules/bindata" | "code.gitea.io/gitea/modules/bindata" | ||||
@@ -23,7 +21,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/public" | "code.gitea.io/gitea/modules/public" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"code.gitea.io/gitea/modules/template" | |||||
"code.gitea.io/gitea/modules/templates" | |||||
"code.gitea.io/gitea/routers" | "code.gitea.io/gitea/routers" | ||||
"code.gitea.io/gitea/routers/admin" | "code.gitea.io/gitea/routers/admin" | ||||
apiv1 "code.gitea.io/gitea/routers/api/v1" | apiv1 "code.gitea.io/gitea/routers/api/v1" | ||||
@@ -39,10 +37,7 @@ import ( | |||||
"github.com/go-macaron/i18n" | "github.com/go-macaron/i18n" | ||||
"github.com/go-macaron/session" | "github.com/go-macaron/session" | ||||
"github.com/go-macaron/toolbox" | "github.com/go-macaron/toolbox" | ||||
"github.com/go-xorm/xorm" | |||||
version "github.com/mcuadros/go-version" | |||||
"github.com/urfave/cli" | "github.com/urfave/cli" | ||||
ini "gopkg.in/ini.v1" | |||||
macaron "gopkg.in/macaron.v1" | macaron "gopkg.in/macaron.v1" | ||||
) | ) | ||||
@@ -74,45 +69,6 @@ type VerChecker struct { | |||||
Expected string | Expected string | ||||
} | } | ||||
// checkVersion checks if binary matches the version of templates files. | |||||
func checkVersion() { | |||||
// Templates. | |||||
data, err := ioutil.ReadFile(setting.StaticRootPath + "/templates/.VERSION") | |||||
if err != nil { | |||||
log.Fatal(4, "Fail to read 'templates/.VERSION': %v", err) | |||||
} | |||||
tplVer := string(data) | |||||
if tplVer != setting.AppVer { | |||||
if version.Compare(tplVer, setting.AppVer, ">") { | |||||
log.Fatal(4, "Binary version is lower than template file version, did you forget to recompile Gogs?") | |||||
} else { | |||||
log.Fatal(4, "Binary version is higher than template file version, did you forget to update template files?") | |||||
} | |||||
} | |||||
// Check dependency version. | |||||
checkers := []VerChecker{ | |||||
{"github.com/go-xorm/xorm", func() string { return xorm.Version }, "0.5.5"}, | |||||
{"github.com/go-macaron/binding", binding.Version, "0.3.2"}, | |||||
{"github.com/go-macaron/cache", cache.Version, "0.1.2"}, | |||||
{"github.com/go-macaron/csrf", csrf.Version, "0.1.0"}, | |||||
{"github.com/go-macaron/i18n", i18n.Version, "0.3.0"}, | |||||
{"github.com/go-macaron/session", session.Version, "0.1.6"}, | |||||
{"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"}, | |||||
{"gopkg.in/ini.v1", ini.Version, "1.8.4"}, | |||||
{"gopkg.in/macaron.v1", macaron.Version, "1.1.7"}, | |||||
{"code.gitea.io/git", git.Version, "0.4.1"}, | |||||
} | |||||
for _, c := range checkers { | |||||
if !version.Compare(c.Version(), c.Expected, ">=") { | |||||
log.Fatal(4, `Dependency outdated! | |||||
Package '%s' current version (%s) is below requirement (%s), | |||||
please use following command to update this package and recompile Gogs: | |||||
go get -u %[1]s`, c.ImportPath, c.Version(), c.Expected) | |||||
} | |||||
} | |||||
} | |||||
// newMacaron initializes Macaron instance. | // newMacaron initializes Macaron instance. | ||||
func newMacaron() *macaron.Macaron { | func newMacaron() *macaron.Macaron { | ||||
m := macaron.New() | m := macaron.New() | ||||
@@ -140,15 +96,8 @@ func newMacaron() *macaron.Macaron { | |||||
}, | }, | ||||
)) | )) | ||||
funcMap := template.NewFuncMap() | |||||
m.Use(macaron.Renderer(macaron.RenderOptions{ | |||||
Directory: path.Join(setting.StaticRootPath, "templates"), | |||||
AppendDirectories: []string{path.Join(setting.CustomPath, "templates")}, | |||||
Funcs: funcMap, | |||||
IndentJSON: macaron.Env != macaron.PROD, | |||||
})) | |||||
models.InitMailRender(path.Join(setting.StaticRootPath, "templates/mail"), | |||||
path.Join(setting.CustomPath, "templates/mail"), funcMap) | |||||
m.Use(templates.Renderer()) | |||||
models.InitMailRender(templates.Mailer()) | |||||
localeNames, err := bindata.AssetDir("conf/locale") | localeNames, err := bindata.AssetDir("conf/locale") | ||||
if err != nil { | if err != nil { | ||||
@@ -200,7 +149,6 @@ func runWeb(ctx *cli.Context) error { | |||||
setting.CustomConf = ctx.String("config") | setting.CustomConf = ctx.String("config") | ||||
} | } | ||||
routers.GlobalInit() | routers.GlobalInit() | ||||
checkVersion() | |||||
m := newMacaron() | m := newMacaron() | ||||
@@ -18,10 +18,10 @@ import ( | |||||
"code.gitea.io/git" | "code.gitea.io/git" | ||||
"code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
"code.gitea.io/gitea/modules/highlight" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/process" | "code.gitea.io/gitea/modules/process" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"code.gitea.io/gitea/modules/template/highlight" | |||||
"github.com/Unknwon/com" | "github.com/Unknwon/com" | ||||
"github.com/sergi/go-diff/diffmatchpatch" | "github.com/sergi/go-diff/diffmatchpatch" | ||||
"golang.org/x/net/html/charset" | "golang.org/x/net/html/charset" | ||||
@@ -5,18 +5,18 @@ | |||||
package models | package models | ||||
import ( | import ( | ||||
"bytes" | |||||
"fmt" | "fmt" | ||||
"html/template" | "html/template" | ||||
"path" | "path" | ||||
"gopkg.in/gomail.v2" | |||||
"gopkg.in/macaron.v1" | |||||
"code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/mailer" | "code.gitea.io/gitea/modules/mailer" | ||||
"code.gitea.io/gitea/modules/markdown" | "code.gitea.io/gitea/modules/markdown" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"gopkg.in/gomail.v2" | |||||
"gopkg.in/macaron.v1" | |||||
) | ) | ||||
const ( | const ( | ||||
@@ -31,27 +31,11 @@ const ( | |||||
mailNotifyCollaborator base.TplName = "notify/collaborator" | mailNotifyCollaborator base.TplName = "notify/collaborator" | ||||
) | ) | ||||
type mailRenderInterface interface { | |||||
HTMLString(string, interface{}, ...macaron.HTMLOptions) (string, error) | |||||
} | |||||
var mailRender mailRenderInterface | |||||
var templates *template.Template | |||||
// InitMailRender initializes the macaron mail renderer | // InitMailRender initializes the macaron mail renderer | ||||
func InitMailRender(dir, appendDir string, funcMap []template.FuncMap) { | |||||
opt := &macaron.RenderOptions{ | |||||
Directory: dir, | |||||
AppendDirectories: []string{appendDir}, | |||||
Funcs: funcMap, | |||||
Extensions: []string{".tmpl", ".html"}, | |||||
} | |||||
ts := macaron.NewTemplateSet() | |||||
ts.Set(macaron.DEFAULT_TPL_SET_NAME, opt) | |||||
mailRender = &macaron.TplRender{ | |||||
TemplateSet: ts, | |||||
Opt: opt, | |||||
} | |||||
func InitMailRender(tmpls *template.Template) { | |||||
templates = tmpls | |||||
} | } | ||||
// SendTestMail sends a test mail | // SendTestMail sends a test mail | ||||
@@ -67,13 +51,15 @@ func SendUserMail(c *macaron.Context, u *User, tpl base.TplName, code, subject, | |||||
"ResetPwdCodeLives": setting.Service.ResetPwdCodeLives / 60, | "ResetPwdCodeLives": setting.Service.ResetPwdCodeLives / 60, | ||||
"Code": code, | "Code": code, | ||||
} | } | ||||
body, err := mailRender.HTMLString(string(tpl), data) | |||||
if err != nil { | |||||
log.Error(3, "HTMLString: %v", err) | |||||
var content bytes.Buffer | |||||
if err := templates.ExecuteTemplate(&content, string(tpl), data); err != nil { | |||||
log.Error(3, "Template: %v", err) | |||||
return | return | ||||
} | } | ||||
msg := mailer.NewMessage([]string{u.Email}, subject, body) | |||||
msg := mailer.NewMessage([]string{u.Email}, subject, content.String()) | |||||
msg.Info = fmt.Sprintf("UID: %d, %s", u.ID, info) | msg.Info = fmt.Sprintf("UID: %d, %s", u.ID, info) | ||||
mailer.SendAsync(msg) | mailer.SendAsync(msg) | ||||
@@ -97,13 +83,15 @@ func SendActivateEmailMail(c *macaron.Context, u *User, email *EmailAddress) { | |||||
"Code": u.GenerateEmailActivateCode(email.Email), | "Code": u.GenerateEmailActivateCode(email.Email), | ||||
"Email": email.Email, | "Email": email.Email, | ||||
} | } | ||||
body, err := mailRender.HTMLString(string(mailAuthActivateEmail), data) | |||||
if err != nil { | |||||
log.Error(3, "HTMLString: %v", err) | |||||
var content bytes.Buffer | |||||
if err := templates.ExecuteTemplate(&content, string(mailAuthActivateEmail), data); err != nil { | |||||
log.Error(3, "Template: %v", err) | |||||
return | return | ||||
} | } | ||||
msg := mailer.NewMessage([]string{email.Email}, c.Tr("mail.activate_email"), body) | |||||
msg := mailer.NewMessage([]string{email.Email}, c.Tr("mail.activate_email"), content.String()) | |||||
msg.Info = fmt.Sprintf("UID: %d, activate email", u.ID) | msg.Info = fmt.Sprintf("UID: %d, activate email", u.ID) | ||||
mailer.SendAsync(msg) | mailer.SendAsync(msg) | ||||
@@ -114,13 +102,15 @@ func SendRegisterNotifyMail(c *macaron.Context, u *User) { | |||||
data := map[string]interface{}{ | data := map[string]interface{}{ | ||||
"Username": u.DisplayName(), | "Username": u.DisplayName(), | ||||
} | } | ||||
body, err := mailRender.HTMLString(string(mailAuthRegisterNotify), data) | |||||
if err != nil { | |||||
log.Error(3, "HTMLString: %v", err) | |||||
var content bytes.Buffer | |||||
if err := templates.ExecuteTemplate(&content, string(mailAuthRegisterNotify), data); err != nil { | |||||
log.Error(3, "Template: %v", err) | |||||
return | return | ||||
} | } | ||||
msg := mailer.NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), body) | |||||
msg := mailer.NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), content.String()) | |||||
msg.Info = fmt.Sprintf("UID: %d, registration notify", u.ID) | msg.Info = fmt.Sprintf("UID: %d, registration notify", u.ID) | ||||
mailer.SendAsync(msg) | mailer.SendAsync(msg) | ||||
@@ -136,13 +126,15 @@ func SendCollaboratorMail(u, doer *User, repo *Repository) { | |||||
"RepoName": repoName, | "RepoName": repoName, | ||||
"Link": repo.HTMLURL(), | "Link": repo.HTMLURL(), | ||||
} | } | ||||
body, err := mailRender.HTMLString(string(mailNotifyCollaborator), data) | |||||
if err != nil { | |||||
log.Error(3, "HTMLString: %v", err) | |||||
var content bytes.Buffer | |||||
if err := templates.ExecuteTemplate(&content, string(mailNotifyCollaborator), data); err != nil { | |||||
log.Error(3, "Template: %v", err) | |||||
return | return | ||||
} | } | ||||
msg := mailer.NewMessage([]string{u.Email}, subject, body) | |||||
msg := mailer.NewMessage([]string{u.Email}, subject, content.String()) | |||||
msg.Info = fmt.Sprintf("UID: %d, add collaborator", u.ID) | msg.Info = fmt.Sprintf("UID: %d, add collaborator", u.ID) | ||||
mailer.SendAsync(msg) | mailer.SendAsync(msg) | ||||
@@ -161,11 +153,14 @@ func composeIssueMessage(issue *Issue, doer *User, tplName base.TplName, tos []s | |||||
body := string(markdown.RenderSpecialLink([]byte(issue.Content), issue.Repo.HTMLURL(), issue.Repo.ComposeMetas())) | body := string(markdown.RenderSpecialLink([]byte(issue.Content), issue.Repo.HTMLURL(), issue.Repo.ComposeMetas())) | ||||
data := composeTplData(subject, body, issue.HTMLURL()) | data := composeTplData(subject, body, issue.HTMLURL()) | ||||
data["Doer"] = doer | data["Doer"] = doer | ||||
content, err := mailRender.HTMLString(string(tplName), data) | |||||
if err != nil { | |||||
log.Error(3, "HTMLString (%s): %v", tplName, err) | |||||
var content bytes.Buffer | |||||
if err := templates.ExecuteTemplate(&content, string(tplName), data); err != nil { | |||||
log.Error(3, "Template: %v", err) | |||||
} | } | ||||
msg := mailer.NewMessageFrom(tos, fmt.Sprintf(`"%s" <%s>`, doer.DisplayName(), setting.MailService.FromEmail), subject, content) | |||||
msg := mailer.NewMessageFrom(tos, fmt.Sprintf(`"%s" <%s>`, doer.DisplayName(), setting.MailService.FromEmail), subject, content.String()) | |||||
msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info) | msg.Info = fmt.Sprintf("Subject: %s, %s", subject, info) | ||||
return msg | return msg | ||||
} | } | ||||
@@ -6,6 +6,8 @@ package public | |||||
//go:generate go-bindata -tags "bindata" -ignore "\\.go|\\.less" -pkg "public" -o "bindata.go" ../../public/... | //go:generate go-bindata -tags "bindata" -ignore "\\.go|\\.less" -pkg "public" -o "bindata.go" ../../public/... | ||||
//go:generate go fmt bindata.go | //go:generate go fmt bindata.go | ||||
//go:generate sed -i.bak s/..\/..\/public\/// bindata.go | |||||
//go:generate rm -f bindata.go.bak | |||||
// Options represents the available options to configure the macaron handler. | // Options represents the available options to configure the macaron handler. | ||||
type Options struct { | type Options struct { | ||||
@@ -22,7 +22,7 @@ func Static(opts *Options) macaron.Handler { | |||||
AssetDir: AssetDir, | AssetDir: AssetDir, | ||||
AssetInfo: AssetInfo, | AssetInfo: AssetInfo, | ||||
AssetNames: AssetNames, | AssetNames: AssetNames, | ||||
Prefix: "../../public", | |||||
Prefix: "", | |||||
}), | }), | ||||
}, | }, | ||||
) | ) | ||||
@@ -0,0 +1,103 @@ | |||||
// +build !bindata | |||||
// Copyright 2016 The Gitea Authors. All rights reserved. | |||||
// Use of this source code is governed by a MIT-style | |||||
// license that can be found in the LICENSE file. | |||||
package templates | |||||
import ( | |||||
"html/template" | |||||
"io/ioutil" | |||||
"path" | |||||
"strings" | |||||
"code.gitea.io/gitea/modules/log" | |||||
"code.gitea.io/gitea/modules/setting" | |||||
"github.com/Unknwon/com" | |||||
"gopkg.in/macaron.v1" | |||||
) | |||||
var ( | |||||
templates = template.New("") | |||||
) | |||||
// Renderer implements the macaron handler for serving the templates. | |||||
func Renderer() macaron.Handler { | |||||
return macaron.Renderer(macaron.RenderOptions{ | |||||
Funcs: NewFuncMap(), | |||||
Directory: path.Join(setting.StaticRootPath, "templates"), | |||||
AppendDirectories: []string{ | |||||
path.Join(setting.CustomPath, "templates"), | |||||
}, | |||||
}) | |||||
} | |||||
// Mailer provides the templates required for sending notification mails. | |||||
func Mailer() *template.Template { | |||||
for _, funcs := range NewFuncMap() { | |||||
templates.Funcs(funcs) | |||||
} | |||||
staticDir := path.Join(setting.StaticRootPath, "templates", "mail") | |||||
if com.IsDir(staticDir) { | |||||
files, err := com.StatDir(staticDir) | |||||
if err != nil { | |||||
log.Warn("Failed to read %s templates dir. %v", staticDir, err) | |||||
} else { | |||||
for _, filePath := range files { | |||||
if !strings.HasSuffix(filePath, ".tmpl") { | |||||
continue | |||||
} | |||||
content, err := ioutil.ReadFile(path.Join(staticDir, filePath)) | |||||
if err != nil { | |||||
log.Warn("Failed to read static %s template. %v", filePath, err) | |||||
continue | |||||
} | |||||
templates.New( | |||||
strings.TrimSuffix( | |||||
filePath, | |||||
".tmpl", | |||||
), | |||||
).Parse(string(content)) | |||||
} | |||||
} | |||||
} | |||||
customDir := path.Join(setting.CustomPath, "templates", "mail") | |||||
if com.IsDir(customDir) { | |||||
files, err := com.StatDir(customDir) | |||||
if err != nil { | |||||
log.Warn("Failed to read %s templates dir. %v", customDir, err) | |||||
} else { | |||||
for _, filePath := range files { | |||||
if !strings.HasSuffix(filePath, ".tmpl") { | |||||
continue | |||||
} | |||||
content, err := ioutil.ReadFile(path.Join(customDir, filePath)) | |||||
if err != nil { | |||||
log.Warn("Failed to read custom %s template. %v", filePath, err) | |||||
continue | |||||
} | |||||
templates.New( | |||||
strings.TrimSuffix( | |||||
filePath, | |||||
".tmpl", | |||||
), | |||||
).Parse(string(content)) | |||||
} | |||||
} | |||||
} | |||||
return templates | |||||
} |
@@ -2,7 +2,7 @@ | |||||
// Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||
// license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
package template | |||||
package templates | |||||
import ( | import ( | ||||
"container/list" | "container/list" |
@@ -0,0 +1,109 @@ | |||||
// +build bindata | |||||
// Copyright 2016 The Gitea Authors. All rights reserved. | |||||
// Use of this source code is governed by a MIT-style | |||||
// license that can be found in the LICENSE file. | |||||
package templates | |||||
import ( | |||||
"html/template" | |||||
"io/ioutil" | |||||
"path" | |||||
"strings" | |||||
"code.gitea.io/gitea/modules/log" | |||||
"code.gitea.io/gitea/modules/setting" | |||||
"github.com/Unknwon/com" | |||||
"github.com/go-macaron/bindata" | |||||
"gopkg.in/macaron.v1" | |||||
) | |||||
var ( | |||||
templates = template.New("") | |||||
) | |||||
// Renderer implements the macaron handler for serving the templates. | |||||
func Renderer() macaron.Handler { | |||||
return macaron.Renderer(macaron.RenderOptions{ | |||||
Funcs: NewFuncMap(), | |||||
AppendDirectories: []string{ | |||||
path.Join(setting.CustomPath, "templates"), | |||||
}, | |||||
TemplateFileSystem: bindata.Templates( | |||||
bindata.Options{ | |||||
Asset: Asset, | |||||
AssetDir: AssetDir, | |||||
AssetInfo: AssetInfo, | |||||
AssetNames: AssetNames, | |||||
Prefix: "", | |||||
}, | |||||
), | |||||
}) | |||||
} | |||||
// Mailer provides the templates required for sending notification mails. | |||||
func Mailer() *template.Template { | |||||
for _, funcs := range NewFuncMap() { | |||||
templates.Funcs(funcs) | |||||
} | |||||
for _, assetPath := range AssetNames() { | |||||
if !strings.HasPrefix(assetPath, "mail/") { | |||||
continue | |||||
} | |||||
if !strings.HasSuffix(assetPath, ".tmpl") { | |||||
continue | |||||
} | |||||
content, err := Asset(assetPath) | |||||
if err != nil { | |||||
log.Warn("Failed to read embedded %s template. %v", assetPath, err) | |||||
continue | |||||
} | |||||
templates.New( | |||||
strings.TrimPrefix( | |||||
strings.TrimSuffix( | |||||
assetPath, | |||||
".tmpl", | |||||
), | |||||
"mail/", | |||||
), | |||||
).Parse(string(content)) | |||||
} | |||||
customDir := path.Join(setting.CustomPath, "templates", "mail") | |||||
if com.IsDir(customDir) { | |||||
files, err := com.StatDir(customDir) | |||||
if err != nil { | |||||
log.Warn("Failed to read %s templates dir. %v", customDir, err) | |||||
} else { | |||||
for _, filePath := range files { | |||||
if !strings.HasSuffix(filePath, ".tmpl") { | |||||
continue | |||||
} | |||||
content, err := ioutil.ReadFile(path.Join(customDir, filePath)) | |||||
if err != nil { | |||||
log.Warn("Failed to read custom %s template. %v", filePath, err) | |||||
continue | |||||
} | |||||
templates.New( | |||||
strings.TrimSuffix( | |||||
filePath, | |||||
".tmpl", | |||||
), | |||||
).Parse(string(content)) | |||||
} | |||||
} | |||||
} | |||||
return templates | |||||
} |
@@ -0,0 +1,10 @@ | |||||
// Copyright 2016 The Gitea Authors. All rights reserved. | |||||
// Use of this source code is governed by a MIT-style | |||||
// license that can be found in the LICENSE file. | |||||
package templates | |||||
//go:generate go-bindata -tags "bindata" -ignore "\\.go" -pkg "templates" -o "bindata.go" ../../templates/... | |||||
//go:generate go fmt bindata.go | |||||
//go:generate sed -i.bak s/..\/..\/templates\/// bindata.go | |||||
//go:generate rm -f bindata.go.bak |
@@ -11,12 +11,12 @@ import ( | |||||
"code.gitea.io/git" | "code.gitea.io/git" | ||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/cron" | "code.gitea.io/gitea/modules/cron" | ||||
"code.gitea.io/gitea/modules/highlight" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/mailer" | "code.gitea.io/gitea/modules/mailer" | ||||
"code.gitea.io/gitea/modules/markdown" | "code.gitea.io/gitea/modules/markdown" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"code.gitea.io/gitea/modules/ssh" | "code.gitea.io/gitea/modules/ssh" | ||||
"code.gitea.io/gitea/modules/template/highlight" | |||||
macaron "gopkg.in/macaron.v1" | macaron "gopkg.in/macaron.v1" | ||||
) | ) | ||||
@@ -18,7 +18,7 @@ import ( | |||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"code.gitea.io/gitea/modules/template" | |||||
"code.gitea.io/gitea/modules/templates" | |||||
) | ) | ||||
const ( | const ( | ||||
@@ -74,7 +74,7 @@ func editFile(ctx *context.Context, isNewFile bool) { | |||||
d, _ := ioutil.ReadAll(dataRc) | d, _ := ioutil.ReadAll(dataRc) | ||||
buf = append(buf, d...) | buf = append(buf, d...) | ||||
if content, err := template.ToUTF8WithErr(buf); err != nil { | |||||
if content, err := templates.ToUTF8WithErr(buf); err != nil { | |||||
if err != nil { | if err != nil { | ||||
log.Error(4, "ToUTF8WithErr: %v", err) | log.Error(4, "ToUTF8WithErr: %v", err) | ||||
} | } | ||||
@@ -16,11 +16,11 @@ import ( | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
"code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
"code.gitea.io/gitea/modules/highlight" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/markdown" | "code.gitea.io/gitea/modules/markdown" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
"code.gitea.io/gitea/modules/template" | |||||
"code.gitea.io/gitea/modules/template/highlight" | |||||
"code.gitea.io/gitea/modules/templates" | |||||
"github.com/Unknwon/paginater" | "github.com/Unknwon/paginater" | ||||
) | ) | ||||
@@ -164,7 +164,7 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st | |||||
} else { | } else { | ||||
// Building code view blocks with line number on server side. | // Building code view blocks with line number on server side. | ||||
var fileContent string | var fileContent string | ||||
if content, err := template.ToUTF8WithErr(buf); err != nil { | |||||
if content, err := templates.ToUTF8WithErr(buf); err != nil { | |||||
if err != nil { | if err != nil { | ||||
log.Error(4, "ToUTF8WithErr: %s", err) | log.Error(4, "ToUTF8WithErr: %s", err) | ||||
} | } | ||||
@@ -1 +0,0 @@ | |||||
0.9.99.0915 |