Use site.in_source_dir
This commit is contained in:
parent
2a5cf11ee2
commit
dc30114605
|
@ -21,6 +21,7 @@ require 'time'
|
|||
require 'English'
|
||||
require 'pathname'
|
||||
require 'logger'
|
||||
require 'set'
|
||||
|
||||
# 3rd party
|
||||
require 'safe_yaml/load'
|
||||
|
|
|
@ -168,6 +168,14 @@ module Jekyll
|
|||
true
|
||||
end
|
||||
|
||||
# Determine whether to regenerate the file based on metadata.
|
||||
#
|
||||
# Returns true if file needs to be regenerated
|
||||
def regenerate?
|
||||
site.metadata.regenerate?(site.in_source_dir(relative_path)) ||
|
||||
data['regenerate']
|
||||
end
|
||||
|
||||
# Determine whether the file should be placed into layouts.
|
||||
#
|
||||
# Returns false if the document is an asset file.
|
||||
|
@ -209,8 +217,8 @@ module Jekyll
|
|||
|
||||
# Add layout to dependency tree
|
||||
site.metadata.add_dependency(
|
||||
Jekyll.sanitized_path(site.source, path),
|
||||
Jekyll.sanitized_path(site.source, layout.path)
|
||||
site.in_source_dir(path),
|
||||
site.in_source_dir(layout.path)
|
||||
)
|
||||
|
||||
if layout = layouts[layout.data["layout"]]
|
||||
|
|
|
@ -105,6 +105,14 @@ module Jekyll
|
|||
!(coffeescript_file? || yaml_file?)
|
||||
end
|
||||
|
||||
# Determine whether the document should be regenerated based on metadata.
|
||||
#
|
||||
# Returns true if the document needs to be regenerated.
|
||||
def regenerate?
|
||||
site.metadata.regenerate?(path, write?) ||
|
||||
data['regenerate']
|
||||
end
|
||||
|
||||
# Determine whether the file should be placed into layouts.
|
||||
#
|
||||
# Returns false if the document is either an asset file or a yaml file,
|
||||
|
|
|
@ -29,7 +29,7 @@ module Jekyll
|
|||
@site = site
|
||||
@base = base
|
||||
@name = name
|
||||
@path = Jekyll.sanitized_path(site.source, File.join(base, name))
|
||||
@path = site.in_source_dir(base, name)
|
||||
|
||||
self.data = {}
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
require 'set'
|
||||
|
||||
module Jekyll
|
||||
class Metadata
|
||||
attr_reader :site, :metadata
|
||||
attr_reader :site, :metadata, :cache
|
||||
|
||||
def initialize(site)
|
||||
@site = site
|
||||
|
||||
# Configuration options
|
||||
@full_rebuild = site.config['full_rebuild']
|
||||
@disabled = site.config['no_metadata']
|
||||
|
||||
# Read metadata from file
|
||||
read_metadata
|
||||
|
||||
|
@ -20,48 +22,48 @@ module Jekyll
|
|||
def add(path)
|
||||
return true if not File.exist? path
|
||||
|
||||
@metadata[path] = {
|
||||
metadata[path] = {
|
||||
"mtime" => File.mtime(path),
|
||||
"deps" => []
|
||||
}
|
||||
@cache[path] = true
|
||||
cache[path] = true
|
||||
end
|
||||
|
||||
# Force a path to regenerate
|
||||
#
|
||||
# Returns true.
|
||||
def force(path)
|
||||
@cache[path] = true
|
||||
cache[path] = true
|
||||
end
|
||||
|
||||
# Clear the metadata and cache
|
||||
#
|
||||
# Returns nothing
|
||||
def clear
|
||||
@metadata = {}
|
||||
@cache = {}
|
||||
metadata = {}
|
||||
cache = {}
|
||||
end
|
||||
|
||||
# Checks if a path should be regenerated
|
||||
#
|
||||
# Returns a boolean.
|
||||
def regenerate?(path, add = true)
|
||||
return true if site.config['no_metadata']
|
||||
return true if @disabled
|
||||
|
||||
# Check for path in cache
|
||||
if @cache.has_key? path
|
||||
return @cache[path]
|
||||
if cache.has_key? path
|
||||
return cache[path]
|
||||
end
|
||||
|
||||
# Check path that exists in metadata
|
||||
if (data = @metadata[path])
|
||||
if data = metadata[path]
|
||||
data["deps"].each do |dependency|
|
||||
if regenerate?(dependency)
|
||||
return @cache[dependency] = @cache[path] = true
|
||||
return cache[dependency] = cache[path] = true
|
||||
end
|
||||
end
|
||||
if data["mtime"] == File.mtime(path)
|
||||
return @cache[path] = false
|
||||
if data["mtime"].eql? File.mtime(path)
|
||||
return cache[path] = false
|
||||
else
|
||||
return !add || add(path)
|
||||
end
|
||||
|
@ -75,9 +77,9 @@ module Jekyll
|
|||
#
|
||||
# Returns nothing.
|
||||
def add_dependency(path, dependency)
|
||||
return if (@metadata[path].nil? || site.config['no_metadata'])
|
||||
return if (metadata[path].nil? || @disabled)
|
||||
|
||||
@metadata[path]["deps"] << dependency unless @metadata[path]["deps"].include? dependency
|
||||
metadata[path]["deps"] << dependency unless metadata[path]["deps"].include? dependency
|
||||
regenerate? dependency
|
||||
end
|
||||
|
||||
|
@ -86,7 +88,7 @@ module Jekyll
|
|||
# Returns nothing.
|
||||
def write
|
||||
File.open(metadata_file, 'w') do |f|
|
||||
f.write(@metadata.to_yaml)
|
||||
f.write(metadata.to_yaml)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -94,7 +96,7 @@ module Jekyll
|
|||
#
|
||||
# Returns the String path of the file.
|
||||
def metadata_file
|
||||
Jekyll.sanitized_path(site.source, '.jekyll-metadata')
|
||||
site.in_source_dir('.jekyll-metadata')
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -104,7 +106,7 @@ module Jekyll
|
|||
#
|
||||
# Returns the read metadata.
|
||||
def read_metadata
|
||||
@metadata = if !(site.config['full_rebuild'] || site.config['no_metadata']) && File.file?(metadata_file)
|
||||
@metadata = if !(@full_rebuild || @disabled) && File.file?(metadata_file)
|
||||
SafeYAML.load(File.read(metadata_file))
|
||||
else
|
||||
{}
|
||||
|
|
|
@ -140,8 +140,8 @@ module Jekyll
|
|||
|
||||
# Add layout to dependency tree
|
||||
site.metadata.add_dependency(
|
||||
Jekyll.sanitized_path(site.source, document.path),
|
||||
Jekyll.sanitized_path(site.source, layout.path)
|
||||
site.in_source_dir(document.path),
|
||||
site.in_source_dir(layout.path)
|
||||
) if document.write?
|
||||
|
||||
if layout = site.layouts[layout.data["layout"]]
|
||||
|
|
|
@ -11,7 +11,7 @@ module Jekyll
|
|||
:gems, :plugin_manager
|
||||
|
||||
attr_accessor :converters, :generators
|
||||
attr_accessor :metadata
|
||||
attr_reader :metadata
|
||||
|
||||
# Public: Initialize a new Site.
|
||||
#
|
||||
|
@ -293,19 +293,13 @@ module Jekyll
|
|||
|
||||
collections.each do |label, collection|
|
||||
collection.docs.each do |document|
|
||||
document.output = Jekyll::Renderer.new(self, document).run if (
|
||||
metadata.regenerate?(document.path, document.write?) ||
|
||||
document.data['regenerate']
|
||||
)
|
||||
document.output = Jekyll::Renderer.new(self, document).run if document.regenerate?
|
||||
end
|
||||
end
|
||||
|
||||
payload = site_payload
|
||||
[posts, pages].flatten.each do |page_or_post|
|
||||
page_or_post.render(layouts, payload) if (
|
||||
metadata.regenerate?(Jekyll.sanitized_path(source, page_or_post.relative_path)) ||
|
||||
page_or_post.data['regenerate']
|
||||
)
|
||||
page_or_post.render(layouts, payload) if page_or_post.regenerate?
|
||||
end
|
||||
rescue Errno::ENOENT => e
|
||||
# ignore missing layout dir
|
||||
|
@ -323,12 +317,9 @@ module Jekyll
|
|||
# Returns nothing.
|
||||
def write
|
||||
each_site_file { |item|
|
||||
item.write(dest) if (
|
||||
metadata.regenerate?(Jekyll.sanitized_path(source, item.path)) ||
|
||||
(item.respond_to?(:data) && item.data['regenerate'])
|
||||
)
|
||||
item.write(dest) if item.regenerate?
|
||||
}
|
||||
metadata.write unless site.config['no_metadata']
|
||||
metadata.write unless config['no_metadata']
|
||||
end
|
||||
|
||||
# Construct a Hash of Posts indexed by the specified Post attribute.
|
||||
|
|
|
@ -67,6 +67,8 @@ module Jekyll
|
|||
true
|
||||
end
|
||||
|
||||
alias_method :regenerate?, :write?
|
||||
|
||||
# Write the static file to the destination directory (if modified).
|
||||
#
|
||||
# dest - The String path to the destination dir.
|
||||
|
|
|
@ -117,7 +117,7 @@ eos
|
|||
# Add include to dependency tree
|
||||
if context.registers[:page] and context.registers[:page].has_key? "path"
|
||||
site.metadata.add_dependency(
|
||||
Jekyll.sanitized_path(site.source, context.registers[:page]["path"]),
|
||||
site.in_source_dir(context.registers[:page]["path"]),
|
||||
path
|
||||
)
|
||||
end
|
||||
|
|
|
@ -245,9 +245,9 @@ class TestDocument < Test::Unit::TestCase
|
|||
"output" => true
|
||||
}
|
||||
},
|
||||
"source" => source_dir,
|
||||
"destination" => dest_dir,
|
||||
"full_rebuild" => true
|
||||
"source" => source_dir,
|
||||
"destination" => dest_dir,
|
||||
"full_rebuild" => true
|
||||
}))
|
||||
@site.process
|
||||
@document = @site.collections["slides"].files.find { |doc| doc.relative_path == "_slides/octojekyll.png" }
|
||||
|
|
Loading…
Reference in New Issue