: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
2017-07-24 03:00:23 -04:00
|
|
|
// Copyright 2017-present 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 resource
|
|
|
|
|
|
|
|
import (
|
2018-01-15 14:40:39 -05:00
|
|
|
"fmt"
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGenericResource(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
|
|
|
|
r := spec.newGenericResource(nil, nil, "/public", "/a/foo.css", "foo.css", "css")
|
|
|
|
|
|
|
|
assert.Equal("https://example.com/foo.css", r.Permalink())
|
2018-01-05 05:07:50 -05:00
|
|
|
assert.Equal("/foo.css", r.RelPermalink())
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
assert.Equal("css", r.ResourceType())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGenericResourceWithLinkFacory(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
|
|
|
|
factory := func(s string) string {
|
|
|
|
return path.Join("/foo", s)
|
|
|
|
}
|
|
|
|
r := spec.newGenericResource(factory, nil, "/public", "/a/foo.css", "foo.css", "css")
|
|
|
|
|
|
|
|
assert.Equal("https://example.com/foo/foo.css", r.Permalink())
|
|
|
|
assert.Equal("/foo/foo.css", r.RelPermalink())
|
|
|
|
assert.Equal("css", r.ResourceType())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewResourceFromFilename(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
|
|
|
|
writeSource(t, spec.Fs, "/project/a/b/logo.png", "image")
|
|
|
|
writeSource(t, spec.Fs, "/root/a/b/data.json", "json")
|
|
|
|
|
|
|
|
r, err := spec.NewResourceFromFilename(nil, "/public",
|
|
|
|
filepath.FromSlash("/project/a/b/logo.png"), filepath.FromSlash("a/b/logo.png"))
|
|
|
|
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.NotNil(r)
|
|
|
|
assert.Equal("image", r.ResourceType())
|
2018-01-05 05:07:50 -05:00
|
|
|
assert.Equal("/a/b/logo.png", r.RelPermalink())
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
assert.Equal("https://example.com/a/b/logo.png", r.Permalink())
|
|
|
|
|
|
|
|
r, err = spec.NewResourceFromFilename(nil, "/public", "/root/a/b/data.json", "a/b/data.json")
|
|
|
|
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.NotNil(r)
|
|
|
|
assert.Equal("json", r.ResourceType())
|
|
|
|
|
|
|
|
cloned := r.(Cloner).WithNewBase("aceof")
|
|
|
|
assert.Equal(r.ResourceType(), cloned.ResourceType())
|
|
|
|
assert.Equal("/aceof/a/b/data.json", cloned.RelPermalink())
|
|
|
|
}
|
|
|
|
|
2018-01-05 05:07:50 -05:00
|
|
|
func TestNewResourceFromFilenameSubPathInBaseURL(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpecForBaseURL(assert, "https://example.com/docs")
|
|
|
|
|
|
|
|
writeSource(t, spec.Fs, "/project/a/b/logo.png", "image")
|
|
|
|
|
|
|
|
r, err := spec.NewResourceFromFilename(nil, "/public",
|
|
|
|
filepath.FromSlash("/project/a/b/logo.png"), filepath.FromSlash("a/b/logo.png"))
|
|
|
|
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.NotNil(r)
|
|
|
|
assert.Equal("image", r.ResourceType())
|
|
|
|
assert.Equal("/docs/a/b/logo.png", r.RelPermalink())
|
|
|
|
assert.Equal("https://example.com/docs/a/b/logo.png", r.Permalink())
|
|
|
|
img := r.(*Image)
|
|
|
|
assert.Equal("/a/b/logo.png", img.target())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
func TestResourcesByType(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
resources := Resources{
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/foo1.css", "foo1.css", "css"),
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/logo.png", "logo.css", "image"),
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/foo2.css", "foo2.css", "css"),
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/foo3.css", "foo3.css", "css")}
|
|
|
|
|
|
|
|
assert.Len(resources.ByType("css"), 3)
|
|
|
|
assert.Len(resources.ByType("image"), 1)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResourcesGetByPrefix(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
resources := Resources{
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/foo1.css", "foo1.css", "css"),
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/a/logo1.png", "logo1.png", "image"),
|
2018-01-11 12:58:53 -05:00
|
|
|
spec.newGenericResource(nil, nil, "/public", "/b/Logo2.png", "Logo2.png", "image"),
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
spec.newGenericResource(nil, nil, "/public", "/b/foo2.css", "foo2.css", "css"),
|
|
|
|
spec.newGenericResource(nil, nil, "/public", "/b/foo3.css", "foo3.css", "css")}
|
|
|
|
|
|
|
|
assert.Nil(resources.GetByPrefix("asdf"))
|
2018-01-05 05:07:50 -05:00
|
|
|
assert.Equal("/logo1.png", resources.GetByPrefix("logo").RelPermalink())
|
2018-01-11 12:58:53 -05:00
|
|
|
assert.Equal("/logo1.png", resources.GetByPrefix("loGo").RelPermalink())
|
|
|
|
assert.Equal("/Logo2.png", resources.GetByPrefix("logo2").RelPermalink())
|
2018-01-05 05:07:50 -05:00
|
|
|
assert.Equal("/foo2.css", resources.GetByPrefix("foo2").RelPermalink())
|
|
|
|
assert.Equal("/foo1.css", resources.GetByPrefix("foo1").RelPermalink())
|
|
|
|
assert.Equal("/foo1.css", resources.GetByPrefix("foo1").RelPermalink())
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
assert.Nil(resources.GetByPrefix("asdfasdf"))
|
|
|
|
|
2018-01-12 12:06:35 -05:00
|
|
|
assert.Equal(2, len(resources.ByPrefix("logo")))
|
|
|
|
assert.Equal(1, len(resources.ByPrefix("logo2")))
|
|
|
|
|
2018-01-15 14:40:39 -05:00
|
|
|
logo := resources.GetByPrefix("logo")
|
|
|
|
assert.NotNil(logo.Params())
|
|
|
|
assert.Equal("logo1.png", logo.Name())
|
|
|
|
assert.Equal("logo1.png", logo.Title())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAssignMetadata(t *testing.T) {
|
|
|
|
assert := require.New(t)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
|
|
|
|
var foo1, foo2, foo3, logo1, logo2, logo3 Resource
|
|
|
|
var resources Resources
|
|
|
|
|
|
|
|
for _, this := range []struct {
|
|
|
|
metaData []map[string]interface{}
|
|
|
|
assertFunc func(err error)
|
|
|
|
}{
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "My Resource",
|
|
|
|
"name": "My Name",
|
|
|
|
"src": "*",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
assert.Equal("My Resource", logo1.Title())
|
|
|
|
assert.Equal("My Name", logo1.Name())
|
|
|
|
assert.Equal("My Name", foo2.Name())
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "My Logo",
|
|
|
|
"src": "*loGo*",
|
|
|
|
},
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "My Resource",
|
|
|
|
"name": "My Name",
|
|
|
|
"src": "*",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
assert.Equal("My Logo", logo1.Title())
|
|
|
|
assert.Equal("My Logo", logo2.Title())
|
|
|
|
assert.Equal("My Name", logo1.Name())
|
|
|
|
assert.Equal("My Name", foo2.Name())
|
|
|
|
assert.Equal("My Name", foo3.Name())
|
|
|
|
assert.Equal("My Resource", foo3.Title())
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "My Logo",
|
|
|
|
"src": "*loGo*",
|
|
|
|
"params": map[string]interface{}{
|
|
|
|
"Param1": true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "My Resource",
|
|
|
|
"src": "*",
|
|
|
|
"params": map[string]interface{}{
|
|
|
|
"Param2": true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.Equal("My Logo", logo1.Title())
|
|
|
|
assert.Equal("My Resource", foo3.Title())
|
|
|
|
_, p1 := logo2.Params()["param1"]
|
|
|
|
_, p2 := foo2.Params()["param2"]
|
|
|
|
assert.True(p1)
|
|
|
|
assert.True(p2)
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"name": "Logo Name #:counter",
|
|
|
|
"src": "*logo*",
|
|
|
|
},
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Resource #:counter",
|
|
|
|
"name": "Name #:counter",
|
|
|
|
"src": "*",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.Equal("Resource #1", logo2.Title())
|
|
|
|
assert.Equal("Logo Name #1", logo2.Name())
|
|
|
|
assert.Equal("Resource #2", logo1.Title())
|
|
|
|
assert.Equal("Logo Name #2", logo1.Name())
|
|
|
|
assert.Equal("Resource #1", foo2.Title())
|
|
|
|
assert.Equal("Resource #2", foo1.Title())
|
|
|
|
assert.Equal("Name #2", foo1.Name())
|
|
|
|
assert.Equal("Resource #3", foo3.Title())
|
|
|
|
|
|
|
|
assert.Equal(logo2, resources.GetByPrefix("logo name #1"))
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Third Logo #:counter",
|
|
|
|
"src": "logo3.png",
|
|
|
|
},
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Other Logo #:counter",
|
|
|
|
"name": "Name #:counter",
|
|
|
|
"src": "logo*",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
assert.NoError(err)
|
|
|
|
assert.Equal("Third Logo #1", logo3.Title())
|
|
|
|
assert.Equal("Name #1", logo3.Name())
|
|
|
|
assert.Equal("Other Logo #1", logo2.Title())
|
|
|
|
assert.Equal("Name #1", logo2.Name())
|
|
|
|
assert.Equal("Other Logo #2", logo1.Title())
|
|
|
|
assert.Equal("Name #2", logo1.Name())
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Third Logo #:counter",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
// Missing src
|
|
|
|
assert.Error(err)
|
|
|
|
|
|
|
|
}},
|
|
|
|
{[]map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Title",
|
|
|
|
"src": "[]",
|
|
|
|
},
|
|
|
|
}, func(err error) {
|
|
|
|
// Invalid pattern
|
|
|
|
assert.Error(err)
|
|
|
|
|
|
|
|
}},
|
|
|
|
} {
|
|
|
|
|
|
|
|
foo2 = spec.newGenericResource(nil, nil, "/public", "/b/foo2.css", "foo2.css", "css")
|
|
|
|
logo2 = spec.newGenericResource(nil, nil, "/public", "/b/Logo2.png", "Logo2.png", "image")
|
|
|
|
foo1 = spec.newGenericResource(nil, nil, "/public", "/a/foo1.css", "foo1.css", "css")
|
|
|
|
logo1 = spec.newGenericResource(nil, nil, "/public", "/a/logo1.png", "logo1.png", "image")
|
|
|
|
foo3 = spec.newGenericResource(nil, nil, "/public", "/b/foo3.css", "foo3.css", "css")
|
|
|
|
logo3 = spec.newGenericResource(nil, nil, "/public", "/b/logo3.png", "logo3.png", "image")
|
|
|
|
|
|
|
|
resources = Resources{
|
|
|
|
foo2,
|
|
|
|
logo2,
|
|
|
|
foo1,
|
|
|
|
logo1,
|
|
|
|
foo3,
|
|
|
|
logo3,
|
|
|
|
}
|
|
|
|
|
|
|
|
this.assertFunc(AssignMetadata(this.metaData, resources...))
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkAssignMetadata(b *testing.B) {
|
|
|
|
assert := require.New(b)
|
|
|
|
spec := newTestResourceSpec(assert)
|
|
|
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
b.StopTimer()
|
|
|
|
var resources Resources
|
|
|
|
var meta = []map[string]interface{}{
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Foo #:counter",
|
|
|
|
"name": "Foo Name #:counter",
|
|
|
|
"src": "foo1*",
|
|
|
|
},
|
|
|
|
map[string]interface{}{
|
|
|
|
"title": "Rest #:counter",
|
|
|
|
"name": "Rest Name #:counter",
|
|
|
|
"src": "*",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for i := 0; i < 20; i++ {
|
|
|
|
name := fmt.Sprintf("foo%d_%d.css", i%5, i)
|
|
|
|
resources = append(resources, spec.newGenericResource(nil, nil, "/public", "/a/"+name, name, "css"))
|
|
|
|
}
|
|
|
|
b.StartTimer()
|
|
|
|
|
|
|
|
if err := AssignMetadata(meta, resources...); err != nil {
|
|
|
|
b.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
: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
2017-07-24 03:00:23 -04:00
|
|
|
}
|