Skip to content

Instantly share code, notes, and snippets.

@bestie
Created September 16, 2011 20:28
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save bestie/1223064 to your computer and use it in GitHub Desktop.
Save bestie/1223064 to your computer and use it in GitHub Desktop.
Rails Git pre-commit hook for ensuring schema.rb and migration changes commit atomically
#!/usr/bin/env ruby
# vim: set syntax=ruby
# Ensures that changes to the Rails schema.rb file may only be committed if a
# migration file is also committed at the same time.
def schema_modified?
%x[ git diff --cached |grep schema.rb ] == ''
end
def no_migrations_staged?
%x[ git diff --cached |grep 'db\/migrate\/20[0-9]*' ] == ''
end
# regex for typical migration
# db/migrate/20110901091759_remove_invalid_venue_phone_numbers.rb
# db\/migrate\/20[0-9]{12}_.*\.rb$
# or
# db\/migrate\/20[0-9]*
# Warning may only work for like 100 years or something.
if schema_modified? && no_migrations_staged?
puts "Cannot commit modified schema.rb without any migrations."
exit 1
end
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment