diff --git a/tools/reserve-migrations.py b/tools/reserve-migrations.py new file mode 100755 index 0000000000..080fb3889a --- /dev/null +++ b/tools/reserve-migrations.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import argparse +import glob +import os +import subprocess + +BASE = 'nova/db/sqlalchemy/migrate_repo/versions'.split('/') +API_BASE = 'nova/db/sqlalchemy/api_migrations/migrate_repo/versions'.split('/') + +STUB = """ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# This is a placeholder for backports. +# Do not use this number for new work. New work starts after +# all the placeholders. +# +# See this for more information: +# http://lists.openstack.org/pipermail/openstack-dev/2013-March/006827.html + + +def upgrade(migrate_engine): + pass +""" + + +def get_last_migration(base): + path = os.path.join(*tuple(base + ['[0-9]*.py'])) + migrations = sorted([os.path.split(fn)[-1] for fn in glob.glob(path)]) + return int(migrations[-1].split('_')[0]) + + +def reserve_migrations(base, number, git_add): + last = get_last_migration(base) + for i in range(last + 1, last + number + 1): + name = '%03i_placeholder.py' % i + path = os.path.join(*tuple(base + [name])) + with open(path, 'w') as f: + f.write(STUB) + print('Created %s' % path) + if git_add: + subprocess.call('git add %s' % path, shell=True) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-n', '--number', default=10, + type=int, + help='Number of migrations to reserve') + parser.add_argument('-g', '--git-add', action='store_const', + const=True, default=False, + help='Automatically git-add new migrations') + parser.add_argument('-a', '--api', action='store_const', + const=True, default=False, + help='Reserve migrations for the API database') + args = parser.parse_args() + if args.api: + base = API_BASE + else: + base = BASE + reserve_migrations(base, args.number, args.git_add) + + +if __name__ == '__main__': + main()