Skip to content

Commit

Permalink
Merge pull request jekyll#5025 from ayastreb/regenerator
Browse files Browse the repository at this point in the history
Merge pull request 5025
  • Loading branch information
jekyllbot authored Jun 23, 2016
2 parents 9278eb8 + 0b169f7 commit d093c76
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 29 deletions.
1 change: 0 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ AllCops:
- lib/jekyll/configuration.rb
- lib/jekyll/convertible.rb
- lib/jekyll/document.rb
- lib/jekyll/regenerator.rb
- lib/jekyll/renderer.rb
- bin/**/*
- benchmark/**/*
Expand Down
78 changes: 50 additions & 28 deletions lib/jekyll/regenerator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,14 @@ def initialize(site)
def regenerate?(document)
case document
when Page
document.asset_file? || document.data['regenerate'] ||
source_modified_or_dest_missing?(
site.in_source_dir(document.relative_path), document.destination(@site.dest)
)
regenerate_page?(document)
when Document
!document.write? || document.data['regenerate'] ||
source_modified_or_dest_missing?(
document.path, document.destination(@site.dest)
)
regenerate_document?(document)
else
source_path = document.respond_to?(:path) ? document.path : nil
dest_path = document.respond_to?(:destination) ? document.destination(@site.dest) : nil
source_path = document.respond_to?(:path) ? document.path : nil
dest_path = if document.respond_to?(:destination)
document.destination(@site.dest)
end
source_modified_or_dest_missing?(source_path, dest_path)
end
end
Expand All @@ -44,7 +40,7 @@ def add(path)

metadata[path] = {
"mtime" => File.mtime(path),
"deps" => []
"deps" => []
}
cache[path] = true
end
Expand Down Expand Up @@ -94,23 +90,14 @@ def modified?(path)
return cache[path]
end

# Check path that exists in metadata
data = metadata[path]
if data
data["deps"].each do |dependency|
if modified?(dependency)
return cache[dependency] = cache[path] = true
end
end
if File.exist?(path) && data["mtime"].eql?(File.mtime(path))
return cache[path] = false
else
return add(path)
end
if metadata[path]
# If we have seen this file before,
# check if it or one of its dependencies has been modified
existing_file_modified?(path)
else
# If we have not seen this file before, add it to the metadata and regenerate it
add(path)
end

# Path does not exist in metadata, add it
return add(path)
end

# Add a dependency of a path
Expand Down Expand Up @@ -139,7 +126,7 @@ def write_metadata
#
# Returns the String path of the file.
def metadata_file
site.in_source_dir('.jekyll-metadata')
site.in_source_dir(".jekyll-metadata")
end

# Check if metadata has been disabled
Expand Down Expand Up @@ -173,5 +160,40 @@ def read_metadata
{}
end
end

private
def regenerate_page?(document)
document.asset_file? || document.data["regenerate"] ||
source_modified_or_dest_missing?(
site.in_source_dir(document.relative_path), document.destination(@site.dest)
)
end

private
def regenerate_document?(document)
!document.write? || document.data["regenerate"] ||
source_modified_or_dest_missing?(
document.path, document.destination(@site.dest)
)
end

private
def existing_file_modified?(path)
# If one of this file dependencies have been modified,
# set the regeneration bit for both the dependency and the file to true
metadata[path]["deps"].each do |dependency|
if modified?(dependency)
return cache[dependency] = cache[path] = true
end
end

if File.exist?(path) && metadata[path]["mtime"].eql?(File.mtime(path))
# If this file has not been modified, set the regeneration bit to false
cache[path] = false
else
# If it has been modified, set it to true
add(path)
end
end
end
end

0 comments on commit d093c76

Please sign in to comment.