#!/usr/bin/env ruby spec_hits = [] checks = { '_spec\.rb$' => ['focus:\s*true'], '\.rb$' => ['binding\.pry', 'debugger'] } # Find the names of all the filenames that have been (A)dded (C)opied or (M)odified filenames = `git diff --cached --name-only --diff-filter=ACM`.split("\n") filenames.each do |filename| # Perform special checks for _spec filenames (rspec tests) checks.each do |filename_pattern, patterns| if filename.match filename_pattern patterns.each do |contents_pattern| results = `git diff --cached #{filename} | grep "^\+[^+]" | grep "#{contents_pattern}"`.split("\n").map { |r| r.sub(/^\+[\s\t]*/, '') } if $? == 0 # Add the relevant change with line number to the spec_hits array results.each{ |r| spec_hits.push "#{filename}:" + `grep -n '#{r}' #{filename}`.sub(/:\s+/, ' ').chomp } end end end end end if spec_hits.any? puts "\e[33m>>> Remove the following problems from these files before committing\e[0m" puts spec_hits.join("\n") end exit 1 if spec_hits.any?