Skip to content

Commit

Permalink
Merge pull request #1032 from nanoc/gh-1031-recompile-all-reps-of-out…
Browse files Browse the repository at this point in the history
…dated-items

Recompile all reps of outdated items
  • Loading branch information
denisdefreyne committed Dec 23, 2016
2 parents 480eb7a + 3cdb0d1 commit a8a1a21
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 8 deletions.
12 changes: 4 additions & 8 deletions lib/nanoc/base/services/compiler.rb
Expand Up @@ -303,17 +303,13 @@ def prune_config_exclude
end

def compile_reps
# Find item reps to compile
outdated_reps = Set.new(@reps.select { |r| outdatedness_checker.outdated?(r) })

# Reset dependencies for outdated items
outdated_items = outdated_reps.map(&:item).uniq
outdated_items = @reps.select { |r| outdatedness_checker.outdated?(r) }.map(&:item).uniq
outdated_items.each { |i| @dependency_store.forget_dependencies_for(i) }

# Compile reps
selector = Nanoc::Int::ItemRepSelector.new(outdated_reps)
reps_to_recompile = Set.new(outdated_items.flat_map { |i| @reps[i] })
selector = Nanoc::Int::ItemRepSelector.new(reps_to_recompile)
selector.each do |rep|
handle_errors_while(rep) { compile_rep(rep, is_outdated: outdated_reps.include?(rep)) }
handle_errors_while(rep) { compile_rep(rep, is_outdated: reps_to_recompile.include?(rep)) }
end
end

Expand Down
54 changes: 54 additions & 0 deletions spec/nanoc/regressions/gh_1031_spec.rb
@@ -0,0 +1,54 @@
describe 'GH-1031', site: true, stdio: true do
before do
File.write('content/foo.md', '[<%= @items["/bar.*"].compiled_content %>]')
File.write('content/bar.md', 'I am bar!')

File.write('Rules', <<EOS)
compile '/bar.*' do
write '/bar.txt'
end
compile '/foo.*', rep: :default do
write '/foo.txt'
end
compile '/foo.*', rep: :depz do
filter :erb
write '/foo_deps.txt'
end
EOS
end

it 'recompiles all reps of a changed item' do
Nanoc::CLI.run(%w(compile))
expect(File.file?('output/bar.txt')).to be
expect(File.file?('output/foo.txt')).to be
expect(File.file?('output/foo_deps.txt')).to be

File.write('Rules', <<EOS)
compile '/bar.*' do
write '/bar.txt'
end
compile '/foo.*', rep: :default do
write '/foo-new.txt'
end
compile '/foo.*', rep: :depz do
filter :erb
write '/foo_deps.txt'
end
EOS

Nanoc::CLI.run(%w(compile))
expect(File.file?('output/bar.txt')).to be
expect(File.file?('output/foo.txt')).to be
expect(File.file?('output/foo_deps.txt')).to be
expect(File.read('output/foo_deps.txt')).to eq('[I am bar!]')

File.write('content/bar.md', 'I am a newer bar!')

Nanoc::CLI.run(%w(compile))
expect(File.read('output/foo_deps.txt')).to eq('[I am a newer bar!]')
end
end

0 comments on commit a8a1a21

Please sign in to comment.