Merge pull request #2994 from jekyll/fixes-from-benchmarking
This commit is contained in:
commit
00d29e7e77
|
@ -13,3 +13,4 @@ site/_site/
|
|||
coverage
|
||||
.ruby-version
|
||||
.sass-cache
|
||||
tmp/stackprof-*
|
||||
|
|
|
@ -75,7 +75,7 @@ module Jekyll
|
|||
# Returns a String containing the directory name where the collection
|
||||
# is stored on the filesystem.
|
||||
def relative_directory
|
||||
"_#{label}"
|
||||
@relative_directory ||= "_#{label}"
|
||||
end
|
||||
|
||||
# The full path to the directory containing the
|
||||
|
@ -83,7 +83,7 @@ module Jekyll
|
|||
# Returns a String containing th directory name where the collection
|
||||
# is stored on the filesystem.
|
||||
def directory
|
||||
Jekyll.sanitized_path(site.source, relative_directory)
|
||||
@directory ||= Jekyll.sanitized_path(site.source, relative_directory)
|
||||
end
|
||||
|
||||
# Checks whether the directory "exists" for this collection.
|
||||
|
|
|
@ -46,9 +46,15 @@ module Jekyll
|
|||
].map(&:to_sym)
|
||||
end
|
||||
|
||||
def extname_matches_regexp
|
||||
@extname_matches_regexp ||= Regexp.new(
|
||||
'(' + @config['markdown_ext'].gsub(',','|') +')$',
|
||||
Regexp::IGNORECASE
|
||||
)
|
||||
end
|
||||
|
||||
def matches(ext)
|
||||
rgx = '^\.(' + @config['markdown_ext'].gsub(',','|') +')$'
|
||||
ext =~ Regexp.new(rgx, Regexp::IGNORECASE)
|
||||
ext =~ extname_matches_regexp
|
||||
end
|
||||
|
||||
def output_ext(ext)
|
||||
|
|
|
@ -16,9 +16,15 @@ module Jekyll
|
|||
raise Errors::FatalException.new("Missing dependency: RedCloth")
|
||||
end
|
||||
|
||||
def extname_matches_regexp
|
||||
@extname_matches_regexp ||= Regexp.new(
|
||||
'(' + @config['textile_ext'].gsub(',','|') +')$',
|
||||
Regexp::IGNORECASE
|
||||
)
|
||||
end
|
||||
|
||||
def matches(ext)
|
||||
rgx = '(' + @config['textile_ext'].gsub(',','|') +')'
|
||||
ext =~ Regexp.new(rgx, Regexp::IGNORECASE)
|
||||
ext =~ extname_matches_regexp
|
||||
end
|
||||
|
||||
def output_ext(ext)
|
||||
|
|
|
@ -4,7 +4,7 @@ module Jekyll
|
|||
class Document
|
||||
include Comparable
|
||||
|
||||
attr_reader :path, :site
|
||||
attr_reader :path, :site, :extname
|
||||
attr_accessor :content, :collection, :output
|
||||
|
||||
# Create a new Document.
|
||||
|
@ -16,6 +16,7 @@ module Jekyll
|
|||
def initialize(path, relations)
|
||||
@site = relations[:site]
|
||||
@path = path
|
||||
@extname = File.extname(path)
|
||||
@collection = relations[:collection]
|
||||
@has_yaml_header = nil
|
||||
end
|
||||
|
@ -33,23 +34,21 @@ module Jekyll
|
|||
# Returns a String path which represents the relative path
|
||||
# from the site source to this document
|
||||
def relative_path
|
||||
Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s
|
||||
@relative_path ||= Pathname.new(path).relative_path_from(Pathname.new(site.source)).to_s
|
||||
end
|
||||
|
||||
# The base filename of the document, without the file extname.
|
||||
#
|
||||
# Returns the basename without the file extname.
|
||||
def basename_without_ext
|
||||
@basename_without_ext ||= File.basename(path, '.*')
|
||||
end
|
||||
|
||||
# The base filename of the document.
|
||||
#
|
||||
# suffix - (optional) the suffix to be removed from the end of the filename
|
||||
#
|
||||
# Returns the base filename of the document.
|
||||
def basename(suffix = "")
|
||||
File.basename(path, suffix)
|
||||
end
|
||||
|
||||
# The extension name of the document.
|
||||
#
|
||||
# Returns the extension name of the document.
|
||||
def extname
|
||||
File.extname(path)
|
||||
def basename
|
||||
@basename ||= File.basename(path)
|
||||
end
|
||||
|
||||
# Produces a "cleaned" relative path.
|
||||
|
@ -64,6 +63,7 @@ module Jekyll
|
|||
#
|
||||
# Returns the cleaned relative path of the document.
|
||||
def cleaned_relative_path
|
||||
@cleaned_relative_path ||=
|
||||
relative_path[0 .. -extname.length - 1].sub(collection.relative_directory, "")
|
||||
end
|
||||
|
||||
|
@ -129,8 +129,8 @@ module Jekyll
|
|||
collection: collection.label,
|
||||
path: cleaned_relative_path,
|
||||
output_ext: Jekyll::Renderer.new(site, self).output_ext,
|
||||
name: Utils.slugify(basename(".*")),
|
||||
title: Utils.slugify(data['title']) || Utils.slugify(basename(".*"))
|
||||
name: Utils.slugify(basename_without_ext),
|
||||
title: Utils.slugify(data['title']) || Utils.slugify(basename_without_ext)
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -13,11 +13,14 @@ module Jekyll
|
|||
|
||||
class IncludeTag < Liquid::Tag
|
||||
|
||||
attr_reader :includes_dir
|
||||
|
||||
VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
|
||||
VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/
|
||||
|
||||
def initialize(tag_name, markup, tokens)
|
||||
super
|
||||
@includes_dir = tag_includes_dir
|
||||
matched = markup.strip.match(VARIABLE_SYNTAX)
|
||||
if matched
|
||||
@file = matched['variable'].strip
|
||||
|
@ -97,7 +100,7 @@ eos
|
|||
end
|
||||
end
|
||||
|
||||
def includes_dir
|
||||
def tag_includes_dir
|
||||
'_includes'
|
||||
end
|
||||
|
||||
|
@ -118,12 +121,12 @@ eos
|
|||
partial.render!(context)
|
||||
end
|
||||
rescue => e
|
||||
raise IncludeTagError.new e.message, File.join(includes_dir, @file)
|
||||
raise IncludeTagError.new e.message, File.join(@includes_dir, @file)
|
||||
end
|
||||
end
|
||||
|
||||
def resolved_includes_dir(context)
|
||||
File.join(File.realpath(context.registers[:site].source), includes_dir)
|
||||
File.join(File.realpath(context.registers[:site].source), @includes_dir)
|
||||
end
|
||||
|
||||
def validate_path(path, dir, safe)
|
||||
|
@ -135,7 +138,7 @@ eos
|
|||
end
|
||||
|
||||
def path_relative_to_source(dir, path)
|
||||
File.join(includes_dir, path.sub(Regexp.new("^#{dir}"), ""))
|
||||
File.join(@includes_dir, path.sub(Regexp.new("^#{dir}"), ""))
|
||||
end
|
||||
|
||||
def realpath_prefixed_with?(path, dir)
|
||||
|
@ -149,13 +152,16 @@ eos
|
|||
end
|
||||
|
||||
class IncludeRelativeTag < IncludeTag
|
||||
def includes_dir
|
||||
def tag_includes_dir
|
||||
'.'
|
||||
end
|
||||
|
||||
def page_path(context)
|
||||
context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
|
||||
end
|
||||
|
||||
def resolved_includes_dir(context)
|
||||
page_path = context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
|
||||
Jekyll.sanitized_path(context.registers[:site].source, page_path)
|
||||
Jekyll.sanitized_path(context.registers[:site].source, page_path(context))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,11 +3,14 @@
|
|||
set -e
|
||||
|
||||
export BENCHMARK=true
|
||||
script/bootstrap
|
||||
command -v stackprof > /dev/null || script/bootstrap
|
||||
|
||||
TEST_SCRIPT="Jekyll::Commands::Build.process({'source' => 'site'})"
|
||||
PROF_OUTPUT_FILE=tmp/stackprof-$(date +%Y%m%d).dump
|
||||
|
||||
bundle exec ruby -r./lib/jekyll -rstackprof -e "StackProf.run(mode: :cpu, out: '${PROF_OUTPUT_FILE}') { ${TEST_SCRIPT} }"
|
||||
test -f "$PROF_OUTPUT_FILE" || {
|
||||
bundle exec ruby -r./lib/jekyll -rstackprof \
|
||||
-e "StackProf.run(mode: :cpu, out: '${PROF_OUTPUT_FILE}') { ${TEST_SCRIPT} }"
|
||||
}
|
||||
|
||||
bundle exec stackprof $PROF_OUTPUT_FILE $@
|
||||
|
|
|
@ -25,8 +25,8 @@ class TestDocument < Test::Unit::TestCase
|
|||
assert_equal "configuration.md", @document.basename
|
||||
end
|
||||
|
||||
should "allow the suffix to be specified for the basename" do
|
||||
assert_equal "configuration", @document.basename(".*")
|
||||
should "know its basename without extname" do
|
||||
assert_equal "configuration", @document.basename_without_ext
|
||||
end
|
||||
|
||||
should "know whether its a yaml file" do
|
||||
|
|
Loading…
Reference in New Issue