
The pinned versions of webob and hacking weren't functioning properly with modern Python, so they are unpinned. Unpinning hacking brought a number of extra rules into use, so this commit also contains a number of code style fixes. There was also an incompatibility in the test_setup.sh script, which meant it doesn't work with MySQL 8.0 (which is in Ubuntu 20.04). This is also fixed in this commit. Change-Id: I0889bc35f8babfeec42f6f577d302bb5fbce1c95
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
# Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# 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.
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
|
|
from oslo_config import cfg
|
|
from oslo_log import log
|
|
|
|
from storyboard.db.api import base as db_api
|
|
from storyboard.migrate.launchpad.loader import LaunchpadLoader
|
|
|
|
IMPORT_OPTS = [
|
|
cfg.StrOpt("from-project",
|
|
default="storyboard",
|
|
help="The name of the remote project to import."),
|
|
cfg.StrOpt("to-project",
|
|
default="openstack-infra/storyboard",
|
|
help="The local destination project for the remote stories."),
|
|
cfg.StrOpt("origin",
|
|
default="launchpad",
|
|
help="The origin system from which to import."),
|
|
cfg.IntOpt("auto-increment",
|
|
default=None,
|
|
help="Optionally set the auto-increment on the stories table."),
|
|
cfg.ListOpt("only-tags",
|
|
default=[],
|
|
help="Include only the bugs with specified tags."),
|
|
cfg.ListOpt("exclude-tags",
|
|
default=[],
|
|
help="Exclude the bugs with the specified tags.")
|
|
]
|
|
|
|
CONF = cfg.CONF
|
|
LOG = log.getLogger(__name__)
|
|
|
|
|
|
def main():
|
|
CONF.register_cli_opts(IMPORT_OPTS)
|
|
try:
|
|
log.register_options(CONF)
|
|
except cfg.ArgsAlreadyParsedError:
|
|
pass
|
|
log.setup(CONF, 'storyboard')
|
|
CONF(project='storyboard')
|
|
|
|
# only_tags and exclude_tags are mutually exclusive
|
|
if CONF.only_tags and CONF.exclude_tags:
|
|
print('ERROR: only-tags and exclude-tags are mutually exclusive',
|
|
file=sys.stderr)
|
|
exit(1)
|
|
|
|
# If the user requested an autoincrement value, set that before we start
|
|
# importing things. Note that mysql will automatically set the
|
|
# autoincrement to the next-available id equal to or larger than the
|
|
# requested one.
|
|
auto_increment = CONF.auto_increment
|
|
if auto_increment:
|
|
print('Setting stories.AUTO_INCREMENT to %d' % (auto_increment,))
|
|
session = db_api.get_session(in_request=False)
|
|
session.execute('ALTER TABLE stories AUTO_INCREMENT = %d;'
|
|
% (auto_increment,))
|
|
|
|
if CONF.origin == 'launchpad':
|
|
loader = LaunchpadLoader(CONF.from_project, CONF.to_project,
|
|
set(CONF.only_tags), set(CONF.exclude_tags))
|
|
loader.run()
|
|
else:
|
|
print('Unsupported import origin: %s' % CONF.origin)
|
|
return
|