diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-07-24 10:00:23 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-12-27 20:44:47 +0300 |
commit | 3cdf19e9b7e46c57a9bb43ff02199177feb55768 (patch) | |
tree | d05e3dc15824c8eeef3e5455193d2d6328621f47 /helpers/path.go | |
parent | 02f2735f68e1bb2e2c412698755d52c4d396f237 (diff) |
: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/path.go')
-rw-r--r-- | helpers/path.go | 46 |
1 files changed, 9 insertions, 37 deletions
diff --git a/helpers/path.go b/helpers/path.go index 57f02da68..44d53d018 100644 --- a/helpers/path.go +++ b/helpers/path.go @@ -277,6 +277,12 @@ func Ext(in string) string { return ext } +// FileAndExt takes a path and returns the file and extension separated, +// the extension including the delmiter, i.e. ".md". +func FileAndExt(in string) (string, string) { + return fileAndExt(in, fpb) +} + // Filename takes a path, strips out the extension, // and returns the name of the file. func Filename(in string) (name string) { @@ -348,40 +354,6 @@ func GetRelativePath(path, base string) (final string, err error) { return name, nil } -// GuessSection returns the section given a source path. -// A section is the part between the root slash and the second slash -// or before the first slash. -func GuessSection(in string) string { - parts := strings.Split(in, FilePathSeparator) - // This will include an empty entry before and after paths with leading and trailing slashes - // eg... /sect/one/ -> ["", "sect", "one", ""] - - // Needs to have at least a value and a slash - if len(parts) < 2 { - return "" - } - - // If it doesn't have a leading slash and value and file or trailing slash, then return "" - if parts[0] == "" && len(parts) < 3 { - return "" - } - - // strip leading slash - if parts[0] == "" { - parts = parts[1:] - } - - // if first directory is "content", return second directory - if parts[0] == "content" { - if len(parts) > 2 { - return parts[1] - } - return "" - } - - return parts[0] -} - // PathPrep prepares the path using the uglify setting to create paths on // either the form /section/name/index.html or /section/name.html. func PathPrep(ugly bool, in string) string { @@ -504,7 +476,7 @@ func SymbolicWalk(fs afero.Fs, root string, walker filepath.WalkFunc) error { } func getRealFileInfo(fs afero.Fs, path string) (os.FileInfo, string, error) { - fileInfo, err := lstatIfOs(fs, path) + fileInfo, err := LstatIfOs(fs, path) realPath := path if err != nil { @@ -516,7 +488,7 @@ func getRealFileInfo(fs afero.Fs, path string) (os.FileInfo, string, error) { if err != nil { return nil, "", fmt.Errorf("Cannot read symbolic link '%s', error was: %s", path, err) } - fileInfo, err = lstatIfOs(fs, link) + fileInfo, err = LstatIfOs(fs, link) if err != nil { return nil, "", fmt.Errorf("Cannot stat '%s', error was: %s", link, err) } @@ -539,7 +511,7 @@ func GetRealPath(fs afero.Fs, path string) (string, error) { // Code copied from Afero's path.go // if the filesystem is OsFs use Lstat, else use fs.Stat -func lstatIfOs(fs afero.Fs, path string) (info os.FileInfo, err error) { +func LstatIfOs(fs afero.Fs, path string) (info os.FileInfo, err error) { _, ok := fs.(*afero.OsFs) if ok { info, err = os.Lstat(path) |