lib/knife/changelog/policyfile.rb in knife-changelog-1.3.0 vs lib/knife/changelog/policyfile.rb in knife-changelog-1.4.0
- old
+ new
@@ -174,14 +174,24 @@
def reject_version_filter(data)
raise 'Data containing versions is nil' if data.nil?
data['current_version'] == data['target_version'] || data['target_version'].nil?
end
+ # Search for cookbook downgrade and raise an error if any
+ def validate_downgrade!(data)
+ downgrade = data.select { |_, ck| ::Gem::Version.new(ck['target_version']) < ::Gem::Version.new(ck['current_version']) }
+
+ return if downgrade.empty?
+
+ details = downgrade.map { |name, data| "#{name} (#{data['current_version']} -> #{data['target_version']})" }
+ raise "Trying to downgrade following cookbooks: #{details.join(', ')}"
+ end
+
# Generates Policyfile changelog
#
# @return [String] formatted version changelog
- def generate_changelog
+ def generate_changelog(prevent_downgrade: false)
lock_current = read_policyfile_lock(@policyfile_dir)
current = versions(lock_current['cookbook_locks'], 'current')
lock_target = update_policyfile_lock
target = versions(lock_target['cookbook_locks'], 'target')
@@ -190,9 +200,12 @@
changelog_cookbooks = if @with_dependencies || @cookbooks_to_update.nil?
updated_cookbooks
else
updated_cookbooks.select { |name, _data| @cookbooks_to_update.include?(name) }
end
+
+ validate_downgrade!(updated_cookbooks) if prevent_downgrade
+
generate_changelog_from_versions(changelog_cookbooks)
end
# Generates Policyfile changelog
#