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 #