Skip to content

Instantly share code, notes, and snippets.

@mgraham
Forked from mileszs/pre-commit
Created July 25, 2016 16:55
Show Gist options
  • Save mgraham/08937f9215a0fed4e6a9cd83afef8852 to your computer and use it in GitHub Desktop.
Save mgraham/08937f9215a0fed4e6a9cd83afef8852 to your computer and use it in GitHub Desktop.
Git pre-commit hook for prompting to remove binding.pry and debugger lines lines. (Includes a commented example of adding a check for focus in spec files.)
#!/usr/bin/env ruby
hits = []
checks = {
'_spec\.rb$' => ['focus: *true', 'focus *=> *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]*/, '') }
if $? == 0
puts "results: #{results}"
# Add the relevant change with line number to the hits array
results.each do |r|
count = 0
File.open(filename).readlines.each do |line|
line.chomp!
count += 1
if line =~ /#{r}/
hits.push "#{filename}: #{count}: #{line}"
end
end
end
end
end
end
end
end
if hits.any?
puts "\e[33m>>> Please remove the following problems from these files before committing\e[0m"
puts hits.join("\n")
end
exit 1 if hits.any?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment