lib/gdk/command/diff_config.rb (64 lines of code) (raw):

# frozen_string_literal: true require 'fileutils' module GDK module Command class DiffConfig < BaseCommand def run(_ = []) Shellout.new(GDK::MAKE, 'touch-examples').run # We chdir because rake file tasks don't work with an absolute path results = Dir.chdir(GDK.root) do # Iterate over each file from files Array and print any output to # stderr that may have come from running `make <file>`. jobs.filter_map { |x| x.join[:results] } end results.each do |diff| output = diff.output.to_s.chomp next if output.empty? out.puts(diff.file) out.puts('-' * 80) out.puts(output) out.puts("\n") end true end private def jobs diffable_files.map do |file| Thread.new do Thread.current[:results] = ConfigDiff.new(file) end end end def diffable_files GDK::TaskHelpers::ConfigTasks.build.diffable_template_tasks.map(&:name) end class ConfigDiff attr_reader :file, :output def initialize(file) @file = file execute end def file_path @file_path ||= GDK.root.join(file) end private def execute # It's entirely possible file_path doesn't exist because it may be # a config file that user does not need and therefore has not been # generated. return nil unless file_path.exist? update_config_file @output = diff_with_unchanged ensure temporary_diff_file.delete if temporary_diff_file.exist? end def temporary_diff_file @temporary_diff_file ||= GDK.config.gdk_root.join('tmp', "diff_#{file.gsub(%r{/+}, '_')}") end def update_config_file Rake::Task[file].execute(destination: temporary_diff_file.to_s) end def diff_with_unchanged out = run('git', 'diff', '--no-index', '--no-prefix', '--unified=2', '--color', file, temporary_diff_file.to_s) out.split("\n").drop(4).join("\n") end def run(*commands) Shellout.new(commands, chdir: GDK.root).run end end end end end