Add support for using gitweb 09/99809/3
authorPawel Wieczorek <p.wieczorek2@samsung.com>
Tue, 7 Jan 2020 14:28:53 +0000 (15:28 +0100)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Tue, 7 Jan 2020 14:28:53 +0000 (15:28 +0100)
There are projects which do not provide git mirror for code URLs apart
from Gerrit's gitweb interface (e.g. OpenDaylight [1]).

[1] https://www.opendaylight.org

Issue-ID: ONAPARC-540
Change-Id: I48c26b81f4886a12e5cdc4dfbfc99538f180449e
Signed-off-by: Pawel Wieczorek <p.wieczorek2@samsung.com>
bootstrap/codesearch/create_config.py

index 109219d..aef99e7 100755 (executable)
@@ -14,6 +14,9 @@ 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."""
@@ -27,15 +30,30 @@ def get_projects_list(gerrit):
     return projects.keys()
 
 
-def create_repos_list(projects, git):
+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": "{}/{}".format(git, project),
+            "url": project_url,
             "url-pattern": {
-                "base-url": "{url}/tree/{path}{anchor}",
-                "anchor": "#n{line}"
+                "base-url": code_url,
+                "anchor": anchor
             }
         }
 
@@ -46,7 +64,9 @@ def parse_arguments():
     """Return parsed command-line arguments."""
     parser = argparse.ArgumentParser(description=__doc__)
     parser.add_argument('--gerrit', help='Gerrit address', default=DEFAULT_GERRIT)
-    parser.add_argument('--git', help='git address', default=DEFAULT_GIT)
+    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()
 
@@ -55,7 +75,8 @@ def main():
     """Main entry point for the script."""
     arguments = parse_arguments()
 
-    repos = create_repos_list(get_projects_list(arguments.gerrit), arguments.git)
+    projects = get_projects_list(arguments.gerrit)
+    repos = create_repos_list(projects, arguments.gitweb, arguments.git, arguments.gerrit)
     config = {
         "max-concurrent-indexers": 2,
         "dbpath": "data",