Avoid caching resource when called via `include_relative` tag (#9784)
Merge pull request 9784
This commit is contained in:
		
							parent
							
								
									82efcc4c51
								
							
						
					
					
						commit
						07a01b0bc9
					
				|  | @ -58,3 +58,22 @@ Feature: include_relative Tag | ||||||
|     Then I should get a zero exit status |     Then I should get a zero exit status | ||||||
|     And the _site directory should exist |     And the _site directory should exist | ||||||
|     And I should see "Welcome back Dear Reader!" in "_site/index.html" |     And I should see "Welcome back Dear Reader!" in "_site/index.html" | ||||||
|  | 
 | ||||||
|  |   Scenario: Include multiple files relative to a page at root | ||||||
|  |     Given I have an "apple.md" page with foo "bar" that contains "{{ page.path }}, {{ page.foo }}" | ||||||
|  |     And I have an "banana.md" page with content: | ||||||
|  |       """ | ||||||
|  |         {% include_relative apple.md %} | ||||||
|  |         {% include_relative cherry.md %} | ||||||
|  | 
 | ||||||
|  |         {{ page.path }} | ||||||
|  |       """ | ||||||
|  |     And I have an "cherry.md" page with foo "lipsum" that contains "{{ page.path }}, {{ page.foo }}" | ||||||
|  |     When I run jekyll build | ||||||
|  |     Then I should get a zero exit status | ||||||
|  |     And the _site directory should exist | ||||||
|  |     And I should see "<p>apple.md, bar</p>" in "_site/apple.html" | ||||||
|  |     And I should see "<hr />\n<p>foo: bar" in "_site/banana.html" | ||||||
|  |     And I should see "<hr />\n<p>foo: lipsum" in "_site/banana.html" | ||||||
|  |     And I should see "<p>cherry.md, lipsum</p>" in "_site/cherry.html" | ||||||
|  |     But I should not see "foo: lipsum" in "_site/cherry.html" | ||||||
|  |  | ||||||
|  | @ -249,6 +249,11 @@ module Jekyll | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     class IncludeRelativeTag < IncludeTag |     class IncludeRelativeTag < IncludeTag | ||||||
|  |       def load_cached_partial(path, context) | ||||||
|  |         context.registers[:cached_partials] ||= {} | ||||||
|  |         context.registers[:cached_partials][path] ||= parse_partial(path, context) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|       def tag_includes_dirs(context) |       def tag_includes_dirs(context) | ||||||
|         Array(page_path(context)).freeze |         Array(page_path(context)).freeze | ||||||
|       end |       end | ||||||
|  | @ -267,6 +272,17 @@ module Jekyll | ||||||
|         path = File.join(site.config["collections_dir"], path) if page["collection"] |         path = File.join(site.config["collections_dir"], path) if page["collection"] | ||||||
|         path.delete_suffix("/#excerpt") |         path.delete_suffix("/#excerpt") | ||||||
|       end |       end | ||||||
|  | 
 | ||||||
|  |       # Since Jekyll 4 caches convertibles based on their path within the only instance of | ||||||
|  |       # `LiquidRenderer`, initialize a new LiquidRenderer instance on every render of this | ||||||
|  |       # tag to bypass caching rendered output of page / document. | ||||||
|  |       def parse_partial(path, context) | ||||||
|  |         LiquidRenderer.new(context.registers[:site]).file(path).parse(read_file(path, context)) | ||||||
|  |       rescue Liquid::Error => e | ||||||
|  |         e.template_name = path | ||||||
|  |         e.markup_context = "included " if e.markup_context.nil? | ||||||
|  |         raise e | ||||||
|  |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue