Merge pull request #5019 from ayastreb/static_file

Merge pull request 5019
This commit is contained in:
jekyllbot 2016-06-17 19:42:28 -07:00 committed by GitHub
commit 5c03e1da3f
2 changed files with 33 additions and 27 deletions

View File

@ -10,7 +10,6 @@ AllCops:
- lib/jekyll/document.rb
- lib/jekyll/regenerator.rb
- lib/jekyll/renderer.rb
- lib/jekyll/static_file.rb
- lib/jekyll/utils.rb
- bin/**/*
- benchmark/**/*

View File

@ -1,16 +1,25 @@
module Jekyll
class StaticFile
# The cache of last modification times [path] -> mtime.
@@mtimes = {}
attr_reader :relative_path, :extname
class << self
# The cache of last modification times [path] -> mtime.
def mtimes
@mtimes ||= {}
end
def reset_cache
@mtimes = nil
end
end
# Initialize a new StaticFile.
#
# site - The Site.
# base - The String path to the <source>.
# dir - The String path between <source> and the file.
# name - The String filename of the file.
# rubocop: disable ParameterLists
def initialize(site, base, dir, name, collection = nil)
@site = site
@base = base
@ -20,6 +29,7 @@ module Jekyll
@relative_path = File.join(*[@dir, @name].compact)
@extname = File.extname(@name)
end
# rubocop: enable ParameterLists
# Returns source file path.
def path
@ -56,7 +66,7 @@ module Jekyll
#
# Returns true if modified since last write.
def modified?
@@mtimes[path] != mtime
self.class.mtimes[path] != mtime
end
# Whether to write the file to the filesystem
@ -64,7 +74,7 @@ module Jekyll
# Returns true unless the defaults for the destination path from
# _config.yml contain `published: false`.
def write?
defaults.fetch('published', true)
defaults.fetch("published", true)
end
# Write the static file to the destination directory (if modified).
@ -76,28 +86,15 @@ module Jekyll
dest_path = destination(dest)
return false if File.exist?(dest_path) && !modified?
@@mtimes[path] = mtime
self.class.mtimes[path] = mtime
FileUtils.mkdir_p(File.dirname(dest_path))
FileUtils.rm(dest_path) if File.exist?(dest_path)
if @site.safe || Jekyll.env == "production"
FileUtils.cp(path, dest_path)
else
FileUtils.copy_entry(path, dest_path)
end
File.utime(@@mtimes[path], @@mtimes[path], dest_path)
copy_file(dest_path)
true
end
# Reset the mtimes cache (for testing purposes).
#
# Returns nothing.
def self.reset_cache
@@mtimes = {}
nil
end
def to_liquid
{
"extname" => extname,
@ -111,9 +108,9 @@ module Jekyll
:collection => @collection.label,
:path => relative_path[
@collection.relative_directory.size..relative_path.size],
:output_ext => '',
:name => '',
:title => ''
:output_ext => "",
:name => "",
:title => ""
}
end
@ -128,7 +125,7 @@ module Jekyll
:template => @collection.url_template,
:placeholders => placeholders
})
end.to_s.gsub(/\/$/, '')
end.to_s.gsub(%r!/$!, "")
end
# Returns the type of the collection if present, nil otherwise.
@ -141,5 +138,15 @@ module Jekyll
def defaults
@defaults ||= @site.frontmatter_defaults.all url, type
end
private
def copy_file(dest_path)
if @site.safe || Jekyll.env == "production"
FileUtils.cp(path, dest_path)
else
FileUtils.copy_entry(path, dest_path)
end
File.utime(self.class.mtimes[path], self.class.mtimes[path], dest_path)
end
end
end