blob: aef99e778a66dc771376c9e0f26afce26b2ac6c4 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Create configuration for code search."""
import argparse
import json
import urllib.request
import sys
DEFAULT_GERRIT = "https://gerrit.onap.org/r"
DEFAULT_GIT = "https://git.onap.org"
API_PROJECTS = "/projects/"
MAGIC_PREFIX = ")]}'"
GITWEB_ANCHOR = "#l{line}"
GIT_ANCHOR = "#n{line}"
def get_projects_list(gerrit):
"""Request list of all available projects from ONAP Gerrit."""
resp = urllib.request.urlopen(gerrit + API_PROJECTS)
resp_body = resp.read()
no_magic = resp_body[len(MAGIC_PREFIX):]
decoded = no_magic.decode("utf-8")
projects = json.loads(decoded)
return projects.keys()
def create_repos_list(projects, gitweb, git, gerrit):
"""Create a map of all projects to their repositories' URLs."""
gerrit_project_url = "{}/{}.git"
gitweb_code_url = "{}/gitweb?p={}.git;hb=HEAD;a=blob;f={{path}}{{anchor}}"
git_project_url = "{}/{}"
git_code_url = "{url}/tree/{path}{anchor}"
repos_list = {}
for project in projects:
if gitweb:
project_url = gerrit_project_url.format(gerrit, project)
code_url = gitweb_code_url.format(gerrit, project)
anchor = GITWEB_ANCHOR
else:
project_url = git_project_url.format(git, project)
code_url = git_code_url
anchor = GIT_ANCHOR
repos_list[project] = {
"url": project_url,
"url-pattern": {
"base-url": code_url,
"anchor": anchor
}
}
return repos_list
def parse_arguments():
"""Return parsed command-line arguments."""
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--gerrit', help='Gerrit address', default=DEFAULT_GERRIT)
access = parser.add_mutually_exclusive_group()
access.add_argument('--gitweb', help='use Gerrit\'s gitweb (bool)', action='store_true')
access.add_argument('--git', help='use external git (address)', default=DEFAULT_GIT)
return parser.parse_args()
def main():
"""Main entry point for the script."""
arguments = parse_arguments()
projects = get_projects_list(arguments.gerrit)
repos = create_repos_list(projects, arguments.gitweb, arguments.git, arguments.gerrit)
config = {
"max-concurrent-indexers": 2,
"dbpath": "data",
"health-check-uri": "/healthz",
"repos": repos
}
print(json.dumps(config, sort_keys=True, indent=4, separators=(',', ': ')))
if __name__ == '__main__':
sys.exit(main())