diff --git a/lib/jekyll/commands/doctor.rb b/lib/jekyll/commands/doctor.rb index a29cbf7e..953c2623 100644 --- a/lib/jekyll/commands/doctor.rb +++ b/lib/jekyll/commands/doctor.rb @@ -51,12 +51,10 @@ module Jekyll urls = {} urls = collect_urls(urls, site.pages, site.dest) urls = collect_urls(urls, site.posts.docs, site.dest) - urls.each do |url, paths| - if paths.size > 1 - conflicting_urls = true - Jekyll.logger.warn "Conflict:", "The URL '#{url}' is the destination" \ - " for the following pages: #{paths.join(", ")}" - end + urls.select { |_, p| p.size > 1 }.each do |url, paths| + conflicting_urls = true + Jekyll.logger.warn "Conflict:", "The URL '#{url}' is the destination" \ + " for the following pages: #{paths.join(", ")}" end conflicting_urls end @@ -80,13 +78,11 @@ module Jekyll def urls_only_differ_by_case(site) urls_only_differ_by_case = false urls = case_insensitive_urls(site.pages + site.docs_to_write, site.dest) - urls.each do |case_insensitive_url, real_urls| - if real_urls.uniq.size > 1 - urls_only_differ_by_case = true - Jekyll.logger.warn "Warning:", "The following URLs only differ" \ - " by case. On a case-insensitive file system one of the URLs" \ - " will be overwritten by the other: #{real_urls.join(", ")}" - end + urls.select { |_, p| p.size > 1 }.each do |_, real_urls| + urls_only_differ_by_case = true + Jekyll.logger.warn "Warning:", "The following URLs only differ" \ + " by case. On a case-insensitive file system one of the URLs" \ + " will be overwritten by the other: #{real_urls.join(", ")}" end urls_only_differ_by_case end diff --git a/lib/jekyll/tags/post_url.rb b/lib/jekyll/tags/post_url.rb index 2da26ec0..723eafd7 100644 --- a/lib/jekyll/tags/post_url.rb +++ b/lib/jekyll/tags/post_url.rb @@ -59,23 +59,21 @@ eos def render(context) site = context.registers[:site] - site.posts.docs.each do |p| - if @post == p - return p.url - end + post = site.posts.docs.find { |p| @post == p } + if post + return post.url end # New matching method did not match, fall back to old method # with deprecation warning if this matches - site.posts.docs.each do |p| - if @post.deprecated_equality p - Jekyll::Deprecator.deprecation_message "A call to '{{ post_url #{@post.name} }}' did not match " \ - "a post using the new matching method of checking name " \ - "(path-date-slug) equality. Please make sure that you " \ - "change this tag to match the post's name exactly." - return p.url - end + post = site.posts.docs.find { |p| @post.deprecated_equality p } + if post + Jekyll::Deprecator.deprecation_message "A call to '{{ post_url #{@post.name} }}' did not match " \ + "a post using the new matching method of checking name " \ + "(path-date-slug) equality. Please make sure that you " \ + "change this tag to match the post's name exactly." + return post.url end raise ArgumentError.new <<-eos