diff options
author | Bjørn Erik Pedersen <[email protected]> | 2017-07-24 09:00:23 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2017-12-27 18:44:47 +0100 |
commit | 3cdf19e9b7e46c57a9bb43ff02199177feb55768 (patch) | |
tree | d05e3dc15824c8eeef3e5455193d2d6328621f47 /helpers/pathspec.go | |
parent | 02f2735f68e1bb2e2c412698755d52c4d396f237 (diff) | |
download | hugo-3cdf19e9b7e46c57a9bb43ff02199177feb55768.tar.gz hugo-3cdf19e9b7e46c57a9bb43ff02199177feb55768.zip |
:sparkles: 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
Diffstat (limited to 'helpers/pathspec.go')
-rw-r--r-- | helpers/pathspec.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/helpers/pathspec.go b/helpers/pathspec.go index 164d242a0..d5a2c92e8 100644 --- a/helpers/pathspec.go +++ b/helpers/pathspec.go @@ -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 + +} |