diff --git a/elixir/api.py b/elixir/api.py index 1574907..83fe1b2 100755 --- a/elixir/api.py +++ b/elixir/api.py @@ -43,8 +43,9 @@ class ApiIdentGetterResource: resp.status = falcon.HTTP_NOT_FOUND return - if version == 'latest': - version = query.get_latest_tag() + if version in ('latest', 'latest-rc'): + rc = version == 'latest-rc' + version = query.get_latest_tag(rc=rc) symbol_definitions, symbol_references, symbol_doccomments, _ = query.search_ident(version, ident, family) diff --git a/elixir/query.py b/elixir/query.py index 5de950a..a5f7a90 100755 --- a/elixir/query.py +++ b/elixir/query.py @@ -185,8 +185,11 @@ class Query: # Returns the latest tag that is included in the database. # This excludes release candidates. - def get_latest_tag(self): - sorted_tags = self.scriptLines('get-latest-tags') + def get_latest_tag(self, rc): + if rc: + sorted_tags = reversed(self.scriptLines('list-tags')) + else: + sorted_tags = self.scriptLines('get-latest-tags') for tag in sorted_tags: if self.db.vers.exists(tag): diff --git a/elixir/web.py b/elixir/web.py index 6eb2c28..e50fe8f 100755 --- a/elixir/web.py +++ b/elixir/web.py @@ -234,8 +234,9 @@ class SourceResource: raise ElixirProjectError('Error', 'Path contains characters that are not allowed', project=project, version=version, query=query) - if version == 'latest': - version = query.get_latest_tag() + if version in ('latest', 'latest-rc'): + rc = version == 'latest-rc' + version = query.get_latest_tag(rc=rc) resp.status = falcon.HTTP_FOUND resp.location = stringify_source_path(project, version, path) return @@ -333,8 +334,9 @@ class IdentResource(IdentPostRedirectResource): ident = validated_ident - if version == 'latest': - version = query.get_latest_tag() + if version in ('latest', 'latest-rc'): + rc = version == 'latest-rc' + version = query.get_latest_tag(rc=rc) resp.status = falcon.HTTP_FOUND resp.location = stringify_ident_path(project, version, family, ident) return @@ -361,8 +363,9 @@ class IncompleteURLRedirectResource: raise ElixirProjectError('Error', f'Unknown default project: {project}', status=falcon.HTTP_INTERNAL_SERVER_ERROR) - if version == 'latest' or len(version) == 0: - version = query.get_latest_tag() + if version in ('latest', 'latest-rc') or len(version) == 0: + rc = version == 'latest-rc' + version = query.get_latest_tag(rc=rc) resp.status = falcon.HTTP_FOUND resp.location = stringify_source_path(project, version, '/') diff --git a/utils/speedtest.py b/utils/speedtest.py index 0577f46..b943b06 100755 --- a/utils/speedtest.py +++ b/utils/speedtest.py @@ -83,14 +83,16 @@ def init_query(project): def get_ident(query, ident, version): - if version == 'latest': - version = query.get_latest_tag() + if version == ('latest', 'latest-rc'): + rc = version == 'latest' + version = query.get_latest_tag(rc=rc) return query.search_ident(version, ident[0], ident[1]) def get_file(query, path, version): - if version == 'latest': - version = query.get_latest_tag() + if version == ('latest', 'latest-rc'): + rc = version == 'latest' + version = query.get_latest_tag(rc=rc) return query.get_file(version, path)