summaryrefslogtreecommitdiffstats
path: root/hugolib/config_test.go
AgeCommit message (Collapse)Author
2024-02-25Fix panic for disableKinds page for content resourcesBjørn Erik Pedersen
Fixes #12144
2024-02-21Fix relative import issue in libsass/dart sassBjørn Erik Pedersen
Fixes #12094
2024-01-28testing: Simplify some integration testsBjørn Erik Pedersen
2024-01-27all: Rework page store, add a dynacache, improve partial rebuilds, and some ↵develop2024Bjørn Erik Pedersen
general spring cleaning There are some breaking changes in this commit, see #11455. Closes #11455 Closes #11549 This fixes a set of bugs (see issue list) and it is also paying some technical debt accumulated over the years. We now build with Staticcheck enabled in the CI build. The performance should be about the same as before for regular sized Hugo sites, but it should perform and scale much better to larger data sets, as objects that uses lots of memory (e.g. rendered Markdown, big JSON files read into maps with transform.Unmarshal etc.) will now get automatically garbage collected if needed. Performance on partial rebuilds when running the server in fast render mode should be the same, but the change detection should be much more accurate. A list of the notable new features: * A new dependency tracker that covers (almost) all of Hugo's API and is used to do fine grained partial rebuilds when running the server. * A new and simpler tree document store which allows fast lookups and prefix-walking in all dimensions (e.g. language) concurrently. * You can now configure an upper memory limit allowing for much larger data sets and/or running on lower specced PCs. We have lifted the "no resources in sub folders" restriction for branch bundles (e.g. sections). Memory Limit * Hugos will, by default, set aside a quarter of the total system memory, but you can set this via the OS environment variable HUGO_MEMORYLIMIT (in gigabytes). This is backed by a partitioned LRU cache used throughout Hugo. A cache that gets dynamically resized in low memory situations, allowing Go's Garbage Collector to free the memory. New Dependency Tracker: Hugo has had a rule based coarse grained approach to server rebuilds that has worked mostly pretty well, but there have been some surprises (e.g. stale content). This is now revamped with a new dependency tracker that can quickly calculate the delta given a changed resource (e.g. a content file, template, JS file etc.). This handles transitive relations, e.g. $page -> js.Build -> JS import, or $page1.Content -> render hook -> site.GetPage -> $page2.Title, or $page1.Content -> shortcode -> partial -> site.RegularPages -> $page2.Content -> shortcode ..., and should also handle changes to aggregated values (e.g. site.Lastmod) effectively. This covers all of Hugo's API with 2 known exceptions (a list that may not be fully exhaustive): Changes to files loaded with template func os.ReadFile may not be handled correctly. We recommend loading resources with resources.Get Changes to Hugo objects (e.g. Page) passed in the template context to lang.Translate may not be detected correctly. We recommend having simple i18n templates without too much data context passed in other than simple types such as strings and numbers. Note that the cachebuster configuration (when A changes then rebuild B) works well with the above, but we recommend that you revise that configuration, as it in most situations should not be needed. One example where it is still needed is with TailwindCSS and using changes to hugo_stats.json to trigger new CSS rebuilds. Document Store: Previously, a little simplified, we split the document store (where we store pages and resources) in a tree per language. This worked pretty well, but the structure made some operations harder than they needed to be. We have now restructured it into one Radix tree for all languages. Internally the language is considered to be a dimension of that tree, and the tree can be viewed in all dimensions concurrently. This makes some operations re. language simpler (e.g. finding translations is just a slice range), but the idea is that it should also be relatively inexpensive to add more dimensions if needed (e.g. role). Fixes #10169 Fixes #10364 Fixes #10482 Fixes #10630 Fixes #10656 Fixes #10694 Fixes #10918 Fixes #11262 Fixes #11439 Fixes #11453 Fixes #11457 Fixes #11466 Fixes #11540 Fixes #11551 Fixes #11556 Fixes #11654 Fixes #11661 Fixes #11663 Fixes #11664 Fixes #11669 Fixes #11671 Fixes #11807 Fixes #11808 Fixes #11809 Fixes #11815 Fixes #11840 Fixes #11853 Fixes #11860 Fixes #11883 Fixes #11904 Fixes #7388 Fixes #7425 Fixes #7436 Fixes #7544 Fixes #7882 Fixes #7960 Fixes #8255 Fixes #8307 Fixes #8863 Fixes #8927 Fixes #9192 Fixes #9324
2023-07-28Deprecate taxonomyTermBjørn Erik Pedersen
In favour of 'taxonomy' Closes #11256
2023-07-28Warn about unknown kinds in disableKindsBjørn Erik Pedersen
See #11256
2023-07-27Fix multiple languages in HUGO_DISABLELANGUAGESBjørn Erik Pedersen
Fixes #11278
2023-07-19Fix broken handling of legacy taxonomyTerm in disableKindsBjørn Erik Pedersen
Fixes #11257
2023-07-16Fix setting config from env with complex (e.g. YAML) stringsBjørn Erik Pedersen
So you can do ``` HUGO_OUTPUTS="home: [rss]" hugo ``` And similar. Fixes #11249
2023-07-13Improve behavior of defaultContentLanguageInSubdir when only the default ↵Bjørn Erik Pedersen
language is enabled 1 .Create sitemapindex in root of publishDir (will contain link to sitemap.xml in defaultContentLanguage site) 2. Create index.html in root of publishDir (will redirect to defaultContentLanguage site) Fixes #11229
2023-07-08Restore language.disabled configBjørn Erik Pedersen
Fixes #11219
2023-07-08Fix static content files multilingual root regressionBjørn Erik Pedersen
Fixes #11223
2023-07-08Fix defaultContentLanguageInSubdir with only 1 languageBjørn Erik Pedersen
Fixes #10064
2023-06-28Fix output formats and media type per language config regressionBjørn Erik Pedersen
Fixes #11159
2023-06-19all: Fix typos in function names and commentsOleksandr Redko
2023-06-18Replace the old log setup, with structured logging etc.Bjørn Erik Pedersen
Fixes #11124
2023-06-13Fix config merge regression with root slices (e.g. disableKinds)Bjørn Erik Pedersen
Fixes #11089
2023-06-12config: Remove unexpected _merge keys introduced in author and social mapsBjørn Erik Pedersen
Fixes #11083
2023-06-01commands: Add --lang to hugo configBjørn Erik Pedersen
Fixes #11057
2023-06-01Make sure any default mounts show up in "hugo config"Bjørn Erik Pedersen
Fixes #11040
2023-05-30Fail on invalid defaultContentLanguageBjørn Erik Pedersen
Fixes #11044
2023-05-30Avoid panic in invalid language configBjørn Erik Pedersen
Fixes #11046
2023-05-30Don't panic on empty yaml config paramsBjørn Erik Pedersen
Fixes #11047
2023-05-28Fix it so languageCode on top level config still worksBjørn Erik Pedersen
This is common for monolingual sites, and we broke this in Hugo 0.112.4. Fixes #11037
2023-05-27Add language.LanguageCodeBjørn Erik Pedersen
But keep an alias at Site Closes #11027
2023-05-23Fix regression when config for OutputFormat.BaseName is an empty stringBjørn Erik Pedersen
Fixes #11000
2023-05-20Add hugo.WorkingDirBjørn Erik Pedersen
Fixes #10969
2023-05-20Make language merging of markup etc. config without values in the rootBjørn Erik Pedersen
Updates #10953
2023-05-19Allow legacy taxonomyTerm in disableKindsBjørn Erik Pedersen
Updates #10953
2023-05-18Allow empty params.mainSectionsBjørn Erik Pedersen
Updates #10953
2023-05-17Support, but warn, about top level language custom paramsBjørn Erik Pedersen
Updates #10947
2023-05-17Handle transient errors in config loading etc.Bjørn Erik Pedersen
As in: Get the Kubernetes site to build with the new Hugo version. Updates #10947
2023-05-17Deprecate site.Language.Params and some other fixesBjørn Erik Pedersen
Updates #10947
2023-05-16Add Sections to Site interfaceBjørn Erik Pedersen
See https://github.com/gohugoio/hugo/issues/10947#issuecomment-1550012671 Updates #10947
2023-05-16Create a struct with all of Hugo's config optionsBjørn Erik Pedersen
Primary motivation is documentation, but it will also hopefully simplify the code. Also, * Lower case the default output format names; this is in line with the custom ones (map keys) and how it's treated all the places. This avoids doing `stringds.EqualFold` everywhere. Closes #10896 Closes #10620
2023-01-16Make hugo.toml the new config.tomlBjørn Erik Pedersen
Both will of course work, but hugo.toml will win if both are set. We should have done this a long time ago, of course, but the reason I'm picking this up now is that my VS Code setup by default picks up some JSON config schema from some random other software which also names its config files config.toml. Fixes #8979
2022-06-04helpers: Fix panic with invalid defaultMarkdownHandlerBjørn Erik Pedersen
Fixes #9968
2022-03-17all: gofmt -w -r 'interface{} -> any' .Bjørn Erik Pedersen
Updates #9687
2021-10-22config: Set HUGO_ENABLEGITINFO=false override in Set_in_stringAnthony Fok
This allows TestLoadConfigWithOsEnvOverrides/Set_in_string to PASS even if there is no .git directory, e.g. during Debian package build.
2021-08-22Fix it so disableKinds etc. does not get merged in from themeBjørn Erik Pedersen
Unless the merge strategy is set up to do so. For `disableKinds` the current workaround is to make sure the project config has an entry, even if is empty: ``` disableKinds = [] ``` Note that this issue only touches root, non-map config-values that either is not set in project config or in Hugo's defaults. Fixes #8866
2021-07-28Switch to go-toml v2Bjørn Erik Pedersen
We have been using `go-toml` for language files only. This commit makes it the only TOML library. It's spec compliant and very fast. A benchark building a site with 200 pages with TOML front matter: ```bash name old time/op new time/op delta SiteNew/Regular_TOML_front_matter-16 48.5ms ± 1% 47.1ms ± 1% -2.85% (p=0.029 n=4+4) name old alloc/op new alloc/op delta SiteNew/Regular_TOML_front_matter-16 16.9MB ± 0% 16.7MB ± 0% -1.56% (p=0.029 n=4+4) name old allocs/op new allocs/op delta SiteNew/Regular_TOML_front_matter-16 302k ± 0% 296k ± 0% -2.20% (p=0.029 n=4+4) ``` Note that the front matter unmarshaling is only a small part of building a site, so the above is very good. Fixes #8801
2021-07-15Fix default values when loading from config dirBjørn Erik Pedersen
By waiting until we've loaded the config dir config before applying the default values. Fixes #8763
2021-07-03Fix panic when theme has permalinks configBjørn Erik Pedersen
Fixes #8724
2021-06-29config: Fix handling of invalid OS env config overridesBjørn Erik Pedersen
Fixes #8709
2021-06-24Fix language menu config regressionBjørn Erik Pedersen
Fixes #8672
2021-06-18Implement configuration in a directory for modulesBjørn Erik Pedersen
Fixes #8654
2021-06-14Misc config loading fixesBjørn Erik Pedersen
The main motivation behind this is simplicity and correctnes, but the new small config library is also faster: ``` BenchmarkDefaultConfigProvider/Viper-16 252418 4546 ns/op 2720 B/op 30 allocs/op BenchmarkDefaultConfigProvider/Custom-16 450756 2651 ns/op 1008 B/op 6 allocs/op ``` Fixes #8633 Fixes #8618 Fixes #8630 Updates #8591 Closes #6680 Closes #5192
2021-06-08Fix nested OS env config override when parent does not existBjørn Erik Pedersen
Fixes #8618
2021-05-30config: Fix env split to allow = character in values卜木
Fixes #8589
2021-03-20Fix OS env override for nested config param only available in themeBjørn Erik Pedersen
Fixes #8346