Merge "autohelp: support reading options from multiple repos"

This commit is contained in:
Jenkins 2015-07-27 03:39:08 +00:00 committed by Gerrit Code Review
commit 0b67e01e79
4 changed files with 85 additions and 54 deletions

View File

@ -6,7 +6,9 @@ Release notes
* ``openstack-doc-test``: Always built index page in checkbuild.
* ``openstack-auto-commands``: Add support for murano.
* Remove ``dn2osdbk`` and the ``hotref`` sphinx extension
* Remove ``dn2osdbk`` and the ``hotref`` sphinx extension.
* ``autohelp.py``: Can now find options for a project in multiple python
packages.
0.29.1
------

View File

@ -52,6 +52,7 @@ setup_venv() {
if [ ! -e $VENVDIR/$project/bin/activate ]; then
mkdir -p $VENVDIR/$project
virtualenv $VENVDIR/$project
pip install --upgrade pip
fi
activate_venv $project
}
@ -71,10 +72,23 @@ get_project() {
git_url=$GITBASE
fi
git clone $git_url/$project $SOURCESDIR/$project
if [ -e extra_repos/$project-$RELEASE ]; then
while read extra; do
git clone $git_url/$extra $SOURCESDIR/$extra
done < extra_repos/$project-$RELEASE
fi
else
if [ $project != openstack-manuals ]; then
(cd $SOURCESDIR/$project && git pull)
fi
if [ -e extra_repos/$project-$RELEASE ]; then
while read extra; do
(cd $SOURCESDIR/$extra && git pull)
done < extra_repos/$project-$RELEASE
fi
fi
}
@ -134,16 +148,17 @@ fi
[ $# != 0 ] && PROJECTS="$*"
RELEASE=$(echo $BRANCH | sed 's,^stable.,,')
if [ "$FAST" -eq 0 ] ; then
get_project oslo-incubator
get_project openstack-manuals
release=$(echo $BRANCH | sed 's,^stable.,,')
for project in $PROJECTS; do
setup_venv $project
setup_tools
if [ -e requirements/$project-$release.txt ]; then
pip install -r requirements/$project-$release.txt \
if [ -e requirements/$project-$RELEASE.txt ]; then
pip install -r requirements/$project-$RELEASE.txt \
--allow-all-external
fi
get_project $project
@ -159,6 +174,17 @@ if [ "$FAST" -eq 0 ] ; then
fi
pip install -rrequirements.txt -rtest-requirements.txt
python setup.py install
if [ -e extra_repos/$project-$RELEASE ]; then
while read extra; do
(
cd $SOURCESDIR/$extra
pip install -rrequirements.txt \
-rtest-requirements.txt
python setup.py install
)
done < extra_repos/$project-$RELEASE
fi
)
done
fi
@ -170,13 +196,16 @@ for project in $PROJECTS; do
break
fi
if [ -d $MANUALSREPO/tools/autogenerate-config-flagmappings ]; then
cd $MANUALSREPO/tools/autogenerate-config-flagmappings
else
# for havana
$MANUALSREPO/tools/autogenerate-config-docs
if [ -e extra_repos/$project-$RELEASE ]; then
extra_flags=
while read extra; do
package=$(echo $extra | tr - _)
extra_flags="$extra_flags -i $SOURCESDIR/$extra/$package"
done < extra_repos/$project-$RELEASE
fi
cd $MANUALSREPO/tools/autogenerate-config-flagmappings
case $ACTION in
create)
[ "$project" = "swift" ] && continue
@ -185,18 +214,18 @@ for project in $PROJECTS; do
echo "$project.flagmappings already exists, ignoring."
continue
fi
$AUTOHELP create $project -i $SOURCESDIR/$project
$AUTOHELP create $project -i $SOURCESDIR/$project/$project
;;
update)
[ "$project" = "swift" ] && continue
$AUTOHELP update $project -i $SOURCESDIR/$project
$AUTOHELP update $project -i $SOURCESDIR/$project/$project $extra_flags
mv $project.flagmappings.new $project.flagmappings
;;
docbook)
if [ "$project" = "swift" ]; then
$EXTRACT_SWIFT docbook -m $MANUALSREPO -s $SOURCESDIR/swift
else
$AUTOHELP docbook $project -i $SOURCESDIR/$project
$AUTOHELP docbook $project -i $SOURCESDIR/$project/$project $extra_flags
fi
;;
esac

View File

@ -27,7 +27,6 @@ import pickle
import re
import sys
import git
from lxml import etree
import stevedore
@ -99,21 +98,6 @@ register_re = re.compile(r'''^ +.*\.register_opts\((?P<opts>[^,)]+)'''
r'''(, (group=)?["'](?P<group>.*)["'])?\)''')
def git_check(repo_path):
"""Check a passed directory to verify it is a valid git repository."""
try:
repo = git.Repo(repo_path)
assert repo.bare is False
package_name = os.path.basename(repo.remotes.origin.url)
package_name = package_name.replace('.git', '')
except Exception:
print("\n%s doesn't seem to be a valid git repository." % repo_path)
print("Use the -i flag to specify the repository path.\n")
sys.exit(1)
return package_name
def import_modules(repo_location, package_name, verbose=0):
"""Import modules.
@ -322,15 +306,21 @@ class OptionsCache(object):
self._opt_names.sort(OptionsCache._cmpopts)
def maybe_load_extensions(self, repo):
def maybe_load_extensions(self, repositories):
# Use the requirements.txt of the project to guess if an oslo module
# needs to be imported
for ext in EXTENSIONS:
requirements = os.path.join(repo, 'requirements.txt')
with open(requirements) as fd:
for line in fd:
if line.startswith(ext):
self.load_extension_options(ext)
needed_exts = set()
for repo in repositories:
base_path = os.path.dirname(repo)
for ext in EXTENSIONS:
requirements = os.path.join(base_path, 'requirements.txt')
with open(requirements) as fd:
for line in fd:
if line.startswith(ext):
needed_exts.add(ext)
for ext in needed_exts:
self.load_extension_options(ext)
def get_option_names(self):
return self._opt_names
@ -590,10 +580,13 @@ def main():
dest='verbose',
required=False,)
parser.add_argument('-i', '--input',
dest='repo',
help='Path to a valid git repository.',
dest='repos',
help='Path to a python package in which options '
'should be discoverd. Can be used multiple '
'times.',
required=False,
type=str,)
type=str,
action='append')
parser.add_argument('-o', '--output',
dest='target',
help='Directory or file in which data will be saved.\n'
@ -604,38 +597,42 @@ def main():
type=str,)
args = parser.parse_args()
if args.repo is None:
args.repo = './sources/%s' % args.package
if args.repos is None:
args.repos = ['./sources/%s/%s' % args.package]
package_name = git_check(args.repo)
for repository in args.repos:
package_name = os.path.basename(repository)
base_path = os.path.dirname(repository)
sys.path.insert(0, args.repo)
try:
__import__(package_name)
except ImportError as e:
if args.verbose >= 1:
print(str(e))
print("Failed to import: %s (%s)" % (package_name, e))
sys.path.insert(0, base_path)
try:
__import__(package_name)
except ImportError as e:
if args.verbose >= 1:
print(str(e))
print("Failed to import: %s (%s)" % (package_name, e))
import_modules(base_path, package_name, verbose=args.verbose)
sys.path.pop(0)
import_modules(args.repo, package_name, verbose=args.verbose)
options = OptionsCache(verbose=args.verbose)
options.maybe_load_extensions(args.repo)
options.maybe_load_extensions(args.repos)
if args.verbose > 0:
print("%s options imported from package %s." % (len(options),
str(package_name)))
if args.subcommand == 'create':
create_flagmappings(package_name, options, verbose=args.verbose)
create_flagmappings(args.package, options, verbose=args.verbose)
elif args.subcommand == 'update':
update_flagmappings(package_name, options, verbose=args.verbose)
update_flagmappings(args.package, options, verbose=args.verbose)
elif args.subcommand == 'docbook':
write_docbook(package_name, options, args.target, verbose=args.verbose)
write_docbook(args.package, options, args.target, verbose=args.verbose)
elif args.subcommand == 'rst':
write_rst(package_name, options, args.target, verbose=args.verbose)
write_rst(args.package, options, args.target, verbose=args.verbose)
elif args.subcommand == 'dump':
options.dump()

View File

@ -0,0 +1,3 @@
neutron-fwaas
neutron-lbaas
neutron-vpnaas