From 7829af75089a9935679c82f631366d8bdafe9659 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sat, 28 May 2016 20:09:49 +0100 Subject: [PATCH] bottle/test-bot: deep merge bottle JSON hashes. --- Library/Homebrew/cmd/bottle.rb | 2 +- Library/Homebrew/cmd/test-bot.rb | 2 +- Library/Homebrew/utils.rb | 1 + Library/Homebrew/utils/hash.rb | 10 ++++++++++ 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 Library/Homebrew/utils/hash.rb diff --git a/Library/Homebrew/cmd/bottle.rb b/Library/Homebrew/cmd/bottle.rb index 7c93b2d6bd..d1215f0d6d 100644 --- a/Library/Homebrew/cmd/bottle.rb +++ b/Library/Homebrew/cmd/bottle.rb @@ -336,7 +336,7 @@ module Homebrew write = ARGV.include? "--write" bottles_hash = ARGV.named.reduce({}) do |hash, json_file| - hash.merge! Utils::JSON.load(IO.read(json_file)) + deep_merge_hashes hash, Utils::JSON.load(IO.read(json_file)) end bottles_hash.each do |formula_name, bottle_hash| diff --git a/Library/Homebrew/cmd/test-bot.rb b/Library/Homebrew/cmd/test-bot.rb index e83f09e68a..2480b99fe9 100644 --- a/Library/Homebrew/cmd/test-bot.rb +++ b/Library/Homebrew/cmd/test-bot.rb @@ -821,7 +821,7 @@ module Homebrew formula_packaged = {} bottles_hash = json_files.reduce({}) do |hash, json_file| - hash.merge! Utils::JSON.load(IO.read(json_file)) + deep_merge_hashes hash, Utils::JSON.load(IO.read(json_file)) end bottles_hash.each do |formula_name, bottle_hash| diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index caa1a87e2d..09bab2c540 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -1,5 +1,6 @@ require "pathname" require "exceptions" +require "utils/hash" require "utils/json" require "utils/inreplace" require "utils/popen" diff --git a/Library/Homebrew/utils/hash.rb b/Library/Homebrew/utils/hash.rb new file mode 100644 index 0000000000..63dd02c1af --- /dev/null +++ b/Library/Homebrew/utils/hash.rb @@ -0,0 +1,10 @@ +def deep_merge_hashes(hash1, hash2) + merger = proc do |key, v1, v2| + if Hash === v1 && Hash === v2 + v1.merge v2, &merger + else + v2 + end + end + hash1.merge hash2, &merger +end