| |
@@ -35,25 +35,29 @@
|
| |
class DBResolver(GenericResolver):
|
| |
"""
|
| |
Resolver using the MBS database
|
| |
+
|
| |
+ :param db_session: SQLAlchemy Session object for database access.
|
| |
+ :param config: the config object.
|
| |
+ :type config: :class:`Config`
|
| |
"""
|
| |
|
| |
backend = "db"
|
| |
|
| |
- def __init__(self, config):
|
| |
+ def __init__(self, db_session, config):
|
| |
+ self.db_session = db_session
|
| |
self.config = config
|
| |
|
| |
def _get_module(
|
| |
self, name, stream, version, context, state=models.BUILD_STATES["ready"], strict=False
|
| |
):
|
| |
- with models.make_session(self.config) as session:
|
| |
- mb = models.ModuleBuild.get_build_from_nsvc(
|
| |
- session, name, stream, version, context, state=state)
|
| |
- if mb:
|
| |
- return mb.extended_json()
|
| |
+ mb = models.ModuleBuild.get_build_from_nsvc(
|
| |
+ self.db_session, name, stream, version, context, state=state)
|
| |
+ if mb:
|
| |
+ return mb.extended_json()
|
| |
|
| |
- if strict:
|
| |
- raise UnprocessableEntity(
|
| |
- "Cannot find any module builds for %s:%s" % (name, stream))
|
| |
+ if strict:
|
| |
+ raise UnprocessableEntity(
|
| |
+ "Cannot find any module builds for %s:%s" % (name, stream))
|
| |
|
| |
def get_module_count(self, **kwargs):
|
| |
"""
|
| |
@@ -62,8 +66,7 @@
|
| |
:return: the number of modules that match the provided filter
|
| |
:rtype: int
|
| |
"""
|
| |
- with models.make_session(self.config) as session:
|
| |
- return models.ModuleBuild.get_module_count(session, **kwargs)
|
| |
+ return models.ModuleBuild.get_module_count(self.db_session, **kwargs)
|
| |
|
| |
def get_latest_with_virtual_stream(self, name, virtual_stream):
|
| |
"""
|
| |
@@ -74,17 +77,17 @@
|
| |
:return: the module's modulemd or None
|
| |
:rtype: Modulemd.ModuleStream or None
|
| |
"""
|
| |
- with models.make_session(self.config) as session:
|
| |
- query = session.query(models.ModuleBuild).filter_by(name=name)
|
| |
- query = models.ModuleBuild._add_virtual_streams_filter(session, query, [virtual_stream])
|
| |
- # Cast the version as an integer so that we get proper ordering
|
| |
- module = query.order_by(
|
| |
- models.ModuleBuild.stream_version.desc(),
|
| |
- sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc(),
|
| |
- ).first()
|
| |
-
|
| |
- if module:
|
| |
- return load_mmd(module.modulemd)
|
| |
+ query = self.db_session.query(models.ModuleBuild).filter_by(name=name)
|
| |
+ query = models.ModuleBuild._add_virtual_streams_filter(
|
| |
+ self.db_session, query, [virtual_stream])
|
| |
+ # Cast the version as an integer so that we get proper ordering
|
| |
+ module = query.order_by(
|
| |
+ models.ModuleBuild.stream_version.desc(),
|
| |
+ sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc(),
|
| |
+ ).first()
|
| |
+
|
| |
+ if module:
|
| |
+ return load_mmd(module.modulemd)
|
| |
|
| |
def get_module_modulemds(
|
| |
self,
|
| |
@@ -98,6 +101,7 @@
|
| |
):
|
| |
"""
|
| |
Gets the module modulemds from the resolver.
|
| |
+
|
| |
:param name: a string of the module's name
|
| |
:param stream: a string of the module's stream
|
| |
:param version: a string or int of the module's version. When None, latest version will
|
| |
@@ -119,29 +123,29 @@
|
| |
return
|
| |
return [load_mmd(mmd["modulemd"])]
|
| |
|
| |
- with models.make_session(self.config) as session:
|
| |
- if not version and not context:
|
| |
- if stream_version_lte and (
|
| |
- len(str(models.ModuleBuild.get_stream_version(stream, right_pad=False))) >= 5
|
| |
- ):
|
| |
- stream_version = models.ModuleBuild.get_stream_version(stream)
|
| |
- builds = models.ModuleBuild.get_last_builds_in_stream_version_lte(
|
| |
- session, name, stream_version, virtual_streams)
|
| |
- elif not stream_version_lte and virtual_streams:
|
| |
- builds = models.ModuleBuild.get_last_builds_in_stream_version_lte(
|
| |
- session, name, None, virtual_streams)
|
| |
- else:
|
| |
- builds = models.ModuleBuild.get_last_builds_in_stream(session, name, stream)
|
| |
+ if not version and not context:
|
| |
+ if stream_version_lte and (
|
| |
+ len(str(models.ModuleBuild.get_stream_version(stream, right_pad=False))) >= 5
|
| |
+ ):
|
| |
+ stream_version = models.ModuleBuild.get_stream_version(stream)
|
| |
+ builds = models.ModuleBuild.get_last_builds_in_stream_version_lte(
|
| |
+ self.db_session, name, stream_version, virtual_streams)
|
| |
+ elif not stream_version_lte and virtual_streams:
|
| |
+ builds = models.ModuleBuild.get_last_builds_in_stream_version_lte(
|
| |
+ self.db_session, name, None, virtual_streams)
|
| |
else:
|
| |
- raise NotImplementedError(
|
| |
- "This combination of name/stream/version/context is not implemented")
|
| |
+ builds = models.ModuleBuild.get_last_builds_in_stream(
|
| |
+ self.db_session, name, stream)
|
| |
+ else:
|
| |
+ raise NotImplementedError(
|
| |
+ "This combination of name/stream/version/context is not implemented")
|
| |
|
| |
- if not builds and strict:
|
| |
- raise UnprocessableEntity(
|
| |
- "Cannot find any module builds for %s:%s" % (name, stream))
|
| |
- return [build.mmd() for build in builds]
|
| |
+ if not builds and strict:
|
| |
+ raise UnprocessableEntity(
|
| |
+ "Cannot find any module builds for %s:%s" % (name, stream))
|
| |
+ return [build.mmd() for build in builds]
|
| |
|
| |
- def get_buildrequired_modulemds(self, name, stream, base_module_nsvc):
|
| |
+ def get_buildrequired_modulemds(self, name, stream, base_module_nsvc, strict=False):
|
| |
"""
|
| |
Returns modulemd metadata of all module builds with `name` and `stream` buildrequiring
|
| |
base module defined by `base_module_nsvc` NSVC.
|
| |
@@ -154,51 +158,50 @@
|
| |
:return: List of modulemd metadata.
|
| |
"""
|
| |
log.debug("Looking for %s:%s buildrequiring %s", name, stream, base_module_nsvc)
|
| |
- with models.make_session(self.config) as session:
|
| |
- query = session.query(models.ModuleBuild)
|
| |
- query = query.filter_by(name=name, stream=stream, state=models.BUILD_STATES["ready"])
|
| |
-
|
| |
- module_br_alias = aliased(models.ModuleBuild, name="module_br")
|
| |
- # Shorten this table name for clarity in the query below
|
| |
- mb_to_br = models.module_builds_to_module_buildrequires
|
| |
- # The following joins get added:
|
| |
- # JOIN module_builds_to_module_buildrequires
|
| |
- # ON module_builds_to_module_buildrequires.module_id = module_builds.id
|
| |
- # JOIN module_builds AS module_br
|
| |
- # ON module_builds_to_module_buildrequires.module_buildrequire_id = module_br.id
|
| |
- query = query.join(mb_to_br, mb_to_br.c.module_id == models.ModuleBuild.id).join(
|
| |
- module_br_alias, mb_to_br.c.module_buildrequire_id == module_br_alias.id)
|
| |
-
|
| |
- # Get only modules buildrequiring particular base_module_nsvc
|
| |
- n, s, v, c = base_module_nsvc.split(":")
|
| |
- query = query.filter(
|
| |
- module_br_alias.name == n,
|
| |
- module_br_alias.stream == s,
|
| |
- module_br_alias.version == v,
|
| |
- module_br_alias.context == c,
|
| |
- )
|
| |
- query = query.order_by(
|
| |
- sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc())
|
| |
- all_builds = query.all()
|
| |
-
|
| |
- # The `all_builds` list contains builds sorted by "build.version". We need only
|
| |
- # the builds with latest version, but in all contexts.
|
| |
- builds = []
|
| |
- latest_version = None
|
| |
- for build in all_builds:
|
| |
- if latest_version is None:
|
| |
- latest_version = build.version
|
| |
- if latest_version != build.version:
|
| |
- break
|
| |
- builds.append(build)
|
| |
-
|
| |
- mmds = [build.mmd() for build in builds]
|
| |
- nsvcs = [
|
| |
- mmd.get_nsvc()
|
| |
- for mmd in mmds
|
| |
- ]
|
| |
- log.debug("Found: %r", nsvcs)
|
| |
- return mmds
|
| |
+ query = self.db_session.query(models.ModuleBuild)
|
| |
+ query = query.filter_by(name=name, stream=stream, state=models.BUILD_STATES["ready"])
|
| |
+
|
| |
+ module_br_alias = aliased(models.ModuleBuild, name="module_br")
|
| |
+ # Shorten this table name for clarity in the query below
|
| |
+ mb_to_br = models.module_builds_to_module_buildrequires
|
| |
+ # The following joins get added:
|
| |
+ # JOIN module_builds_to_module_buildrequires
|
| |
+ # ON module_builds_to_module_buildrequires.module_id = module_builds.id
|
| |
+ # JOIN module_builds AS module_br
|
| |
+ # ON module_builds_to_module_buildrequires.module_buildrequire_id = module_br.id
|
| |
+ query = query.join(mb_to_br, mb_to_br.c.module_id == models.ModuleBuild.id).join(
|
| |
+ module_br_alias, mb_to_br.c.module_buildrequire_id == module_br_alias.id)
|
| |
+
|
| |
+ # Get only modules buildrequiring particular base_module_nsvc
|
| |
+ n, s, v, c = base_module_nsvc.split(":")
|
| |
+ query = query.filter(
|
| |
+ module_br_alias.name == n,
|
| |
+ module_br_alias.stream == s,
|
| |
+ module_br_alias.version == v,
|
| |
+ module_br_alias.context == c,
|
| |
+ )
|
| |
+ query = query.order_by(
|
| |
+ sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc())
|
| |
+ all_builds = query.all()
|
| |
+
|
| |
+ # The `all_builds` list contains builds sorted by "build.version". We need only
|
| |
+ # the builds with latest version, but in all contexts.
|
| |
+ builds = []
|
| |
+ latest_version = None
|
| |
+ for build in all_builds:
|
| |
+ if latest_version is None:
|
| |
+ latest_version = build.version
|
| |
+ if latest_version != build.version:
|
| |
+ break
|
| |
+ builds.append(build)
|
| |
+
|
| |
+ mmds = [build.mmd() for build in builds]
|
| |
+ nsvcs = [
|
| |
+ mmd.get_nsvc()
|
| |
+ for mmd in mmds
|
| |
+ ]
|
| |
+ log.debug("Found: %r", nsvcs)
|
| |
+ return mmds
|
| |
|
| |
def resolve_profiles(self, mmd, keys):
|
| |
"""
|
| |
@@ -207,6 +210,7 @@
|
| |
the key in all buildrequires. If there are some modules loaded by
|
| |
utils.load_local_builds(...), these local modules will be considered when returning
|
| |
the profiles.
|
| |
+
|
| |
:param mmd: Modulemd.ModuleStream instance representing the module
|
| |
:param keys: list of modulemd installation profiles to include in the result
|
| |
:return: a dictionary
|
| |
@@ -214,44 +218,43 @@
|
| |
results = {}
|
| |
for key in keys:
|
| |
results[key] = set()
|
| |
- with models.make_session(self.config) as session:
|
| |
- for module_name, module_info in mmd.get_xmd()["mbs"]["buildrequires"].items():
|
| |
- local_modules = models.ModuleBuild.local_modules(
|
| |
- session, module_name, module_info["stream"])
|
| |
- if local_modules:
|
| |
- local_module = local_modules[0]
|
| |
- log.info("Using local module {0!r} to resolve profiles.".format(local_module))
|
| |
- dep_mmd = local_module.mmd()
|
| |
- for key in keys:
|
| |
- profile = dep_mmd.get_profile(key)
|
| |
- if profile:
|
| |
- results[key] |= set(profile.get_rpms())
|
| |
- continue
|
| |
-
|
| |
- build = models.ModuleBuild.get_build_from_nsvc(
|
| |
- session,
|
| |
- module_name,
|
| |
- module_info["stream"],
|
| |
- module_info["version"],
|
| |
- module_info["context"],
|
| |
- state=models.BUILD_STATES["ready"],
|
| |
- )
|
| |
- if not build:
|
| |
- raise UnprocessableEntity(
|
| |
- "The module {}:{}:{}:{} was not found".format(
|
| |
- module_name,
|
| |
- module_info["stream"],
|
| |
- module_info["version"],
|
| |
- module_info["context"],
|
| |
- )
|
| |
- )
|
| |
- dep_mmd = build.mmd()
|
| |
-
|
| |
- # Take note of what rpms are in this dep's profile
|
| |
+ for module_name, module_info in mmd.get_xmd()["mbs"]["buildrequires"].items():
|
| |
+ local_modules = models.ModuleBuild.local_modules(
|
| |
+ self.db_session, module_name, module_info["stream"])
|
| |
+ if local_modules:
|
| |
+ local_module = local_modules[0]
|
| |
+ log.info("Using local module {0!r} to resolve profiles.".format(local_module))
|
| |
+ dep_mmd = local_module.mmd()
|
| |
for key in keys:
|
| |
profile = dep_mmd.get_profile(key)
|
| |
if profile:
|
| |
results[key] |= set(profile.get_rpms())
|
| |
+ continue
|
| |
+
|
| |
+ build = models.ModuleBuild.get_build_from_nsvc(
|
| |
+ self.db_session,
|
| |
+ module_name,
|
| |
+ module_info["stream"],
|
| |
+ module_info["version"],
|
| |
+ module_info["context"],
|
| |
+ state=models.BUILD_STATES["ready"],
|
| |
+ )
|
| |
+ if not build:
|
| |
+ raise UnprocessableEntity(
|
| |
+ "The module {}:{}:{}:{} was not found".format(
|
| |
+ module_name,
|
| |
+ module_info["stream"],
|
| |
+ module_info["version"],
|
| |
+ module_info["context"],
|
| |
+ )
|
| |
+ )
|
| |
+ dep_mmd = build.mmd()
|
| |
+
|
| |
+ # Take note of what rpms are in this dep's profile
|
| |
+ for key in keys:
|
| |
+ profile = dep_mmd.get_profile(key)
|
| |
+ if profile:
|
| |
+ results[key] |= set(profile.get_rpms())
|
| |
|
| |
# Return the union of all rpms in all profiles of the given keys
|
| |
return results
|
| |
@@ -288,53 +291,52 @@
|
| |
)
|
| |
|
| |
module_tags = {}
|
| |
- with models.make_session(self.config) as session:
|
| |
- if mmd:
|
| |
- queried_mmd = mmd
|
| |
- nsvc = ":".join([
|
| |
- mmd.get_module_name(),
|
| |
- mmd.get_stream_name(),
|
| |
- str(mmd.get_version()),
|
| |
- mmd.get_context() or models.DEFAULT_MODULE_CONTEXT,
|
| |
- ])
|
| |
- else:
|
| |
- build = models.ModuleBuild.get_build_from_nsvc(
|
| |
- session, name, stream, version, context)
|
| |
- if not build:
|
| |
- raise UnprocessableEntity(
|
| |
- "The module {} was not found".format(
|
| |
- ":".join([name, stream, version, context]))
|
| |
- )
|
| |
- queried_mmd = build.mmd()
|
| |
- nsvc = ":".join([name, stream, version, context])
|
| |
-
|
| |
- xmd_mbs = queried_mmd.get_xmd().get("mbs", {})
|
| |
- if "buildrequires" not in xmd_mbs:
|
| |
- raise RuntimeError(
|
| |
- "The module {} did not contain its modulemd or did not have "
|
| |
- "its xmd attribute filled out in MBS".format(nsvc)
|
| |
+ if mmd:
|
| |
+ queried_mmd = mmd
|
| |
+ nsvc = ":".join([
|
| |
+ mmd.get_module_name(),
|
| |
+ mmd.get_stream_name(),
|
| |
+ str(mmd.get_version()),
|
| |
+ mmd.get_context() or models.DEFAULT_MODULE_CONTEXT,
|
| |
+ ])
|
| |
+ else:
|
| |
+ build = models.ModuleBuild.get_build_from_nsvc(
|
| |
+ self.db_session, name, stream, version, context)
|
| |
+ if not build:
|
| |
+ raise UnprocessableEntity(
|
| |
+ "The module {} was not found".format(
|
| |
+ ":".join([name, stream, version, context]))
|
| |
)
|
| |
+ queried_mmd = build.mmd()
|
| |
+ nsvc = ":".join([name, stream, version, context])
|
| |
+
|
| |
+ xmd_mbs = queried_mmd.get_xmd().get("mbs", {})
|
| |
+ if "buildrequires" not in xmd_mbs:
|
| |
+ raise RuntimeError(
|
| |
+ "The module {} did not contain its modulemd or did not have "
|
| |
+ "its xmd attribute filled out in MBS".format(nsvc)
|
| |
+ )
|
| |
|
| |
- buildrequires = xmd_mbs["buildrequires"]
|
| |
- for br_name, details in buildrequires.items():
|
| |
- build = models.ModuleBuild.get_build_from_nsvc(
|
| |
- session,
|
| |
- br_name,
|
| |
- details["stream"],
|
| |
- details["version"],
|
| |
- details["context"],
|
| |
- state=models.BUILD_STATES["ready"],
|
| |
- )
|
| |
- if not build:
|
| |
- raise RuntimeError(
|
| |
- "Buildrequired module %s %r does not exist in MBS db" % (br_name, details))
|
| |
+ buildrequires = xmd_mbs["buildrequires"]
|
| |
+ for br_name, details in buildrequires.items():
|
| |
+ build = models.ModuleBuild.get_build_from_nsvc(
|
| |
+ self.db_session,
|
| |
+ br_name,
|
| |
+ details["stream"],
|
| |
+ details["version"],
|
| |
+ details["context"],
|
| |
+ state=models.BUILD_STATES["ready"],
|
| |
+ )
|
| |
+ if not build:
|
| |
+ raise RuntimeError(
|
| |
+ "Buildrequired module %s %r does not exist in MBS db" % (br_name, details))
|
| |
|
| |
- # If the buildrequire is a meta-data only module with no Koji tag set, then just
|
| |
- # skip it
|
| |
- if build.koji_tag is None:
|
| |
- continue
|
| |
- module_tags.setdefault(build.koji_tag, [])
|
| |
- module_tags[build.koji_tag].append(build.mmd())
|
| |
+ # If the buildrequire is a meta-data only module with no Koji tag set, then just
|
| |
+ # skip it
|
| |
+ if build.koji_tag is None:
|
| |
+ continue
|
| |
+ module_tags.setdefault(build.koji_tag, [])
|
| |
+ module_tags[build.koji_tag].append(build.mmd())
|
| |
|
| |
return module_tags
|
| |
|
| |
@@ -346,74 +348,75 @@
|
| |
If there are some modules loaded by utils.load_local_builds(...), these
|
| |
local modules will be considered when resolving the requires. A RuntimeError
|
| |
is raised on DB lookup errors.
|
| |
+
|
| |
:param requires: a list of N:S or N:S:V:C strings
|
| |
:return: a dictionary
|
| |
"""
|
| |
new_requires = {}
|
| |
- with models.make_session(self.config) as session:
|
| |
- for nsvc in requires:
|
| |
- nsvc_splitted = nsvc.split(":")
|
| |
- if len(nsvc_splitted) == 2:
|
| |
- module_name, module_stream = nsvc_splitted
|
| |
- module_version = None
|
| |
- module_context = None
|
| |
- elif len(nsvc_splitted) == 4:
|
| |
- module_name, module_stream, module_version, module_context = nsvc_splitted
|
| |
- else:
|
| |
- raise ValueError(
|
| |
- "Only N:S or N:S:V:C is accepted by resolve_requires, got %s" % nsvc)
|
| |
-
|
| |
- local_modules = models.ModuleBuild.local_modules(
|
| |
- session, module_name, module_stream)
|
| |
- if local_modules:
|
| |
- local_build = local_modules[0]
|
| |
- new_requires[module_name] = {
|
| |
- "ref": None,
|
| |
- "stream": local_build.stream,
|
| |
- "version": local_build.version,
|
| |
- "context": local_build.context,
|
| |
- "koji_tag": local_build.koji_tag,
|
| |
- }
|
| |
- continue
|
| |
-
|
| |
- if module_version is None or module_context is None:
|
| |
- build = models.ModuleBuild.get_last_build_in_stream(
|
| |
- session, module_name, module_stream)
|
| |
- else:
|
| |
- build = models.ModuleBuild.get_build_from_nsvc(
|
| |
- session, module_name, module_stream, module_version, module_context)
|
| |
-
|
| |
- if not build:
|
| |
- raise UnprocessableEntity("The module {} was not found".format(nsvc))
|
| |
-
|
| |
- commit_hash = None
|
| |
- mmd = build.mmd()
|
| |
- mbs_xmd = mmd.get_xmd().get("mbs", {})
|
| |
- if mbs_xmd.get("commit"):
|
| |
- commit_hash = mbs_xmd["commit"]
|
| |
- else:
|
| |
- raise RuntimeError(
|
| |
- 'The module "{0}" didn\'t contain a commit hash in its xmd'.format(
|
| |
- module_name)
|
| |
- )
|
| |
|
| |
- if not mbs_xmd.get("mse"):
|
| |
- raise RuntimeError(
|
| |
- 'The module "{}" is not built using Module Stream Expansion. '
|
| |
- "Please rebuild this module first".format(nsvc)
|
| |
- )
|
| |
+ for nsvc in requires:
|
| |
+ nsvc_splitted = nsvc.split(":")
|
| |
+ if len(nsvc_splitted) == 2:
|
| |
+ module_name, module_stream = nsvc_splitted
|
| |
+ module_version = None
|
| |
+ module_context = None
|
| |
+ elif len(nsvc_splitted) == 4:
|
| |
+ module_name, module_stream, module_version, module_context = nsvc_splitted
|
| |
+ else:
|
| |
+ raise ValueError(
|
| |
+ "Only N:S or N:S:V:C is accepted by resolve_requires, got %s" % nsvc)
|
| |
|
| |
+ local_modules = models.ModuleBuild.local_modules(
|
| |
+ self.db_session, module_name, module_stream)
|
| |
+ if local_modules:
|
| |
+ local_build = local_modules[0]
|
| |
new_requires[module_name] = {
|
| |
- "ref": commit_hash,
|
| |
- "stream": module_stream,
|
| |
- "version": build.version,
|
| |
- "context": build.context,
|
| |
- "koji_tag": build.koji_tag,
|
| |
+ "ref": None,
|
| |
+ "stream": local_build.stream,
|
| |
+ "version": local_build.version,
|
| |
+ "context": local_build.context,
|
| |
+ "koji_tag": local_build.koji_tag,
|
| |
}
|
| |
+ continue
|
| |
+
|
| |
+ if module_version is None or module_context is None:
|
| |
+ build = models.ModuleBuild.get_last_build_in_stream(
|
| |
+ self.db_session, module_name, module_stream)
|
| |
+ else:
|
| |
+ build = models.ModuleBuild.get_build_from_nsvc(
|
| |
+ self.db_session,
|
| |
+ module_name, module_stream, module_version, module_context)
|
| |
+
|
| |
+ if not build:
|
| |
+ raise UnprocessableEntity("The module {} was not found".format(nsvc))
|
| |
+
|
| |
+ commit_hash = None
|
| |
+ mmd = build.mmd()
|
| |
+ mbs_xmd = mmd.get_xmd().get("mbs", {})
|
| |
+ if mbs_xmd.get("commit"):
|
| |
+ commit_hash = mbs_xmd["commit"]
|
| |
+ else:
|
| |
+ raise RuntimeError(
|
| |
+ 'The module "{0}" didn\'t contain a commit hash in its xmd'.format(
|
| |
+ module_name)
|
| |
+ )
|
| |
+
|
| |
+ if not mbs_xmd.get("mse"):
|
| |
+ raise RuntimeError(
|
| |
+ 'The module "{}" is not built using Module Stream Expansion. '
|
| |
+ "Please rebuild this module first".format(nsvc)
|
| |
+ )
|
| |
+
|
| |
+ new_requires[module_name] = {
|
| |
+ "ref": commit_hash,
|
| |
+ "stream": module_stream,
|
| |
+ "version": build.version,
|
| |
+ "context": build.context,
|
| |
+ "koji_tag": build.koji_tag,
|
| |
+ }
|
| |
|
| |
return new_requires
|
| |
|
| |
def get_modulemd_by_koji_tag(self, tag):
|
| |
- with models.make_session(self.config) as session:
|
| |
- module = models.ModuleBuild.get_build_by_koji_tag(session, tag)
|
| |
- return module.mmd() if module else None
|
| |
+ module = models.ModuleBuild.get_build_by_koji_tag(self.db_session, tag)
|
| |
+ return module.mmd() if module else None
|
| |
Signed-off-by: Chenxiong Qi cqi@redhat.com