From 5e9bb877d54fc1803a866f49997f3e819c3ca650 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sat, 3 Sep 2016 17:30:26 +0100 Subject: [PATCH] bottle: fix --keep-old JSON generation. Ensure that the JSON file contains all the bottle checksums when using `--keep-old`. This avoids having to use the formula DSL when merging and relies on existing integrity checks. This change does nothing differently if `--keep-old` is not passed. --- Library/Homebrew/cmd/bottle.rb | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/bottle.rb b/Library/Homebrew/cmd/bottle.rb index 138e482e0d..888e8c7789 100644 --- a/Library/Homebrew/cmd/bottle.rb +++ b/Library/Homebrew/cmd/bottle.rb @@ -279,10 +279,9 @@ module Homebrew end bottle.rebuild rebuild sha256 = bottle_path.sha256 - bottle.sha256 sha256 => Utils::Bottles.tag - old_spec = f.bottle_specification - if ARGV.include?("--keep-old") && !old_spec.checksums.empty? + if ARGV.include?("--keep-old") && !f.bottle_specification.checksums.empty? + old_spec = f.bottle_specification bad_fields = [:root_url, :prefix, :cellar, :rebuild].select do |field| old_spec.send(field) != bottle.send(field) end @@ -291,8 +290,11 @@ module Homebrew bottle_path.unlink if bottle_path.exist? odie "--keep-old is passed but there are changes in: #{bad_fields.join ", "}" end + bottle = old_spec end + bottle.sha256 sha256 => Utils::Bottles.tag + output = bottle_output bottle puts "./#{filename}" @@ -323,6 +325,19 @@ module Homebrew }, }, } + if ARGV.include?("--keep-old") + bottle.checksums.each do |hash_type, checksums| + checksums.each do |checksum_hash| + checksum_hash.each do |checksum, tag| + tag_hash = {} + tag_hash["filename"] ||= Bottle::Filename.create(f, tag, rebuild).to_s + tag_hash[hash_type.to_s] ||= checksum.hexdigest + json[f.full_name]["bottle"]["tags"][tag.to_s] ||= tag_hash + end + end + end + end + File.open("#{filename.prefix}.bottle.json", "w") do |file| file.write Utils::JSON.dump json end