lib/xcodeproj/command/project_diff.rb
module Xcodeproj
class Command
class ProjectDiff < Command
self.summary = 'Shows the difference between two projects'
self.description = summary + <<-EOS.gsub(/ {8}/, '')
It shows the difference in a UUID agnostic fashion.
To reduce the noise (and to simplify implementation) differences in the
order of arrays are ignored.
EOS
def self.options
[
['--ignore=KEY', 'A key to ignore in the comparison. Can be specified multiple times.'],
].concat(super)
end
self.arguments = [
CLAide::Argument.new('PROJECT1', true),
CLAide::Argument.new('PROJECT2', true),
]
def initialize(argv)
@path_project1 = argv.shift_argument
@path_project2 = argv.shift_argument
@keys_to_ignore = argv.all_options('ignore')
super
end
def validate!
super
@project1, @project2 = open_project!(@path_project1, @path_project2)
end
def run
hash_1 = @project1.to_tree_hash.dup
hash_2 = @project2.to_tree_hash.dup
@keys_to_ignore.each do |key|
Differ.clean_hash!(hash_1, key)
Differ.clean_hash!(hash_2, key)
end
diff = Differ.project_diff(hash_1, hash_2, @path_project1, @path_project2)
require 'yaml'
yaml = diff.to_yaml
yaml.gsub!(@path_project1, @path_project1.cyan)
yaml.gsub!(@path_project2, @path_project2.magenta)
yaml.gsub!(':diff:', 'diff:'.yellow)
puts yaml
end
end
end
end