Rewrite ModuleBuild methods to get all streams and all builds using the latest version, not build id.

This commit is contained in:
Jan Kaluza
2018-03-01 15:57:45 +01:00
committed by mprahl
parent 28e821fee0
commit 253d29bcef
4 changed files with 36 additions and 37 deletions

View File

@@ -246,11 +246,12 @@ class ModuleBuild(MBSBase):
@staticmethod
def get_last_build_in_all_streams(session, name):
"""
Returns list of all last ModuleBuilds in "ready" state for all
Returns list of all latest ModuleBuilds in "ready" state for all
streams for given module `name`.
"""
subq = session.query(
func.max(ModuleBuild.id).label('id')
ModuleBuild.id,
func.max(ModuleBuild.version.cast(db.Integer))
).group_by(ModuleBuild.name, ModuleBuild.stream).filter_by(
name=name, state=BUILD_STATES["ready"]).subquery('t2')
query = session.query(ModuleBuild).join(
@@ -258,25 +259,20 @@ class ModuleBuild(MBSBase):
return query.all()
@staticmethod
def get_last_build_in_stream(session, name, stream):
def get_last_builds_in_stream(session, name, stream):
"""
Returns the last build in "ready" state for given name:stream.
Returns the latest builds in "ready" state for given name:stream.
"""
query = session.query(ModuleBuild)
query = query.filter_by(name=name, stream=stream,
state=BUILD_STATES["ready"])
query = query.order_by(ModuleBuild.id.desc())
return query.first()
@staticmethod
def get_builds_in_version(session, name, stream, version):
"""
Returns list of all module builds in "ready" state for given
name:stream:version - it means all the contexts of this module.
"""
query = session.query(ModuleBuild)
query = query.filter_by(name=name, stream=stream, version=version,
state=BUILD_STATES["ready"])
subq = session.query(
ModuleBuild.version,
func.max(ModuleBuild.version.cast(db.Integer))
).group_by(ModuleBuild.name, ModuleBuild.stream).filter_by(
name=name, state=BUILD_STATES["ready"], stream=stream).subquery('t2')
query = session.query(ModuleBuild).join(
subq, and_(
ModuleBuild.name == name,
ModuleBuild.stream == stream,
ModuleBuild.version == subq.c.version))
return query.all()
def mmd(self):

View File

@@ -1428,7 +1428,7 @@ def _get_mmds_from_requires(session, requires, mmds, recursive=False):
# b) there is at least one stream without '-' prefix. In this case, we can
# ignore all the streams with '-' prefix and just add those without
# '-' prefix to the list of valid streams.
streams_is_blacklist = all([stream[0] == "-" for stream in streams.get()])
streams_is_blacklist = all(stream.startswith("-") for stream in streams.get())
if streams_is_blacklist or len(streams.get()) == 0:
builds = models.ModuleBuild.get_last_build_in_all_streams(
session, name)
@@ -1451,10 +1451,8 @@ def _get_mmds_from_requires(session, requires, mmds, recursive=False):
if ns in mmds:
continue
last_build_in_stream = models.ModuleBuild.get_last_build_in_stream(
builds = models.ModuleBuild.get_last_builds_in_stream(
session, name, stream)
builds = models.ModuleBuild.get_builds_in_version(
session, name, stream, last_build_in_stream.version)
mmds[ns] = [build.mmd() for build in builds]
added_mmds[ns] = mmds[ns]