From ac744a6313de1a3b4fd33d99314ba9d556572636 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 09:17:19 -0700 Subject: [PATCH 1/8] Give a build warning if a layout does not exist Throw a warning if a non-"none" layout is specified but the corresponding layout file does not exist. --- lib/jekyll/convertible.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 8e9700b2..9a93ab71 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -163,6 +163,11 @@ module Jekyll def render_all_layouts(layouts, payload, info) # recursively render layouts layout = layouts[data["layout"]] + + if !data["layout"].nil? && data["layout"] != "none" && layout.nil? + Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") + end + used = Set.new([layout]) while layout From 072ddb799f4ca7dadb9e811a26a96f5eb4df276e Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 09:18:35 -0700 Subject: [PATCH 2/8] Do the same for documents --- lib/jekyll/renderer.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index f918cc0d..680faaf6 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -101,6 +101,11 @@ module Jekyll def place_in_layouts(content, payload, info) output = content.dup layout = site.layouts[document.data["layout"]] + + if !data["layout"].nil? && data["layout"] != "none" && layout.nil? + Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") + end + used = Set.new([layout]) while layout From a0d679439f110f6082fc74e770a548f40ca9bbc2 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 10:01:09 -0700 Subject: [PATCH 3/8] Move layout validity logic to separate method --- lib/jekyll/convertible.rb | 13 ++++++++++--- lib/jekyll/renderer.rb | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 9a93ab71..b8cf0b78 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -153,6 +153,15 @@ module Jekyll !asset_file? end + # Checks if the layout specified in the document actually exists + # + # layout - the layout to check + # + # Returns true if the layout is invalid, false if otherwise + def invalid_layout?(layout) + !data["layout"].nil? && data["layout"] != "none" && layout.nil? + end + # Recursively render layouts # # layouts - a list of the layouts @@ -164,9 +173,7 @@ module Jekyll # recursively render layouts layout = layouts[data["layout"]] - if !data["layout"].nil? && data["layout"] != "none" && layout.nil? - Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") - end + Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") if invalid_layout? layout used = Set.new([layout]) diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index 680faaf6..c43f605d 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -92,6 +92,15 @@ module Jekyll raise e end + # Checks if the layout specified in the document actually exists + # + # layout - the layout to check + # + # Returns true if the layout is invalid, false if otherwise + def invalid_layout?(layout) + !document.data["layout"].nil? && document.data["layout"] != "none" && layout.nil? + end + # Render layouts and place given content inside. # # content - the content to be placed in the layout @@ -102,9 +111,7 @@ module Jekyll output = content.dup layout = site.layouts[document.data["layout"]] - if !data["layout"].nil? && data["layout"] != "none" && layout.nil? - Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") - end + Jekyll.logger.warn("Build Warning:", "Layout #{document.data["layout"]} does not exist.") if invalid_layout? layout used = Set.new([layout]) From 7fa30c0decbc8d8244ff4c21443aae9b8f376bca Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 12:17:04 -0700 Subject: [PATCH 4/8] Add path of file requesting nonexistent layout --- lib/jekyll/convertible.rb | 2 +- lib/jekyll/renderer.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index b8cf0b78..be6d120e 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -173,7 +173,7 @@ module Jekyll # recursively render layouts layout = layouts[data["layout"]] - Jekyll.logger.warn("Build Warning:", "Layout #{data["layout"]} does not exist.") if invalid_layout? layout + Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{relative_path} does not exist.") if invalid_layout? layout used = Set.new([layout]) diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index c43f605d..19ec14c7 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -111,7 +111,7 @@ module Jekyll output = content.dup layout = site.layouts[document.data["layout"]] - Jekyll.logger.warn("Build Warning:", "Layout #{document.data["layout"]} does not exist.") if invalid_layout? layout + Jekyll.logger.warn("Build Warning:", "Layout '#{document.data["layout"]}' requested in #{document.relative_path} does not exist.") if invalid_layout? layout used = Set.new([layout]) From c8e0fcfcdf6a929771484ff837edc32565cc2584 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 12:56:54 -0700 Subject: [PATCH 5/8] Fix up errors in CI build --- lib/jekyll/convertible.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index be6d120e..0f1be4f4 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -173,7 +173,7 @@ module Jekyll # recursively render layouts layout = layouts[data["layout"]] - Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{relative_path} does not exist.") if invalid_layout? layout + Jekyll.logger.warn("Build Warning:", "Layout '#{data["layout"]}' requested in #{path} does not exist.") if invalid_layout? layout used = Set.new([layout]) From 4bd5614f4c8dfc85614d6185b3144172c1d4b967 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Sun, 20 Jul 2014 12:57:40 -0700 Subject: [PATCH 6/8] Exclude excerpts from layout checks --- lib/jekyll/convertible.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 0f1be4f4..05f930f0 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -159,7 +159,7 @@ module Jekyll # # Returns true if the layout is invalid, false if otherwise def invalid_layout?(layout) - !data["layout"].nil? && data["layout"] != "none" && layout.nil? + !data["layout"].nil? && data["layout"] != "none" && layout.nil? && self.class.to_s != "Jekyll::Excerpt" end # Recursively render layouts From 75865384321f8ba2f6c039194db8dc862bffce84 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Mon, 21 Jul 2014 09:23:21 -0700 Subject: [PATCH 7/8] Use `is_a?` instead of `class` --- lib/jekyll/convertible.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 05f930f0..1d9ed313 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -159,7 +159,7 @@ module Jekyll # # Returns true if the layout is invalid, false if otherwise def invalid_layout?(layout) - !data["layout"].nil? && data["layout"] != "none" && layout.nil? && self.class.to_s != "Jekyll::Excerpt" + !data["layout"].nil? && data["layout"] != "none" && layout.nil? && !(self.is_a? Jekyll::Excerpt) end # Recursively render layouts From 2785d702e2bc272cd6bdced5e845accabf9d8321 Mon Sep 17 00:00:00 2001 From: Alfred Xing Date: Mon, 28 Jul 2014 18:35:47 -0700 Subject: [PATCH 8/8] Remove 'none' as a valid layout --- lib/jekyll/renderer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/renderer.rb b/lib/jekyll/renderer.rb index 19ec14c7..25a1552c 100644 --- a/lib/jekyll/renderer.rb +++ b/lib/jekyll/renderer.rb @@ -98,7 +98,7 @@ module Jekyll # # Returns true if the layout is invalid, false if otherwise def invalid_layout?(layout) - !document.data["layout"].nil? && document.data["layout"] != "none" && layout.nil? + !document.data["layout"].nil? && layout.nil? end # Render layouts and place given content inside.