From a2ee820609765ca95dfad5803fd26da72b67a9c2 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Tue, 19 May 2015 22:47:52 -0700 Subject: [PATCH] Regenerator: handle deleted/renamed/moved dependencies Should fix #3716 --- lib/jekyll/regenerator.rb | 2 +- test/test_regenerator.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/jekyll/regenerator.rb b/lib/jekyll/regenerator.rb index 8ddfa269..9b1dc67a 100644 --- a/lib/jekyll/regenerator.rb +++ b/lib/jekyll/regenerator.rb @@ -102,7 +102,7 @@ module Jekyll return cache[dependency] = cache[path] = true end end - if data["mtime"].eql? File.mtime(path) + if File.exist?(path) && data["mtime"].eql?(File.mtime(path)) return cache[path] = false else return add(path) diff --git a/test/test_regenerator.rb b/test/test_regenerator.rb index 060fc524..eda25969 100644 --- a/test/test_regenerator.rb +++ b/test/test_regenerator.rb @@ -89,6 +89,41 @@ class TestRegenerator < JekyllUnitTest end end + context "The site regenerator" do + setup do + FileUtils.rm_rf(source_dir(".jekyll-metadata")) + + @site = fixture_site({ + "full_rebuild" => false + }) + + @site.read + @post = @site.posts.first + @regenerator = @site.regenerator + @regenerator.regenerate?(@post) + + @layout_path = source_dir("_layouts/default.html") + end + + teardown do + File.rename(@layout_path + ".tmp", @layout_path) + end + + should "handle deleted/nonexistent dependencies" do + assert_equal 1, @regenerator.metadata.size + path = @regenerator.metadata.keys[0] + + assert File.exist?(@layout_path) + @regenerator.add_dependency(path, @layout_path) + + File.rename(@layout_path, @layout_path + ".tmp") + refute File.exist?(@layout_path) + + @regenerator.clear_cache + assert @regenerator.regenerate?(@post) + end + end + context "The site metadata" do setup do FileUtils.rm_rf(source_dir(".jekyll-metadata"))