mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-17 21:01:26 +02:00
hugolib: Refactor/-work the permalink/target path logic
This is a pretty fundamental change in Hugo, but absolutely needed if we should have any hope of getting "multiple outputs" done. This commit's goal is to say: * Every file target path is created by `createTargetPath`, i.e. one function for all. * That function takes every page and site parameter into account, to avoid fragile string parsing to uglify etc. later on. * The path creation logic has full test coverage. * All permalinks, paginator URLs etc. are then built on top of that same logic. Fixes #1252 Fixes #2110 Closes #2374 Fixes #1885 Fixes #3102 Fixes #3179 Fixes #1641 Fixes #1989
This commit is contained in:
@@ -958,7 +958,9 @@ func TestRefLinking(t *testing.T) {
|
||||
|
||||
// refLink doesn't use the location of the current page to work out reflinks
|
||||
okresults := map[string]string{
|
||||
"index.md": "/",
|
||||
// Note: There are no magic in the index.md name. This was fixed in Hugo 0.20.
|
||||
// Before that, index.md would wrongly resolve to "/".
|
||||
"index.md": "/index/",
|
||||
"common.md": "/level2/common/",
|
||||
"3-root.md": "/level2/level3/3-root/",
|
||||
}
|
||||
@@ -979,110 +981,59 @@ func TestSourceRelativeLinksing(t *testing.T) {
|
||||
okresults := map[string]resultMap{
|
||||
"index.md": map[string]string{
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"rootfile.md": "/rootfile/",
|
||||
"index.md": "/",
|
||||
"index.md": "/index/",
|
||||
"level2/2-root.md": "/level2/2-root/",
|
||||
"level2/index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"level2/level3/index.md": "/level2/level3/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
"/docs/level2/2-root/": "/level2/2-root/",
|
||||
"/docs/level2/": "/level2/",
|
||||
"/docs/level2/2-root": "/level2/2-root/",
|
||||
"/docs/level2": "/level2/",
|
||||
"/level2/2-root/": "/level2/2-root/",
|
||||
"/level2/": "/level2/",
|
||||
"/level2/2-root": "/level2/2-root/",
|
||||
"/level2": "/level2/",
|
||||
}, "rootfile.md": map[string]string{
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"rootfile.md": "/rootfile/",
|
||||
"index.md": "/",
|
||||
"level2/2-root.md": "/level2/2-root/",
|
||||
"level2/index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"level2/level3/index.md": "/level2/level3/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
}, "level2/2-root.md": map[string]string{
|
||||
"../rootfile.md": "/rootfile/",
|
||||
"../index.md": "/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"2-root.md": "/level2/2-root/",
|
||||
"index.md": "/level2/",
|
||||
"../level2/2-root.md": "/level2/2-root/",
|
||||
"../level2/index.md": "/level2/",
|
||||
"./2-root.md": "/level2/2-root/",
|
||||
"./index.md": "/level2/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"level3/3-root.md": "/level2/level3/3-root/",
|
||||
"level3/index.md": "/level2/level3/",
|
||||
"../level2/level3/index.md": "/level2/level3/",
|
||||
"../level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
}, "level2/index.md": map[string]string{
|
||||
"../rootfile.md": "/rootfile/",
|
||||
"../index.md": "/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"2-root.md": "/level2/2-root/",
|
||||
"index.md": "/level2/",
|
||||
"../level2/2-root.md": "/level2/2-root/",
|
||||
"../level2/index.md": "/level2/",
|
||||
"./2-root.md": "/level2/2-root/",
|
||||
"./index.md": "/level2/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"level3/3-root.md": "/level2/level3/3-root/",
|
||||
"level3/index.md": "/level2/level3/",
|
||||
"../level2/level3/index.md": "/level2/level3/",
|
||||
"../level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
}, "level2/level3/3-root.md": map[string]string{
|
||||
"../../rootfile.md": "/rootfile/",
|
||||
"../../index.md": "/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"../2-root.md": "/level2/2-root/",
|
||||
"../index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"3-root.md": "/level2/level3/3-root/",
|
||||
"index.md": "/level2/level3/",
|
||||
"./3-root.md": "/level2/level3/3-root/",
|
||||
"./index.md": "/level2/level3/",
|
||||
// "../level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
// "../level2/level3/index.md": "/level2/level3/",
|
||||
"../../rootfile.md": "/rootfile/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"../2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"3-root.md": "/level2/level3/3-root/",
|
||||
"./3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
}, "level2/level3/index.md": map[string]string{
|
||||
"../../rootfile.md": "/rootfile/",
|
||||
"../../index.md": "/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"/docs/index.md": "/",
|
||||
"../2-root.md": "/level2/2-root/",
|
||||
"../index.md": "/level2/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/index.md": "/level2/",
|
||||
"3-root.md": "/level2/level3/3-root/",
|
||||
"index.md": "/level2/level3/",
|
||||
"./3-root.md": "/level2/level3/3-root/",
|
||||
"./index.md": "/level2/level3/",
|
||||
// "../level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
// "../level2/level3/index.md": "/level2/level3/",
|
||||
"../../rootfile.md": "/rootfile/",
|
||||
"/docs/rootfile.md": "/rootfile/",
|
||||
"../2-root.md": "/level2/2-root/",
|
||||
"/docs/level2/2-root.md": "/level2/2-root/",
|
||||
"3-root.md": "/level2/level3/3-root/",
|
||||
"./3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/3-root.md": "/level2/level3/3-root/",
|
||||
"/docs/level2/level3/index.md": "/level2/level3/",
|
||||
},
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user