class Buildkite::Builder::Manifest
Attributes
root[R]
Public Class Methods
[](name)
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 20 def [](name) manifests[name.to_s] end
[]=(name, manifest)
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 24 def []=(name, manifest) name = name.to_s if manifests.key?(name) raise ArgumentError, "manifest #{name} already exists" end manifests[name] = manifest end
manifests()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 16 def manifests @manifests ||= {} end
new(root, patterns)
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 36 def initialize(root, patterns) @root = Pathname.new(root) @root = Buildkite::Builder.root.join(@root) unless @root.absolute? @patterns = patterns.map(&:to_s) end
resolve(root, patterns)
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 12 def resolve(root, patterns) new(root, Array(patterns)).modified? end
Public Instance Methods
digest()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 61 def digest @digest ||= begin digests = files.map { |file| Digest::MD5.file(Buildkite::Builder.root.join(file)).hexdigest } Digest::MD5.hexdigest(digests.join) end end
files()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 57 def files @files ||= (inclusion_rules.map(&:files).reduce(Set.new, :merge) - exclusion_rules.map(&:files).reduce(Set.new, :merge)).sort.to_set end
modified?()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 42 def modified? # DO NOT intersect FileResolver with manifest files. If the manifest is # large, the operation can be expensive. It's always cheaper to loop # through the changed files and compare them against the rules. unless defined?(@modified) @modified = FileResolver.resolve.modified_files.any? do |file| file = Buildkite::Builder.root.join(file) inclusion_rules.any? { |rule| rule.match?(file) } && exclusion_rules.none? { |rule| rule.match?(file) } end end @modified end
Private Instance Methods
exclusion_rules()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 83 def exclusion_rules @exclusion_rules ||= rules.select(&:exclude) end
inclusion_rules()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 79 def inclusion_rules @inclusion_rules ||= rules.reject(&:exclude) end
rules()
click to toggle source
# File lib/buildkite/builder/manifest.rb, line 70 def rules @rules ||= @patterns.each_with_object([]) do |pattern, rules| pattern = pattern.strip unless pattern.match?(/\A(#|\z)/) rules << Rule.new(root, pattern) end end end