Skip to content

Instantly share code, notes, and snippets.

Created November 15, 2012 05:54
  • Star 43 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save skyriverbend/4076864 to your computer and use it in GitHub Desktop.
Rails: Switch branches and run migrations
To use this script, you must be in the root directory of a Rails project that
is using git. You should also make sure that your directory does not contain any
uncommitted changes. Then run:
$ python name_of_another_branch
Running the above will do the following:
1. Roll back any migrations on your current branch which do not exist on the
other branch
2. Discard any changes to the db/schema.rb file
3. Check out the other branch
4. Run any new migrations existing in the other branch
5. Update your test database
- Check if git directory is dirty. If so, do not run.
import sys
import subprocess
import re
BRANCH_NAME = sys.argv[1]
print "*** Switching from current branch to: " + BRANCH_NAME
files_changed = subprocess.check_output(("git diff " + BRANCH_NAME + " --name-status").split())
migrations = re.findall("A\\tdb/migrate/([0-9]+)", files_changed)
for migration in reversed(migrations):
sh_command = "bundle exec rake db:migrate:down VERSION=" + migration
print "*** Running: " + sh_command
print "*** Discarding any changes to db/schema.rb"
print"git checkout db/schema.rb".split())"git checkout " + BRANCH_NAME).split())
print "*** Running: bundle exec rake db:migrate"
print"bundle exec rake db:migrate".split())
print "*** Running: bundle exec rake db:test:prepare"
print"bundle exec rake db:test:prepare".split())
print '*** Successfully switched branches and migrated to "' + BRANCH_NAME + '"'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment