#!/usr/bin/env ruby require 'rubygems' require 'bundler/setup' require 'optparse' require 'reality/zapwhite' @verbose = false @check_only = false @generate_gitattributes = true @exclude_patterns = [] @omit_default_excludes = false @rules = [] @base_directory = Dir.pwd OptionParser.new do |opts| opts.banner = 'Usage: zapwhite [options] directory' opts.on('-c', '--check-only', 'Run check and emit messages but do not change files') do @check_only = true end opts.on('-g', '--[no-]generate-gitattributes', 'Generate the .gitattributes file based on files present on filesystem') do |generate_gitattributes| @generate_gitattributes = generate_gitattributes end opts.on('-d', '--directory DIR', 'Base directory of git repository') do |base_directory| @base_directory = base_directory end opts.on('--omit-default-excludes', 'Do not add the default excludes.') do |pattern| @omit_default_excludes = true end opts.on('-e', '--exclude-pattern PATTERN', 'Replace default exclude patterns with pattern(s) specified.') do |pattern| @exclude_patterns << pattern end opts.on('-r', '--rule RULE', 'Additional rule(s) (a.k.a. lines) to add when generating .gitattributes file.') do |rule| @rules << rule end opts.on('-v', '--verbose', 'Print additional information during operation.') do @verbose = true end end.parse! unless ARGV.empty? puts "Unhandled options: #{ARGV.inspect}" exit -1 end runner = Reality::Zapwhite.new(File.expand_path(@base_directory)) runner.check_only = @check_only runner.generate_gitattributes = @generate_gitattributes runner.additional_gitattribute_rules = @rules runner.exclude_patterns.clear if @omit_default_excludes unless @exclude_patterns.empty? @exclude_patterns.each do |exclude_pattern| runner.exclude_patterns << exclude_pattern end end if @verbose puts "Base Directory: #{@base_directory}" puts "Check for violations or fix violations: #{runner.check_only? ? 'check' : 'fix'}" puts "Generate .gitattributes file?: #{runner.generate_gitattributes?}" unless runner.additional_gitattribute_rules.empty? puts 'Additional .gitattribute rules:' runner.additional_gitattribute_rules.each do |rule| puts " * #{rule}" end end puts "Omit default excludes?: #{@omit_default_excludes}" unless runner.exclude_patterns.empty? puts 'Exclude patterns:' runner.exclude_patterns.each do |pattern| puts " * #{pattern}" end end end exit runner.run