class Librarian::SpecChangeSet
Attributes
environment[RW]
lock[R]
spec[R]
Public Class Methods
new(environment, spec, lock)
click to toggle source
# File lib/librarian/spec_change_set.rb, line 14 def initialize(environment, spec, lock) self.environment = environment raise TypeError, "can't convert #{spec.class} into #{Spec}" unless Spec === spec raise TypeError, "can't convert #{lock.class} into #{Resolution}" unless Resolution === lock @spec, @lock = spec, lock end
Public Instance Methods
added_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 75 def added_dependency_names @added_dependency_names ||= spec_dependency_names - lock_dependency_names end
analyze()
click to toggle source
Returns an array of those manifests from the previous spec which should be kept,
based on inspecting the new spec against the locked resolution from the previous spec.
# File lib/librarian/spec_change_set.rb, line 142 def analyze @analyze ||= begin debug { "Analyzing spec and lock:" } if same? debug { " Same!" } return lock.manifests end debug { " Removed:" } ; removed_dependency_names.each { |name| debug { " #{name}" } } debug { " ExplicitRemoved:" } ; explicit_removed_dependency_names.each { |name| debug { " #{name}" } } debug { " Added:" } ; added_dependency_names.each { |name| debug { " #{name}" } } debug { " NonMatchingAdded:" } ; nonmatching_added_dependency_names.each { |name| debug { " #{name}" } } debug { " Changed:" } ; changed_dependency_names.each { |name| debug { " #{name}" } } debug { " DeepKeep:" } ; deep_keep_manifest_names.each { |name| debug { " #{name}" } } debug { " ShallowStrip:" } ; shallow_strip_manifest_names.each { |name| debug { " #{name}" } } manifests = ManifestSet.new(lock_manifests) manifests.deep_keep!(deep_keep_manifest_names) manifests.shallow_strip!(shallow_strip_manifest_names) manifests.to_a end end
changed?()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 25 def changed? !same? end
changed_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 98 def changed_dependency_names @changed_dependency_names ||= common_dependency_names.reject do |name| spec_dependency = spec_dependency_index[name] lock_dependency = lock_dependency_index[name] lock_manifest = lock_manifests_index[name] same = true same &&= spec_dependency.satisfied_by?(lock_manifest) same &&= spec_dependency.source == lock_dependency.source same end.to_set end
common_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 94 def common_dependency_names @common_dependency_names ||= lock_dependency_names & spec_dependency_names end
deep_keep_manifest_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 110 def deep_keep_manifest_names @deep_keep_manifest_names ||= begin lock_dependency_names - ( removed_dependency_names + changed_dependency_names + nonmatching_added_dependency_names ) end end
explicit_removed_dependency_names()
click to toggle source
A dependency which is deleted from the specfile will, in the general case,
be removed conservatively. This means it might not actually be removed. But if the dependency originally declared a source which is now non- default, it must be removed, even if another dependency has a transitive dependency on the one that was removed (which is the scenario in which a conservative removal would not remove it). In this case, we must also remove it explicitly so that it can be re-resolved from the default source.
# File lib/librarian/spec_change_set.rb, line 68 def explicit_removed_dependency_names @explicit_removed_dependency_names ||= removed_dependency_names.reject do |name| lock_manifest = lock_manifests_index[name] spec.sources.include?(lock_manifest.source) end.to_set end
inspect()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 126 def inspect Helpers.strip_heredoc(" <##{self.class.name}: Removed: #{removed_dependency_names.to_a.join(", ")} ExplicitRemoved: #{explicit_removed_dependency_names.to_a.join(", ")} Added: #{added_dependency_names.to_a.join(", ")} NonMatchingAdded: #{nonmatching_added_dependency_names.to_a.join(", ")} Changed: #{changed_dependency_names.to_a.join(", ")} DeepKeep: #{deep_keep_manifest_names.to_a.join(", ")} ShallowStrip: #{shallow_strip_manifest_names.to_a.join(", ")} > ") end
lock_dependencies()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 39 def lock_dependencies @lock_dependencies ||= lock.dependencies end
lock_dependency_index()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 45 def lock_dependency_index @lock_dependency_index ||= Hash[lock_dependencies.map{|d| [d.name, d]}] end
lock_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 42 def lock_dependency_names @lock_dependency_names ||= Set.new(lock_dependencies.map{|d| d.name}) end
lock_manifests()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 49 def lock_manifests @lock_manifests ||= lock.manifests end
lock_manifests_index()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 52 def lock_manifests_index @lock_manifests_index ||= ManifestSet.new(lock_manifests).to_hash end
nonmatching_added_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 79 def nonmatching_added_dependency_names @nonmatching_added_dependency_names ||= added_dependency_names.reject do |name| spec_dependency = spec_dependency_index[name] lock_manifest = lock_manifests_index[name] if lock_manifest matching = true matching &&= spec_dependency.satisfied_by?(lock_manifest) matching &&= spec_dependency.source == lock_manifest.source matching else false end end.to_set end
removed_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 56 def removed_dependency_names @removed_dependency_names ||= lock_dependency_names - spec_dependency_names end
same?()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 21 def same? @same ||= spec.dependencies.sort_by{|d| d.name} == lock.dependencies.sort_by{|d| d.name} end
shallow_strip_manifest_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 120 def shallow_strip_manifest_names @shallow_strip_manifest_names ||= begin explicit_removed_dependency_names + changed_dependency_names end end
spec_dependencies()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 29 def spec_dependencies @spec_dependencies ||= spec.dependencies end
spec_dependency_index()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 35 def spec_dependency_index @spec_dependency_index ||= Hash[spec_dependencies.map{|d| [d.name, d]}] end
spec_dependency_names()
click to toggle source
# File lib/librarian/spec_change_set.rb, line 32 def spec_dependency_names @spec_dependency_names ||= Set.new(spec_dependencies.map{|d| d.name}) end
Private Instance Methods
debug(*args, &block)
click to toggle source
# File lib/librarian/spec_change_set.rb, line 168 def debug(*args, &block) environment.logger.debug(*args, &block) end