mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-27 22:21:07 +03:00
✨ Implement Page bundling and image handling
This commit is not the smallest in Hugo's history. Some hightlights include: * Page bundles (for complete articles, keeping images and content together etc.). * Bundled images can be processed in as many versions/sizes as you need with the three methods `Resize`, `Fill` and `Fit`. * Processed images are cached inside `resources/_gen/images` (default) in your project. * Symbolic links (both files and dirs) are now allowed anywhere inside /content * A new table based build summary * The "Total in nn ms" now reports the total including the handling of the files inside /static. So if it now reports more than you're used to, it is just **more real** and probably faster than before (see below). A site building benchmark run compared to `v0.31.1` shows that this should be slightly faster and use less memory: ```bash ▶ ./benchSite.sh "TOML,num_langs=.*,num_root_sections=5,num_pages=(500|1000),tags_per_page=5,shortcodes,render" benchmark old ns/op new ns/op delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 101785785 78067944 -23.30% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 185481057 149159919 -19.58% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 103149918 85679409 -16.94% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 203515478 169208775 -16.86% benchmark old allocs new allocs delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 532464 391539 -26.47% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 1056549 772702 -26.87% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 555974 406630 -26.86% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 1086545 789922 -27.30% benchmark old bytes new bytes delta BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 53243246 43598155 -18.12% BenchmarkSiteBuilding/TOML,num_langs=1,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 105811617 86087116 -18.64% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=500,tags_per_page=5,shortcodes,render-4 54558852 44545097 -18.35% BenchmarkSiteBuilding/TOML,num_langs=3,num_root_sections=5,num_pages=1000,tags_per_page=5,shortcodes,render-4 106903858 86978413 -18.64% ``` Fixes #3651 Closes #3158 Fixes #1014 Closes #2021 Fixes #1240 Updates #3757
This commit is contained in:
parent
02f2735f68
commit
3cdf19e9b7
85 changed files with 5791 additions and 3287 deletions
|
@ -15,6 +15,7 @@ package helpers
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/gohugoio/hugo/config"
|
||||
"github.com/gohugoio/hugo/hugofs"
|
||||
|
@ -31,6 +32,7 @@ type PathSpec struct {
|
|||
canonifyURLs bool
|
||||
|
||||
language *Language
|
||||
//StatsCounter *siteSta
|
||||
|
||||
// pagination path handling
|
||||
paginatePath string
|
||||
|
@ -38,10 +40,12 @@ type PathSpec struct {
|
|||
theme string
|
||||
|
||||
// Directories
|
||||
contentDir string
|
||||
themesDir string
|
||||
layoutDir string
|
||||
workingDir string
|
||||
staticDirs []string
|
||||
PublishDir string
|
||||
|
||||
// The PathSpec looks up its config settings in both the current language
|
||||
// and then in the global Viper config.
|
||||
|
@ -52,6 +56,8 @@ type PathSpec struct {
|
|||
defaultContentLanguage string
|
||||
multilingual bool
|
||||
|
||||
ProcessingStats *ProcessingStats
|
||||
|
||||
// The file systems to use
|
||||
Fs *hugofs.Fs
|
||||
|
||||
|
@ -79,6 +85,11 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) {
|
|||
staticDirs = append(staticDirs, getStringOrStringSlice(cfg, "staticDir", i)...)
|
||||
}
|
||||
|
||||
var lang string
|
||||
if l, ok := cfg.(*Language); ok {
|
||||
lang = l.Lang
|
||||
}
|
||||
|
||||
ps := &PathSpec{
|
||||
Fs: fs,
|
||||
Cfg: cfg,
|
||||
|
@ -91,13 +102,23 @@ func NewPathSpec(fs *hugofs.Fs, cfg config.Provider) (*PathSpec, error) {
|
|||
defaultContentLanguage: cfg.GetString("defaultContentLanguage"),
|
||||
paginatePath: cfg.GetString("paginatePath"),
|
||||
BaseURL: baseURL,
|
||||
contentDir: cfg.GetString("contentDir"),
|
||||
themesDir: cfg.GetString("themesDir"),
|
||||
layoutDir: cfg.GetString("layoutDir"),
|
||||
workingDir: cfg.GetString("workingDir"),
|
||||
staticDirs: staticDirs,
|
||||
theme: cfg.GetString("theme"),
|
||||
ProcessingStats: NewProcessingStats(lang),
|
||||
}
|
||||
|
||||
publishDir := ps.AbsPathify(cfg.GetString("publishDir")) + FilePathSeparator
|
||||
// If root, remove the second '/'
|
||||
if publishDir == "//" {
|
||||
publishDir = FilePathSeparator
|
||||
}
|
||||
|
||||
ps.PublishDir = publishDir
|
||||
|
||||
if language, ok := cfg.(*Language); ok {
|
||||
ps.language = language
|
||||
}
|
||||
|
@ -129,6 +150,11 @@ func (p *PathSpec) PaginatePath() string {
|
|||
return p.paginatePath
|
||||
}
|
||||
|
||||
// ContentDir returns the configured workingDir.
|
||||
func (p *PathSpec) ContentDir() string {
|
||||
return p.contentDir
|
||||
}
|
||||
|
||||
// WorkingDir returns the configured workingDir.
|
||||
func (p *PathSpec) WorkingDir() string {
|
||||
return p.workingDir
|
||||
|
@ -153,3 +179,13 @@ func (p *PathSpec) Theme() string {
|
|||
func (p *PathSpec) ThemesDir() string {
|
||||
return p.themesDir
|
||||
}
|
||||
|
||||
// PermalinkForBaseURL creates a permalink from the given link and baseURL.
|
||||
func (p *PathSpec) PermalinkForBaseURL(link, baseURL string) string {
|
||||
link = strings.TrimPrefix(link, "/")
|
||||
if !strings.HasSuffix(baseURL, "/") {
|
||||
baseURL += "/"
|
||||
}
|
||||
return baseURL + link
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue