mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-29 03:42:06 -05:00
Add tpl/site and tpl/hugo
This means that the current `.Site` and ´.Hugo` is available as a globals, so you can do `site.IsServer`, `hugo.Version` etc. Fixes #5470 Fixes #5467 Fixes #5503
This commit is contained in:
parent
514e18dc27
commit
831d23cb4d
35 changed files with 518 additions and 162 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,4 @@
|
||||||
hugo
|
/hugo
|
||||||
docs/public*
|
docs/public*
|
||||||
/.idea
|
/.idea
|
||||||
hugo.exe
|
hugo.exe
|
||||||
|
|
|
@ -17,10 +17,11 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/herrors"
|
|
||||||
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
|
||||||
jww "github.com/spf13/jwalterweatherman"
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
|
|
||||||
"os"
|
"os"
|
||||||
|
@ -105,7 +106,7 @@ func (c *commandeer) getErrorWithContext() interface{} {
|
||||||
m := make(map[string]interface{})
|
m := make(map[string]interface{})
|
||||||
|
|
||||||
m["Error"] = errors.New(removeErrorPrefixFromLog(c.logger.Errors()))
|
m["Error"] = errors.New(removeErrorPrefixFromLog(c.logger.Errors()))
|
||||||
m["Version"] = hugoVersionString()
|
m["Version"] = hugo.BuildVersionString()
|
||||||
|
|
||||||
fe := herrors.UnwrapErrorWithFileContext(c.buildErr)
|
fe := herrors.UnwrapErrorWithFileContext(c.buildErr)
|
||||||
if fe != nil {
|
if fe != nil {
|
||||||
|
@ -379,7 +380,7 @@ func (c *commandeer) loadConfig(mustHaveConfigFile, running bool) error {
|
||||||
if themeVersionMismatch {
|
if themeVersionMismatch {
|
||||||
name := filepath.Base(dir)
|
name := filepath.Base(dir)
|
||||||
cfg.Logger.ERROR.Printf("%s theme does not support Hugo version %s. Minimum version required is %s\n",
|
cfg.Logger.ERROR.Printf("%s theme does not support Hugo version %s. Minimum version required is %s\n",
|
||||||
strings.ToUpper(name), helpers.CurrentHugoVersion.ReleaseVersion(), minVersion)
|
strings.ToUpper(name), hugo.CurrentVersion.ReleaseVersion(), minVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -17,6 +17,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/helpers"
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -45,7 +46,7 @@ in the "man" directory under the current directory.`,
|
||||||
header := &doc.GenManHeader{
|
header := &doc.GenManHeader{
|
||||||
Section: "1",
|
Section: "1",
|
||||||
Manual: "Hugo Manual",
|
Manual: "Hugo Manual",
|
||||||
Source: fmt.Sprintf("Hugo %s", helpers.CurrentHugoVersion),
|
Source: fmt.Sprintf("Hugo %s", hugo.CurrentVersion),
|
||||||
}
|
}
|
||||||
if !strings.HasSuffix(cc.genmandir, helpers.FilePathSeparator) {
|
if !strings.HasSuffix(cc.genmandir, helpers.FilePathSeparator) {
|
||||||
cc.genmandir += helpers.FilePathSeparator
|
cc.genmandir += helpers.FilePathSeparator
|
||||||
|
|
|
@ -23,6 +23,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/herrors"
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
|
@ -1041,7 +1042,7 @@ func (c *commandeer) isThemeVsHugoVersionMismatch(fs afero.Fs) (dir string, mism
|
||||||
}
|
}
|
||||||
|
|
||||||
if minVersion, ok := tomlMeta["min_version"]; ok {
|
if minVersion, ok := tomlMeta["min_version"]; ok {
|
||||||
if helpers.CompareVersion(minVersion) > 0 {
|
if hugo.CompareVersion(minVersion) > 0 {
|
||||||
return absThemeDir, true, fmt.Sprint(minVersion)
|
return absThemeDir, true, fmt.Sprint(minVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,16 +14,9 @@
|
||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"runtime"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
jww "github.com/spf13/jwalterweatherman"
|
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/helpers"
|
|
||||||
"github.com/gohugoio/hugo/hugolib"
|
|
||||||
"github.com/gohugoio/hugo/resource/tocss/scss"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ cmder = (*versionCmd)(nil)
|
var _ cmder = (*versionCmd)(nil)
|
||||||
|
@ -47,29 +40,5 @@ func newVersionCmd() *versionCmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
func printHugoVersion() {
|
func printHugoVersion() {
|
||||||
jww.FEEDBACK.Println(hugoVersionString())
|
jww.FEEDBACK.Println(hugo.BuildVersionString())
|
||||||
}
|
|
||||||
|
|
||||||
func hugoVersionString() string {
|
|
||||||
program := "Hugo Static Site Generator"
|
|
||||||
|
|
||||||
version := "v" + helpers.CurrentHugoVersion.String()
|
|
||||||
if hugolib.CommitHash != "" {
|
|
||||||
version += "-" + strings.ToUpper(hugolib.CommitHash)
|
|
||||||
}
|
|
||||||
if scss.Supports() {
|
|
||||||
version += "/extended"
|
|
||||||
}
|
|
||||||
|
|
||||||
osArch := runtime.GOOS + "/" + runtime.GOARCH
|
|
||||||
|
|
||||||
var buildDate string
|
|
||||||
if hugolib.BuildDate != "" {
|
|
||||||
buildDate = hugolib.BuildDate
|
|
||||||
} else {
|
|
||||||
buildDate = "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Sprintf("%s %s %s BuildDate: %s", program, version, osArch, buildDate)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,11 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package hugolib
|
package hugo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/helpers"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -29,21 +27,19 @@ var (
|
||||||
BuildDate string
|
BuildDate string
|
||||||
)
|
)
|
||||||
|
|
||||||
var hugoInfo *HugoInfo
|
// Info contains information about the current Hugo environment
|
||||||
|
type Info struct {
|
||||||
// HugoInfo contains information about the current Hugo environment
|
Version VersionString
|
||||||
type HugoInfo struct {
|
|
||||||
Version helpers.HugoVersionString
|
|
||||||
Generator template.HTML
|
Generator template.HTML
|
||||||
CommitHash string
|
CommitHash string
|
||||||
BuildDate string
|
BuildDate string
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func NewInfo() Info {
|
||||||
hugoInfo = &HugoInfo{
|
return Info{
|
||||||
Version: helpers.CurrentHugoVersion.Version(),
|
Version: CurrentVersion.Version(),
|
||||||
CommitHash: CommitHash,
|
CommitHash: CommitHash,
|
||||||
BuildDate: BuildDate,
|
BuildDate: BuildDate,
|
||||||
Generator: template.HTML(fmt.Sprintf(`<meta name="generator" content="Hugo %s" />`, helpers.CurrentHugoVersion.String())),
|
Generator: template.HTML(fmt.Sprintf(`<meta name="generator" content="Hugo %s" />`, CurrentVersion.String())),
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,21 +11,22 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package hugolib
|
package hugo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/helpers"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestHugoInfo(t *testing.T) {
|
func TestHugoInfo(t *testing.T) {
|
||||||
assert := require.New(t)
|
assert := require.New(t)
|
||||||
|
|
||||||
assert.Equal(helpers.CurrentHugoVersion.Version(), hugoInfo.Version)
|
hugoInfo := NewInfo()
|
||||||
assert.IsType(helpers.HugoVersionString(""), hugoInfo.Version)
|
|
||||||
|
assert.Equal(CurrentVersion.Version(), hugoInfo.Version)
|
||||||
|
assert.IsType(VersionString(""), hugoInfo.Version)
|
||||||
assert.Equal(CommitHash, hugoInfo.CommitHash)
|
assert.Equal(CommitHash, hugoInfo.CommitHash)
|
||||||
assert.Equal(BuildDate, hugoInfo.BuildDate)
|
assert.Equal(BuildDate, hugoInfo.BuildDate)
|
||||||
assert.Contains(hugoInfo.Generator, fmt.Sprintf("Hugo %s", hugoInfo.Version))
|
assert.Contains(hugoInfo.Generator, fmt.Sprintf("Hugo %s", hugoInfo.Version))
|
24
common/hugo/site.go
Normal file
24
common/hugo/site.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package hugo
|
||||||
|
|
||||||
|
import "github.com/gohugoio/hugo/langs"
|
||||||
|
|
||||||
|
// Site represents a site in the build. This is currently a very narrow interface,
|
||||||
|
// but the actual implementation will be richer, see hugolib.SiteInfo.
|
||||||
|
type Site interface {
|
||||||
|
Language() *langs.Language
|
||||||
|
IsServer() bool
|
||||||
|
Hugo() Info
|
||||||
|
}
|
18
common/hugo/vars_extended.go
Normal file
18
common/hugo/vars_extended.go
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build extended
|
||||||
|
|
||||||
|
package hugo
|
||||||
|
|
||||||
|
var isExtended = true
|
18
common/hugo/vars_regular.go
Normal file
18
common/hugo/vars_regular.go
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// +build !extended
|
||||||
|
|
||||||
|
package hugo
|
||||||
|
|
||||||
|
var isExtended = false
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright 2015 The Hugo Authors. All rights reserved.
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -11,18 +11,20 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package helpers
|
package hugo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/compare"
|
"github.com/gohugoio/hugo/compare"
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HugoVersion represents the Hugo build version.
|
// Version represents the Hugo build version.
|
||||||
type HugoVersion struct {
|
type Version struct {
|
||||||
// Major and minor version.
|
// Major and minor version.
|
||||||
Number float32
|
Number float32
|
||||||
|
|
||||||
|
@ -35,34 +37,34 @@ type HugoVersion struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ compare.Eqer = (*HugoVersionString)(nil)
|
_ compare.Eqer = (*VersionString)(nil)
|
||||||
_ compare.Comparer = (*HugoVersionString)(nil)
|
_ compare.Comparer = (*VersionString)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
func (v HugoVersion) String() string {
|
func (v Version) String() string {
|
||||||
return hugoVersion(v.Number, v.PatchLevel, v.Suffix)
|
return version(v.Number, v.PatchLevel, v.Suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version returns the Hugo version.
|
// Version returns the Hugo version.
|
||||||
func (v HugoVersion) Version() HugoVersionString {
|
func (v Version) Version() VersionString {
|
||||||
return HugoVersionString(v.String())
|
return VersionString(v.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
// HugoVersionString represents a Hugo version string.
|
// VersionString represents a Hugo version string.
|
||||||
type HugoVersionString string
|
type VersionString string
|
||||||
|
|
||||||
func (h HugoVersionString) String() string {
|
func (h VersionString) String() string {
|
||||||
return string(h)
|
return string(h)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compare implements the compare.Comparer interface.
|
// Compare implements the compare.Comparer interface.
|
||||||
func (h HugoVersionString) Compare(other interface{}) int {
|
func (h VersionString) Compare(other interface{}) int {
|
||||||
v := MustParseHugoVersion(h.String())
|
v := MustParseVersion(h.String())
|
||||||
return compareVersionsWithSuffix(v.Number, v.PatchLevel, v.Suffix, other)
|
return compareVersionsWithSuffix(v.Number, v.PatchLevel, v.Suffix, other)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eq implements the compare.Eqer interface.
|
// Eq implements the compare.Eqer interface.
|
||||||
func (h HugoVersionString) Eq(other interface{}) bool {
|
func (h VersionString) Eq(other interface{}) bool {
|
||||||
s, err := cast.ToStringE(other)
|
s, err := cast.ToStringE(other)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
|
@ -72,9 +74,9 @@ func (h HugoVersionString) Eq(other interface{}) bool {
|
||||||
|
|
||||||
var versionSuffixes = []string{"-test", "-DEV"}
|
var versionSuffixes = []string{"-test", "-DEV"}
|
||||||
|
|
||||||
// ParseHugoVersion parses a version string.
|
// ParseVersion parses a version string.
|
||||||
func ParseHugoVersion(s string) (HugoVersion, error) {
|
func ParseVersion(s string) (Version, error) {
|
||||||
var vv HugoVersion
|
var vv Version
|
||||||
for _, suffix := range versionSuffixes {
|
for _, suffix := range versionSuffixes {
|
||||||
if strings.HasSuffix(s, suffix) {
|
if strings.HasSuffix(s, suffix) {
|
||||||
vv.Suffix = suffix
|
vv.Suffix = suffix
|
||||||
|
@ -90,10 +92,10 @@ func ParseHugoVersion(s string) (HugoVersion, error) {
|
||||||
return vv, nil
|
return vv, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MustParseHugoVersion parses a version string
|
// MustParseVersion parses a version string
|
||||||
// and panics if any error occurs.
|
// and panics if any error occurs.
|
||||||
func MustParseHugoVersion(s string) HugoVersion {
|
func MustParseVersion(s string) Version {
|
||||||
vv, err := ParseHugoVersion(s)
|
vv, err := ParseVersion(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -101,36 +103,54 @@ func MustParseHugoVersion(s string) HugoVersion {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReleaseVersion represents the release version.
|
// ReleaseVersion represents the release version.
|
||||||
func (v HugoVersion) ReleaseVersion() HugoVersion {
|
func (v Version) ReleaseVersion() Version {
|
||||||
v.Suffix = ""
|
v.Suffix = ""
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next returns the next Hugo release version.
|
// Next returns the next Hugo release version.
|
||||||
func (v HugoVersion) Next() HugoVersion {
|
func (v Version) Next() Version {
|
||||||
return HugoVersion{Number: v.Number + 0.01}
|
return Version{Number: v.Number + 0.01}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prev returns the previous Hugo release version.
|
// Prev returns the previous Hugo release version.
|
||||||
func (v HugoVersion) Prev() HugoVersion {
|
func (v Version) Prev() Version {
|
||||||
return HugoVersion{Number: v.Number - 0.01}
|
return Version{Number: v.Number - 0.01}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NextPatchLevel returns the next patch/bugfix Hugo version.
|
// NextPatchLevel returns the next patch/bugfix Hugo version.
|
||||||
// This will be a patch increment on the previous Hugo version.
|
// This will be a patch increment on the previous Hugo version.
|
||||||
func (v HugoVersion) NextPatchLevel(level int) HugoVersion {
|
func (v Version) NextPatchLevel(level int) Version {
|
||||||
return HugoVersion{Number: v.Number - 0.01, PatchLevel: level}
|
return Version{Number: v.Number - 0.01, PatchLevel: level}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CurrentHugoVersion represents the current build version.
|
// BuildVersionString creates a version string. This is what you see when
|
||||||
// This should be the only one.
|
// running "hugo version".
|
||||||
var CurrentHugoVersion = HugoVersion{
|
func BuildVersionString() string {
|
||||||
Number: 0.53,
|
program := "Hugo Static Site Generator"
|
||||||
PatchLevel: 0,
|
|
||||||
Suffix: "-DEV",
|
version := "v" + CurrentVersion.String()
|
||||||
|
if CommitHash != "" {
|
||||||
|
version += "-" + strings.ToUpper(CommitHash)
|
||||||
|
}
|
||||||
|
if isExtended {
|
||||||
|
version += "/extended"
|
||||||
}
|
}
|
||||||
|
|
||||||
func hugoVersion(version float32, patchVersion int, suffix string) string {
|
osArch := runtime.GOOS + "/" + runtime.GOARCH
|
||||||
|
|
||||||
|
var buildDate string
|
||||||
|
if BuildDate != "" {
|
||||||
|
buildDate = BuildDate
|
||||||
|
} else {
|
||||||
|
buildDate = "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("%s %s %s BuildDate: %s", program, version, osArch, buildDate)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func version(version float32, patchVersion int, suffix string) string {
|
||||||
if patchVersion > 0 {
|
if patchVersion > 0 {
|
||||||
return fmt.Sprintf("%.2f.%d%s", version, patchVersion, suffix)
|
return fmt.Sprintf("%.2f.%d%s", version, patchVersion, suffix)
|
||||||
}
|
}
|
||||||
|
@ -142,7 +162,7 @@ func hugoVersion(version float32, patchVersion int, suffix string) string {
|
||||||
// It returns -1 if the given version is less than, 0 if equal and 1 if greater than
|
// It returns -1 if the given version is less than, 0 if equal and 1 if greater than
|
||||||
// the running version.
|
// the running version.
|
||||||
func CompareVersion(version interface{}) int {
|
func CompareVersion(version interface{}) int {
|
||||||
return compareVersionsWithSuffix(CurrentHugoVersion.Number, CurrentHugoVersion.PatchLevel, CurrentHugoVersion.Suffix, version)
|
return compareVersionsWithSuffix(CurrentVersion.Number, CurrentVersion.PatchLevel, CurrentVersion.Suffix, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
func compareVersions(inVersion float32, inPatchVersion int, in interface{}) int {
|
func compareVersions(inVersion float32, inPatchVersion int, in interface{}) int {
|
||||||
|
@ -168,7 +188,7 @@ func compareVersionsWithSuffix(inVersion float32, inPatchVersion int, suffix str
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
v, err := ParseHugoVersion(s)
|
v, err := ParseVersion(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
22
common/hugo/version_current.go
Normal file
22
common/hugo/version_current.go
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package hugo
|
||||||
|
|
||||||
|
// CurrentVersion represents the current build version.
|
||||||
|
// This should be the only one.
|
||||||
|
var CurrentVersion = Version{
|
||||||
|
Number: 0.53,
|
||||||
|
PatchLevel: 0,
|
||||||
|
Suffix: "-DEV",
|
||||||
|
}
|
|
@ -11,7 +11,7 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package helpers
|
package hugo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -21,10 +21,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestHugoVersion(t *testing.T) {
|
func TestHugoVersion(t *testing.T) {
|
||||||
assert.Equal(t, "0.15-DEV", hugoVersion(0.15, 0, "-DEV"))
|
assert.Equal(t, "0.15-DEV", version(0.15, 0, "-DEV"))
|
||||||
assert.Equal(t, "0.15.2-DEV", hugoVersion(0.15, 2, "-DEV"))
|
assert.Equal(t, "0.15.2-DEV", version(0.15, 2, "-DEV"))
|
||||||
|
|
||||||
v := HugoVersion{Number: 0.21, PatchLevel: 0, Suffix: "-DEV"}
|
v := Version{Number: 0.21, PatchLevel: 0, Suffix: "-DEV"}
|
||||||
|
|
||||||
require.Equal(t, v.ReleaseVersion().String(), "0.21")
|
require.Equal(t, v.ReleaseVersion().String(), "0.21")
|
||||||
require.Equal(t, "0.21-DEV", v.String())
|
require.Equal(t, "0.21-DEV", v.String())
|
||||||
|
@ -62,9 +62,9 @@ func TestCompareVersions(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseHugoVersion(t *testing.T) {
|
func TestParseHugoVersion(t *testing.T) {
|
||||||
require.Equal(t, "0.25", MustParseHugoVersion("0.25").String())
|
require.Equal(t, "0.25", MustParseVersion("0.25").String())
|
||||||
require.Equal(t, "0.25.2", MustParseHugoVersion("0.25.2").String())
|
require.Equal(t, "0.25.2", MustParseVersion("0.25.2").String())
|
||||||
require.Equal(t, "0.25-test", MustParseHugoVersion("0.25-test").String())
|
require.Equal(t, "0.25-test", MustParseVersion("0.25-test").String())
|
||||||
require.Equal(t, "0.25-DEV", MustParseHugoVersion("0.25-DEV").String())
|
require.Equal(t, "0.25-DEV", MustParseVersion("0.25-DEV").String())
|
||||||
|
|
||||||
}
|
}
|
19
deps/deps.go
vendored
19
deps/deps.go
vendored
|
@ -7,6 +7,7 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/cache/filecache"
|
"github.com/gohugoio/hugo/cache/filecache"
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
"github.com/gohugoio/hugo/config"
|
"github.com/gohugoio/hugo/config"
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/helpers"
|
||||||
|
@ -62,8 +63,12 @@ type Deps struct {
|
||||||
// The translation func to use
|
// The translation func to use
|
||||||
Translate func(translationID string, args ...interface{}) string `json:"-"`
|
Translate func(translationID string, args ...interface{}) string `json:"-"`
|
||||||
|
|
||||||
|
// The language in use. TODO(bep) consolidate with site
|
||||||
Language *langs.Language
|
Language *langs.Language
|
||||||
|
|
||||||
|
// The site building.
|
||||||
|
Site hugo.Site
|
||||||
|
|
||||||
// All the output formats available for the current site.
|
// All the output formats available for the current site.
|
||||||
OutputFormatsConfig output.Formats
|
OutputFormatsConfig output.Formats
|
||||||
|
|
||||||
|
@ -230,6 +235,7 @@ func New(cfg DepsCfg) (*Deps, error) {
|
||||||
ResourceSpec: resourceSpec,
|
ResourceSpec: resourceSpec,
|
||||||
Cfg: cfg.Language,
|
Cfg: cfg.Language,
|
||||||
Language: cfg.Language,
|
Language: cfg.Language,
|
||||||
|
Site: cfg.Site,
|
||||||
FileCaches: fileCaches,
|
FileCaches: fileCaches,
|
||||||
BuildStartListeners: &Listeners{},
|
BuildStartListeners: &Listeners{},
|
||||||
Timeout: time.Duration(timeoutms) * time.Millisecond,
|
Timeout: time.Duration(timeoutms) * time.Millisecond,
|
||||||
|
@ -245,7 +251,7 @@ func New(cfg DepsCfg) (*Deps, error) {
|
||||||
|
|
||||||
// ForLanguage creates a copy of the Deps with the language dependent
|
// ForLanguage creates a copy of the Deps with the language dependent
|
||||||
// parts switched out.
|
// parts switched out.
|
||||||
func (d Deps) ForLanguage(cfg DepsCfg) (*Deps, error) {
|
func (d Deps) ForLanguage(cfg DepsCfg, onCreated func(d *Deps) error) (*Deps, error) {
|
||||||
l := cfg.Language
|
l := cfg.Language
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
@ -259,6 +265,8 @@ func (d Deps) ForLanguage(cfg DepsCfg) (*Deps, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.Site = cfg.Site
|
||||||
|
|
||||||
// The resource cache is global so reuse.
|
// The resource cache is global so reuse.
|
||||||
// TODO(bep) clean up these inits.
|
// TODO(bep) clean up these inits.
|
||||||
resourceCache := d.ResourceSpec.ResourceCache
|
resourceCache := d.ResourceSpec.ResourceCache
|
||||||
|
@ -271,6 +279,12 @@ func (d Deps) ForLanguage(cfg DepsCfg) (*Deps, error) {
|
||||||
d.Cfg = l
|
d.Cfg = l
|
||||||
d.Language = l
|
d.Language = l
|
||||||
|
|
||||||
|
if onCreated != nil {
|
||||||
|
if err = onCreated(&d); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := d.translationProvider.Clone(&d); err != nil {
|
if err := d.translationProvider.Clone(&d); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -299,6 +313,9 @@ type DepsCfg struct {
|
||||||
// The language to use.
|
// The language to use.
|
||||||
Language *langs.Language
|
Language *langs.Language
|
||||||
|
|
||||||
|
// The Site in use
|
||||||
|
Site hugo.Site
|
||||||
|
|
||||||
// The configuration to use.
|
// The configuration to use.
|
||||||
Cfg config.Provider
|
Cfg config.Provider
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ project_name: hugo_extended
|
||||||
builds:
|
builds:
|
||||||
- binary: hugo
|
- binary: hugo
|
||||||
ldflags:
|
ldflags:
|
||||||
- -s -w -X github.com/gohugoio/hugo/hugolib.BuildDate={{.Date}}
|
- -s -w -X github.com/gohugoio/hugo/common/hugo.BuildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.CommitHash={{ .ShortCommit }}
|
||||||
- "-extldflags '-static'"
|
- "-extldflags '-static'"
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1
|
- CGO_ENABLED=1
|
||||||
|
|
|
@ -2,7 +2,7 @@ project_name: hugo
|
||||||
build:
|
build:
|
||||||
main: main.go
|
main: main.go
|
||||||
binary: hugo
|
binary: hugo
|
||||||
ldflags: -s -w -X github.com/gohugoio/hugo/hugolib.BuildDate={{.Date}}
|
ldflags: -s -w -X github.com/gohugoio/hugo/common/hugo.BuildDate={{.Date}} -X github.com/gohugoio/hugo/common/hugo.CommitHash={{ .ShortCommit }}
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=0
|
- CGO_ENABLED=0
|
||||||
goos:
|
goos:
|
||||||
|
|
|
@ -27,6 +27,8 @@ import (
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
|
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
|
@ -324,7 +326,7 @@ func InitLoggers() {
|
||||||
// plenty of time to fix their templates.
|
// plenty of time to fix their templates.
|
||||||
func Deprecated(object, item, alternative string, err bool) {
|
func Deprecated(object, item, alternative string, err bool) {
|
||||||
if err {
|
if err {
|
||||||
DistinctErrorLog.Printf("%s's %s is deprecated and will be removed in Hugo %s. %s", object, item, CurrentHugoVersion.Next().ReleaseVersion(), alternative)
|
DistinctErrorLog.Printf("%s's %s is deprecated and will be removed in Hugo %s. %s", object, item, hugo.CurrentVersion.Next().ReleaseVersion(), alternative)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Make sure the users see this while avoiding build breakage. This will not lead to an os.Exit(-1)
|
// Make sure the users see this while avoiding build breakage. This will not lead to an os.Exit(-1)
|
||||||
|
|
51
htesting/test_structs.go
Normal file
51
htesting/test_structs.go
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package htesting
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
"github.com/gohugoio/hugo/langs"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
type testSite struct {
|
||||||
|
h hugo.Info
|
||||||
|
l *langs.Language
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t testSite) Hugo() hugo.Info {
|
||||||
|
return t.h
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t testSite) IsServer() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t testSite) Language() *langs.Language {
|
||||||
|
return t.l
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTestHugoSite creates a new minimal test site.
|
||||||
|
func NewTestHugoSite() hugo.Site {
|
||||||
|
return testSite{
|
||||||
|
h: hugo.NewInfo(),
|
||||||
|
l: langs.NewLanguage("en", newTestConfig()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTestConfig() *viper.Viper {
|
||||||
|
v := viper.New()
|
||||||
|
v.Set("contentDir", "content")
|
||||||
|
return v
|
||||||
|
}
|
|
@ -21,12 +21,13 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/publisher"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/herrors"
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
"github.com/gohugoio/hugo/deps"
|
"github.com/gohugoio/hugo/deps"
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/helpers"
|
||||||
"github.com/gohugoio/hugo/langs"
|
"github.com/gohugoio/hugo/langs"
|
||||||
"github.com/gohugoio/hugo/publisher"
|
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/i18n"
|
"github.com/gohugoio/hugo/i18n"
|
||||||
"github.com/gohugoio/hugo/tpl"
|
"github.com/gohugoio/hugo/tpl"
|
||||||
|
@ -224,6 +225,27 @@ func applyDeps(cfg deps.DepsCfg, sites ...*Site) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onCreated := func(d *deps.Deps) error {
|
||||||
|
s.Deps = d
|
||||||
|
|
||||||
|
// Set up the main publishing chain.
|
||||||
|
s.publisher = publisher.NewDestinationPublisher(d.PathSpec.BaseFs.PublishFs, s.outputFormatsConfig, s.mediaTypesConfig, cfg.Cfg.GetBool("minify"))
|
||||||
|
|
||||||
|
if err := s.initializeSiteInfo(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.Site = &s.Info
|
||||||
|
|
||||||
|
siteConfig, err := loadSiteConfig(s.Language)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s.siteConfig = siteConfig
|
||||||
|
s.siteRefLinker, err = newSiteRefLinker(s.Language, s)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
cfg.Language = s.Language
|
cfg.Language = s.Language
|
||||||
cfg.MediaTypes = s.mediaTypesConfig
|
cfg.MediaTypes = s.mediaTypesConfig
|
||||||
cfg.OutputFormats = s.outputFormatsConfig
|
cfg.OutputFormats = s.outputFormatsConfig
|
||||||
|
@ -238,37 +260,23 @@ func applyDeps(cfg deps.DepsCfg, sites ...*Site) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
d.OutputFormatsConfig = s.outputFormatsConfig
|
d.OutputFormatsConfig = s.outputFormatsConfig
|
||||||
s.Deps = d
|
|
||||||
|
if err := onCreated(d); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err = d.LoadResources(); err != nil {
|
if err = d.LoadResources(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
d, err = d.ForLanguage(cfg)
|
d, err = d.ForLanguage(cfg, onCreated)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.OutputFormatsConfig = s.outputFormatsConfig
|
d.OutputFormatsConfig = s.outputFormatsConfig
|
||||||
s.Deps = d
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the main publishing chain.
|
|
||||||
s.publisher = publisher.NewDestinationPublisher(d.PathSpec.BaseFs.PublishFs, s.outputFormatsConfig, s.mediaTypesConfig, cfg.Cfg.GetBool("minify"))
|
|
||||||
|
|
||||||
if err := s.initializeSiteInfo(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
siteConfig, err := loadSiteConfig(s.Language)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
s.siteConfig = siteConfig
|
|
||||||
s.siteRefLinker, err = newSiteRefLinker(s.Language, s)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -21,6 +21,8 @@ import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
"github.com/gohugoio/hugo/common/urls"
|
"github.com/gohugoio/hugo/common/urls"
|
||||||
"github.com/gohugoio/hugo/media"
|
"github.com/gohugoio/hugo/media"
|
||||||
|
@ -1873,8 +1875,8 @@ func (p *Page) copy(initContent bool) *Page {
|
||||||
return &c
|
return &c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Page) Hugo() *HugoInfo {
|
func (p *Page) Hugo() hugo.Info {
|
||||||
return hugoInfo
|
return p.s.Info.hugoInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPage looks up a page for the given ref.
|
// GetPage looks up a page for the given ref.
|
||||||
|
|
|
@ -1436,7 +1436,7 @@ func TestIndexPageSimpleMethods(t *testing.T) {
|
||||||
{func(n *Page) bool { return n.IsNode() }},
|
{func(n *Page) bool { return n.IsNode() }},
|
||||||
{func(n *Page) bool { return !n.IsPage() }},
|
{func(n *Page) bool { return !n.IsPage() }},
|
||||||
{func(n *Page) bool { return n.Scratch() != nil }},
|
{func(n *Page) bool { return n.Scratch() != nil }},
|
||||||
{func(n *Page) bool { return n.Hugo() != nil }},
|
{func(n *Page) bool { return n.Hugo().Version != "" }},
|
||||||
} {
|
} {
|
||||||
|
|
||||||
n := s.newHomePage()
|
n := s.newHomePage()
|
||||||
|
|
|
@ -66,7 +66,7 @@ func TestMergeLanguages(t *testing.T) {
|
||||||
|
|
||||||
firstNN := nnSite.RegularPages[0]
|
firstNN := nnSite.RegularPages[0]
|
||||||
assert.Equal(4, len(firstNN.Sites()))
|
assert.Equal(4, len(firstNN.Sites()))
|
||||||
assert.Equal("en", firstNN.Sites().First().Language.Lang)
|
assert.Equal("en", firstNN.Sites().First().Language().Lang)
|
||||||
|
|
||||||
nnBundle := nnSite.getPage("page", "bundle")
|
nnBundle := nnSite.getPage("page", "bundle")
|
||||||
enBundle := enSite.getPage("page", "bundle")
|
enBundle := enSite.getPage("page", "bundle")
|
||||||
|
|
|
@ -36,11 +36,11 @@ import (
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/herrors"
|
"github.com/gohugoio/hugo/common/herrors"
|
||||||
|
|
||||||
_errors "github.com/pkg/errors"
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
"github.com/gohugoio/hugo/publisher"
|
"github.com/gohugoio/hugo/publisher"
|
||||||
"github.com/gohugoio/hugo/resource"
|
"github.com/gohugoio/hugo/resource"
|
||||||
|
_errors "github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/langs"
|
"github.com/gohugoio/hugo/langs"
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ type SiteInfo struct {
|
||||||
Social SiteSocial
|
Social SiteSocial
|
||||||
*PageCollections
|
*PageCollections
|
||||||
Menus *Menus
|
Menus *Menus
|
||||||
Hugo *HugoInfo
|
hugoInfo hugo.Info
|
||||||
Title string
|
Title string
|
||||||
RSSLink string
|
RSSLink string
|
||||||
Author map[string]interface{}
|
Author map[string]interface{}
|
||||||
|
@ -405,17 +405,25 @@ type SiteInfo struct {
|
||||||
Data *map[string]interface{}
|
Data *map[string]interface{}
|
||||||
owner *HugoSites
|
owner *HugoSites
|
||||||
s *Site
|
s *Site
|
||||||
Language *langs.Language
|
language *langs.Language
|
||||||
LanguagePrefix string
|
LanguagePrefix string
|
||||||
Languages langs.Languages
|
Languages langs.Languages
|
||||||
defaultContentLanguageInSubdir bool
|
defaultContentLanguageInSubdir bool
|
||||||
sectionPagesMenu string
|
sectionPagesMenu string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SiteInfo) Language() *langs.Language {
|
||||||
|
return s.language
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SiteInfo) Config() SiteConfig {
|
func (s *SiteInfo) Config() SiteConfig {
|
||||||
return s.s.siteConfig
|
return s.s.siteConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SiteInfo) Hugo() hugo.Info {
|
||||||
|
return s.hugoInfo
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SiteInfo) String() string {
|
func (s *SiteInfo) String() string {
|
||||||
return fmt.Sprintf("Site(%q)", s.Title)
|
return fmt.Sprintf("Site(%q)", s.Title)
|
||||||
}
|
}
|
||||||
|
@ -797,7 +805,10 @@ func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) {
|
||||||
MediaTypes: site.mediaTypesConfig,
|
MediaTypes: site.mediaTypesConfig,
|
||||||
OutputFormats: site.outputFormatsConfig,
|
OutputFormats: site.outputFormatsConfig,
|
||||||
}
|
}
|
||||||
site.Deps, err = first.Deps.ForLanguage(depsCfg)
|
site.Deps, err = first.Deps.ForLanguage(depsCfg, func(d *deps.Deps) error {
|
||||||
|
d.Site = &site.Info
|
||||||
|
return nil
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return whatChanged{}, err
|
return whatChanged{}, err
|
||||||
}
|
}
|
||||||
|
@ -1122,7 +1133,7 @@ func (s *Site) initialize() (err error) {
|
||||||
func (s *SiteInfo) HomeAbsURL() string {
|
func (s *SiteInfo) HomeAbsURL() string {
|
||||||
base := ""
|
base := ""
|
||||||
if s.IsMultiLingual() {
|
if s.IsMultiLingual() {
|
||||||
base = s.Language.Lang
|
base = s.Language().Lang
|
||||||
}
|
}
|
||||||
return s.owner.AbsURL(base, false)
|
return s.owner.AbsURL(base, false)
|
||||||
}
|
}
|
||||||
|
@ -1194,7 +1205,7 @@ func (s *Site) initializeSiteInfo() error {
|
||||||
Social: lang.GetStringMapString("social"),
|
Social: lang.GetStringMapString("social"),
|
||||||
LanguageCode: lang.GetString("languageCode"),
|
LanguageCode: lang.GetString("languageCode"),
|
||||||
Copyright: lang.GetString("copyright"),
|
Copyright: lang.GetString("copyright"),
|
||||||
Language: lang,
|
language: lang,
|
||||||
LanguagePrefix: languagePrefix,
|
LanguagePrefix: languagePrefix,
|
||||||
Languages: languages,
|
Languages: languages,
|
||||||
defaultContentLanguageInSubdir: defaultContentInSubDir,
|
defaultContentLanguageInSubdir: defaultContentInSubDir,
|
||||||
|
@ -1211,6 +1222,7 @@ func (s *Site) initializeSiteInfo() error {
|
||||||
Data: &s.Data,
|
Data: &s.Data,
|
||||||
owner: s.owner,
|
owner: s.owner,
|
||||||
s: s,
|
s: s,
|
||||||
|
hugoInfo: hugo.NewInfo(),
|
||||||
// TODO(bep) make this Menu and similar into delegate methods on SiteInfo
|
// TODO(bep) make this Menu and similar into delegate methods on SiteInfo
|
||||||
Taxonomies: s.Taxonomies,
|
Taxonomies: s.Taxonomies,
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,3 +236,24 @@ Page Content
|
||||||
b.AssertFileContent("public/page/index.html", "Base: Hi!?")
|
b.AssertFileContent("public/page/index.html", "Base: Hi!?")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTemplateFuncs(t *testing.T) {
|
||||||
|
|
||||||
|
b := newTestSitesBuilder(t).WithDefaultMultiSiteConfig()
|
||||||
|
|
||||||
|
homeTpl := `Site: {{ site.Language.Lang }} / {{ .Site.Language.Lang }} / {{ site.BaseURL }}
|
||||||
|
Hugo: {{ hugo.Generator }}
|
||||||
|
`
|
||||||
|
|
||||||
|
b.WithTemplatesAdded(
|
||||||
|
"index.html", homeTpl,
|
||||||
|
"index.fr.html", homeTpl,
|
||||||
|
)
|
||||||
|
|
||||||
|
b.CreateSites().Build(BuildCfg{})
|
||||||
|
|
||||||
|
b.AssertFileContent("public/en/index.html", "Site: en / en / http://example.com/blog",
|
||||||
|
"Hugo: <meta name=\"generator\" content=\"Hugo")
|
||||||
|
b.AssertFileContent("public/fr/index.html", "Site: fr / fr / http://example.com/blog")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"github.com/gohugoio/hugo/tpl/tplimpl"
|
"github.com/gohugoio/hugo/tpl/tplimpl"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
|
"github.com/gohugoio/hugo/htesting"
|
||||||
"github.com/gohugoio/hugo/langs"
|
"github.com/gohugoio/hugo/langs"
|
||||||
"github.com/spf13/afero"
|
"github.com/spf13/afero"
|
||||||
|
|
||||||
|
@ -183,6 +184,7 @@ func newDepsConfig(tp *TranslationProvider, cfg config.Provider, fs *hugofs.Fs)
|
||||||
l.Set("i18nDir", "i18n")
|
l.Set("i18nDir", "i18n")
|
||||||
return deps.DepsCfg{
|
return deps.DepsCfg{
|
||||||
Language: l,
|
Language: l,
|
||||||
|
Site: htesting.NewTestHugoSite(),
|
||||||
Cfg: cfg,
|
Cfg: cfg,
|
||||||
Fs: fs,
|
Fs: fs,
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
|
|
|
@ -21,10 +21,10 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
packageName = "github.com/gohugoio/hugo"
|
packageName = "github.com/gohugoio/hugo"
|
||||||
noGitLdflags = "-X $PACKAGE/hugolib.BuildDate=$BUILD_DATE"
|
noGitLdflags = "-X $PACKAGE/common/hugo.BuildDate=$BUILD_DATE"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ldflags = "-X $PACKAGE/hugolib.CommitHash=$COMMIT_HASH -X $PACKAGE/hugolib.BuildDate=$BUILD_DATE"
|
var ldflags = "-X $PACKAGE/common/hugo.CommitHash=$COMMIT_HASH -X $PACKAGE/common/hugo.BuildDate=$BUILD_DATE"
|
||||||
|
|
||||||
// allow user to override go executable by running as GOEXE=xxx make ... on unix-like systems
|
// allow user to override go executable by running as GOEXE=xxx make ... on unix-like systems
|
||||||
var goexe = "go"
|
var goexe = "go"
|
||||||
|
|
|
@ -25,9 +25,8 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/helpers"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const commitPrefix = "releaser:"
|
const commitPrefix = "releaser:"
|
||||||
|
@ -52,8 +51,8 @@ type ReleaseHandler struct {
|
||||||
git func(args ...string) (string, error)
|
git func(args ...string) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r ReleaseHandler) calculateVersions() (helpers.HugoVersion, helpers.HugoVersion) {
|
func (r ReleaseHandler) calculateVersions() (hugo.Version, hugo.Version) {
|
||||||
newVersion := helpers.MustParseHugoVersion(r.cliVersion)
|
newVersion := hugo.MustParseVersion(r.cliVersion)
|
||||||
finalVersion := newVersion.Next()
|
finalVersion := newVersion.Next()
|
||||||
finalVersion.PatchLevel = 0
|
finalVersion.PatchLevel = 0
|
||||||
|
|
||||||
|
@ -261,14 +260,14 @@ func (r *ReleaseHandler) release(releaseNotesFile string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ReleaseHandler) bumpVersions(ver helpers.HugoVersion) error {
|
func (r *ReleaseHandler) bumpVersions(ver hugo.Version) error {
|
||||||
toDev := ""
|
toDev := ""
|
||||||
|
|
||||||
if ver.Suffix != "" {
|
if ver.Suffix != "" {
|
||||||
toDev = ver.Suffix
|
toDev = ver.Suffix
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.replaceInFile("helpers/hugo.go",
|
if err := r.replaceInFile("common/hugo/version_current.go",
|
||||||
`Number:(\s{4,})(.*),`, fmt.Sprintf(`Number:${1}%.2f,`, ver.Number),
|
`Number:(\s{4,})(.*),`, fmt.Sprintf(`Number:${1}%.2f,`, ver.Number),
|
||||||
`PatchLevel:(\s*)(.*),`, fmt.Sprintf(`PatchLevel:${1}%d,`, ver.PatchLevel),
|
`PatchLevel:(\s*)(.*),`, fmt.Sprintf(`PatchLevel:${1}%d,`, ver.PatchLevel),
|
||||||
`Suffix:(\s{4,})".*",`, fmt.Sprintf(`Suffix:${1}"%s",`, toDev)); err != nil {
|
`Suffix:(\s{4,})".*",`, fmt.Sprintf(`Suffix:${1}"%s",`, toDev)); err != nil {
|
||||||
|
|
|
@ -21,8 +21,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -173,17 +172,17 @@ func doTestCompare(t *testing.T, tp tstCompareType, funcUnderTest func(a, b inte
|
||||||
{tstEqerType1("a"), tstEqerType2("a"), 0},
|
{tstEqerType1("a"), tstEqerType2("a"), 0},
|
||||||
{tstEqerType2("a"), tstEqerType1("a"), 0},
|
{tstEqerType2("a"), tstEqerType1("a"), 0},
|
||||||
{tstEqerType2("a"), tstEqerType1("b"), -1},
|
{tstEqerType2("a"), tstEqerType1("b"), -1},
|
||||||
{helpers.MustParseHugoVersion("0.32.1").Version(), helpers.MustParseHugoVersion("0.32").Version(), 1},
|
{hugo.MustParseVersion("0.32.1").Version(), hugo.MustParseVersion("0.32").Version(), 1},
|
||||||
{helpers.MustParseHugoVersion("0.35").Version(), helpers.MustParseHugoVersion("0.32").Version(), 1},
|
{hugo.MustParseVersion("0.35").Version(), hugo.MustParseVersion("0.32").Version(), 1},
|
||||||
{helpers.MustParseHugoVersion("0.36").Version(), helpers.MustParseHugoVersion("0.36").Version(), 0},
|
{hugo.MustParseVersion("0.36").Version(), hugo.MustParseVersion("0.36").Version(), 0},
|
||||||
{helpers.MustParseHugoVersion("0.32").Version(), helpers.MustParseHugoVersion("0.36").Version(), -1},
|
{hugo.MustParseVersion("0.32").Version(), hugo.MustParseVersion("0.36").Version(), -1},
|
||||||
{helpers.MustParseHugoVersion("0.32").Version(), "0.36", -1},
|
{hugo.MustParseVersion("0.32").Version(), "0.36", -1},
|
||||||
{"0.36", helpers.MustParseHugoVersion("0.32").Version(), 1},
|
{"0.36", hugo.MustParseVersion("0.32").Version(), 1},
|
||||||
{"0.36", helpers.MustParseHugoVersion("0.36").Version(), 0},
|
{"0.36", hugo.MustParseVersion("0.36").Version(), 0},
|
||||||
{"0.37", helpers.MustParseHugoVersion("0.37-DEV").Version(), 1},
|
{"0.37", hugo.MustParseVersion("0.37-DEV").Version(), 1},
|
||||||
{"0.37-DEV", helpers.MustParseHugoVersion("0.37").Version(), -1},
|
{"0.37-DEV", hugo.MustParseVersion("0.37").Version(), -1},
|
||||||
{"0.36", helpers.MustParseHugoVersion("0.37-DEV").Version(), -1},
|
{"0.36", hugo.MustParseVersion("0.37-DEV").Version(), -1},
|
||||||
{"0.37-DEV", helpers.MustParseHugoVersion("0.37-DEV").Version(), 0},
|
{"0.37-DEV", hugo.MustParseVersion("0.37-DEV").Version(), 0},
|
||||||
} {
|
} {
|
||||||
result := funcUnderTest(test.left, test.right)
|
result := funcUnderTest(test.left, test.right)
|
||||||
success := false
|
success := false
|
||||||
|
|
41
tpl/hugo/init.go
Normal file
41
tpl/hugo/init.go
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package site
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gohugoio/hugo/deps"
|
||||||
|
"github.com/gohugoio/hugo/htesting"
|
||||||
|
"github.com/gohugoio/hugo/tpl/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
const name = "hugo"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
f := func(d *deps.Deps) *internal.TemplateFuncsNamespace {
|
||||||
|
|
||||||
|
h := htesting.NewTestHugoSite().Hugo()
|
||||||
|
|
||||||
|
ns := &internal.TemplateFuncsNamespace{
|
||||||
|
Name: name,
|
||||||
|
Context: func(args ...interface{}) interface{} { return h },
|
||||||
|
}
|
||||||
|
|
||||||
|
// We just add the Hugo struct as the namespace here. No method mappings.
|
||||||
|
|
||||||
|
return ns
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
internal.AddTemplateFuncsNamespace(f)
|
||||||
|
}
|
41
tpl/hugo/init_test.go
Normal file
41
tpl/hugo/init_test.go
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright 2017 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package site
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/htesting"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/deps"
|
||||||
|
"github.com/gohugoio/hugo/tpl/internal"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInit(t *testing.T) {
|
||||||
|
var found bool
|
||||||
|
var ns *internal.TemplateFuncsNamespace
|
||||||
|
s := htesting.NewTestHugoSite()
|
||||||
|
|
||||||
|
for _, nsf := range internal.TemplateFuncsNamespaceRegistry {
|
||||||
|
ns = nsf(&deps.Deps{Site: s})
|
||||||
|
if ns.Name == name {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require.True(t, found)
|
||||||
|
require.IsType(t, s.Hugo(), ns.Context())
|
||||||
|
}
|
44
tpl/site/init.go
Normal file
44
tpl/site/init.go
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
// Copyright 2018 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package site
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gohugoio/hugo/deps"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/tpl/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
const name = "site"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
f := func(d *deps.Deps) *internal.TemplateFuncsNamespace {
|
||||||
|
|
||||||
|
s := d.Site
|
||||||
|
ns := &internal.TemplateFuncsNamespace{
|
||||||
|
Name: name,
|
||||||
|
Context: func(args ...interface{}) interface{} { return s },
|
||||||
|
}
|
||||||
|
|
||||||
|
if s == nil {
|
||||||
|
panic("no Site")
|
||||||
|
}
|
||||||
|
|
||||||
|
// We just add the Site as the namespace here. No method mappings.
|
||||||
|
|
||||||
|
return ns
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
internal.AddTemplateFuncsNamespace(f)
|
||||||
|
}
|
40
tpl/site/init_test.go
Normal file
40
tpl/site/init_test.go
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright 2017 The Hugo Authors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package site
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/deps"
|
||||||
|
"github.com/gohugoio/hugo/htesting"
|
||||||
|
"github.com/gohugoio/hugo/tpl/internal"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestInit(t *testing.T) {
|
||||||
|
var found bool
|
||||||
|
var ns *internal.TemplateFuncsNamespace
|
||||||
|
s := htesting.NewTestHugoSite()
|
||||||
|
|
||||||
|
for _, nsf := range internal.TemplateFuncsNamespaceRegistry {
|
||||||
|
ns = nsf(&deps.Deps{Site: s})
|
||||||
|
if ns.Name == name {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require.True(t, found)
|
||||||
|
require.IsType(t, s, ns.Context())
|
||||||
|
}
|
|
@ -30,6 +30,7 @@ import (
|
||||||
_ "github.com/gohugoio/hugo/tpl/data"
|
_ "github.com/gohugoio/hugo/tpl/data"
|
||||||
_ "github.com/gohugoio/hugo/tpl/encoding"
|
_ "github.com/gohugoio/hugo/tpl/encoding"
|
||||||
_ "github.com/gohugoio/hugo/tpl/fmt"
|
_ "github.com/gohugoio/hugo/tpl/fmt"
|
||||||
|
_ "github.com/gohugoio/hugo/tpl/hugo"
|
||||||
_ "github.com/gohugoio/hugo/tpl/images"
|
_ "github.com/gohugoio/hugo/tpl/images"
|
||||||
_ "github.com/gohugoio/hugo/tpl/inflect"
|
_ "github.com/gohugoio/hugo/tpl/inflect"
|
||||||
_ "github.com/gohugoio/hugo/tpl/lang"
|
_ "github.com/gohugoio/hugo/tpl/lang"
|
||||||
|
@ -39,6 +40,7 @@ import (
|
||||||
_ "github.com/gohugoio/hugo/tpl/path"
|
_ "github.com/gohugoio/hugo/tpl/path"
|
||||||
_ "github.com/gohugoio/hugo/tpl/resources"
|
_ "github.com/gohugoio/hugo/tpl/resources"
|
||||||
_ "github.com/gohugoio/hugo/tpl/safe"
|
_ "github.com/gohugoio/hugo/tpl/safe"
|
||||||
|
_ "github.com/gohugoio/hugo/tpl/site"
|
||||||
_ "github.com/gohugoio/hugo/tpl/strings"
|
_ "github.com/gohugoio/hugo/tpl/strings"
|
||||||
_ "github.com/gohugoio/hugo/tpl/templates"
|
_ "github.com/gohugoio/hugo/tpl/templates"
|
||||||
_ "github.com/gohugoio/hugo/tpl/time"
|
_ "github.com/gohugoio/hugo/tpl/time"
|
||||||
|
|
|
@ -21,10 +21,12 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/htesting"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/gohugoio/hugo/common/loggers"
|
"github.com/gohugoio/hugo/common/loggers"
|
||||||
"github.com/gohugoio/hugo/config"
|
"github.com/gohugoio/hugo/config"
|
||||||
"github.com/gohugoio/hugo/deps"
|
"github.com/gohugoio/hugo/deps"
|
||||||
"github.com/gohugoio/hugo/helpers"
|
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
"github.com/gohugoio/hugo/i18n"
|
"github.com/gohugoio/hugo/i18n"
|
||||||
"github.com/gohugoio/hugo/langs"
|
"github.com/gohugoio/hugo/langs"
|
||||||
|
@ -57,6 +59,7 @@ func newDepsConfig(cfg config.Provider) deps.DepsCfg {
|
||||||
l := langs.NewLanguage("en", cfg)
|
l := langs.NewLanguage("en", cfg)
|
||||||
return deps.DepsCfg{
|
return deps.DepsCfg{
|
||||||
Language: l,
|
Language: l,
|
||||||
|
Site: htesting.NewTestHugoSite(),
|
||||||
Cfg: cfg,
|
Cfg: cfg,
|
||||||
Fs: hugofs.NewMem(l),
|
Fs: hugofs.NewMem(l),
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
|
@ -98,7 +101,7 @@ func TestTemplateFuncsExamples(t *testing.T) {
|
||||||
data.Title = "**BatMan**"
|
data.Title = "**BatMan**"
|
||||||
data.Section = "blog"
|
data.Section = "blog"
|
||||||
data.Params = map[string]interface{}{"langCode": "en"}
|
data.Params = map[string]interface{}{"langCode": "en"}
|
||||||
data.Hugo = map[string]interface{}{"Version": helpers.MustParseHugoVersion("0.36.1").Version()}
|
data.Hugo = map[string]interface{}{"Version": hugo.MustParseVersion("0.36.1").Version()}
|
||||||
|
|
||||||
for _, nsf := range internal.TemplateFuncsNamespaceRegistry {
|
for _, nsf := range internal.TemplateFuncsNamespaceRegistry {
|
||||||
ns := nsf(d)
|
ns := nsf(d)
|
||||||
|
|
|
@ -18,12 +18,13 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
|
"github.com/gohugoio/hugo/common/hugo"
|
||||||
"github.com/gohugoio/hugo/helpers"
|
"github.com/gohugoio/hugo/helpers"
|
||||||
"github.com/gohugoio/hugo/transform"
|
"github.com/gohugoio/hugo/transform"
|
||||||
)
|
)
|
||||||
|
|
||||||
var metaTagsCheck = regexp.MustCompile(`(?i)<meta\s+name=['|"]?generator['|"]?`)
|
var metaTagsCheck = regexp.MustCompile(`(?i)<meta\s+name=['|"]?generator['|"]?`)
|
||||||
var hugoGeneratorTag = fmt.Sprintf(`<meta name="generator" content="Hugo %s" />`, helpers.CurrentHugoVersion)
|
var hugoGeneratorTag = fmt.Sprintf(`<meta name="generator" content="Hugo %s" />`, hugo.CurrentVersion)
|
||||||
|
|
||||||
// HugoGenerator injects a meta generator tag for Hugo if none present.
|
// HugoGenerator injects a meta generator tag for Hugo if none present.
|
||||||
func HugoGenerator(ft transform.FromTo) error {
|
func HugoGenerator(ft transform.FromTo) error {
|
||||||
|
|
Loading…
Reference in a new issue