From d4b8f0d9dd9a8909a25f184e64a1fc0b766a00d7 Mon Sep 17 00:00:00 2001 From: Nicholas Burlett Date: Sun, 22 Mar 2015 13:33:12 -0700 Subject: [PATCH] Process metadata for all dependencies When adding a dependency, also add the dependency to the metadata hash. Addresses part 1 of #3591. Prior to this fix, the regnerator only paid attention the mtime of the first dependency it checked, so for posts/pages with N multiple dependencies (i.e., every layout file used to render them), it continues to regenerate the post/page approximately N times, at which point it's seen all of the dependencies. --- lib/jekyll/regenerator.rb | 5 ++++- test/test_regenerator.rb | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/regenerator.rb b/lib/jekyll/regenerator.rb index 76d720af..1ee8dcbd 100644 --- a/lib/jekyll/regenerator.rb +++ b/lib/jekyll/regenerator.rb @@ -104,7 +104,10 @@ module Jekyll def add_dependency(path, dependency) return if (metadata[path].nil? || @disabled) - metadata[path]["deps"] << dependency unless metadata[path]["deps"].include? dependency + if !metadata[path]["deps"].include? dependency + metadata[path]["deps"] << dependency + add(dependency) unless metadata.include?(dependency) + end regenerate? dependency end diff --git a/test/test_regenerator.rb b/test/test_regenerator.rb index 87312333..0e8a0333 100644 --- a/test/test_regenerator.rb +++ b/test/test_regenerator.rb @@ -188,6 +188,20 @@ class TestRegenerator < JekyllUnitTest assert @regenerator.modified?(@path) end + should "not regenerate again if multiple dependencies" do + multi_deps = @regenerator.metadata.select {|k,v| v['deps'].length > 2} + multi_dep_path = multi_deps.keys.first + + assert @regenerator.metadata[multi_dep_path]["deps"].length > 2 + + assert @regenerator.modified?(multi_dep_path) + + @site.process + @regenerator.clear_cache + + refute @regenerator.modified?(multi_dep_path) + end + should "regenerate everything if metadata is disabled" do @site.config["full_rebuild"] = true @regenerator.clear