Class: Textus::Doctor::Check::PublishTreeIndexOverlap

Inherits:
Textus::Doctor::Check show all
Defined in:
lib/textus/doctor/check/publish_tree_index_overlap.rb

Overview

ADR 0047 Decision 4. A publish_tree entry prunes its WHOLE target dir on every build. If a derived entry’s publish_to writes a file into that same dir, the tree’s prune will delete it unless the tree ‘ignore`s that filename. Warn so the author adds the ignore before prune eats the index.

Instance Method Summary collapse

Methods inherited from Textus::Doctor::Check

#initialize, name_key

Constructor Details

This class inherits a constructor from Textus::Doctor::Check

Instance Method Details

#callObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/textus/doctor/check/publish_tree_index_overlap.rb', line 9

def call
  entries = manifest.data.entries
  trees = entries.select { |e| e.nested? && e.publish_tree }
  return [] if trees.empty?

  derived_targets = entries.flat_map do |e|
    Array(e.publish_to).map { |rel| [e, rel] }
  end

  trees.flat_map do |tree|
    target_prefix = "#{tree.publish_tree.chomp("/")}/"
    derived_targets.filter_map do |(derived, rel)|
      next nil unless rel.start_with?(target_prefix)

      rel_to_target = rel.delete_prefix(target_prefix)
      next nil if tree.ignored?(rel_to_target)

      issue(tree, derived, rel, rel_to_target)
    end
  end
end