Commit Graph

27 Commits

Author SHA1 Message Date
mprahl
14098cea08 Migrate to libmodulemd v2
This also moves the methods load_mmd and load_mmd_file to
module_build_service.utils.general.

This also removes some MSE unit tests with a mix of positive and
negative streams since this is not supported in libmodulemd v2. The
user will be presented with a syntax error if they try to submit
such a modulemd file.
2019-05-13 13:40:37 -04:00
mprahl
66c3f82160 Format the coding style across the codebase using "black" and manual tweaks
The main benefit of this commit is that the use of double quotes
is now consistent.
2019-04-26 00:32:13 -04:00
Chenxiong Qi
642c37526e Fix typo in MMDResolver._deps2reqs docstring
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-04-23 10:39:46 +08:00
mprahl
9512a49631 Allow whitelisted buildrequires with xmd.mbs.disttag_marking set to influnece the disttag 2019-04-04 09:12:27 -04:00
Jan Kaluza
d1f6631f3b Fix traceback in MMDResolver when transitive dependency cannot be satisfied.
This fixes problems from #1184 when new platform stream is added and the
input module depends on another module which is not built against this
new platform, but in the same time the input module wants to be built
against this new platform stream. See the unit-test for more info.

The problem is that `MMDResolver.solve()` method sets the `alternative`
to an empty list and stores the data there only if the alternative
is found valid. If the alternative is not found valid, then it stays
set to an empty list, but the code using `alternative` later expects
it to only contains valid alternatives.

This commit fixes this by setting the `alternative` only in a case
we found it is valid alternative.
2019-03-27 06:36:43 +01:00
mprahl
9651891d74 Support base modules with x.y.z versioning and no virtual streams 2019-03-25 15:59:06 +00:00
Chenxiong Qi
879d0daca0 Detect transitive stream collision
For an explanation of transitive stream collision, please refer to the
source code docstring.

When such collision is detected, error is raised with proper error
message.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2018-11-06 20:27:43 +08:00
mprahl
df48d4e184 Fix typos in some of the code comments 2018-10-30 11:37:44 -04:00
Jan Kaluza
6b496dfde4 Add tests for "Conflicts: module(name)" in MMDResolver.
The test tests installation of multiple streams of single module.
For example:
 - "app:1" requires "foo:1" and "gtk:1".
 - "foo:1" requires "bar:1".
 - "gtk:1" requires "bar:2".
"bar:1" and "bar:2" cannot be installed in the same time and therefore
there need to be conflict defined between them.
2018-10-25 16:01:36 +02:00
Jan Kaluza
192eaae012 Support Virtual Streams in MMDResolver.
Modularity team needs to be able to define multiple streams for single "platform"
module. They need it to express that "platform:el8.1.0" also provides "platform:el8".

This needs changes in a way how MMDResolver resolves dependencies between modules.

For example, if we are building module against platform:el8.1.0, the MMDResolver must
not return buildrequired module built against platform > el8.1.0, but it can for example
return (cherry-pick) buildrequired module from platform:el8.0.0 if there is no such
module built for platform:el8.1.0.

The way how it is implemented is following:

  - MMDResolver reads list of virtual streams from xmd["mbs"]["virtual_streams"] when
    creating Solvable from MMD and adds additional Provides for these virtual streams.
    We expect these to be set mainly on base modules. The versions of such provides
    are based on "stream version" number, so we can compare them.
  - The base module ("platform") buildrequires of MMDs added to MMDResolver are overriden
    to mark particular platform "stream version". For example, if module "foo" buildrequires
    "platform:el8" in MMD file, but was in fact built against platform:el8.1.0, it will
    be treated as if it would really buildrequire "platform:el8.1.0". This is needed
    to not include buildrequired modules built against newer platform than what we want.
  - MMDResolver resolves all the valid combinations of buildrequires, but we are only
    interested in the one with latest versions of buildrequired module. Therefore the
    solve() method is changed to find out combinations which have the latest versions
    for each alternative name:stream buildrequires.
2018-10-18 15:06:04 +02:00
Chenxiong Qi
f6740c4867 Fix a comment according to relative code
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2018-10-16 17:11:49 +08:00
Chenxiong Qi
2c58471630 Fix and reword some docstrings again
During I'm reading through the code base to learn MBS, I found out some
typos and minor issues in some other docstrings, and I also found some
docstrings with extra informative description could make it easier to
understand the code.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2018-09-26 14:12:39 +08:00
mprahl
6ce92e8ad0 Rename a variable in mmd_resolver.py to not shadow the function input 2018-08-28 10:06:00 -04:00
mprahl
c37a0e880b Fix the typos in the mmd_resolver.py comments 2018-08-28 10:04:40 -04:00
Jan Kaluza
c36e6f2ec3 Add some comments to libsolv code. 2018-08-28 11:56:43 +02:00
Jan Kaluza
da95c94528 Support resolving MMDs without any buildrequire. 2018-04-03 09:58:57 -04:00
Igor Gnatenko
85af781920 mmd_resolver: add support for streams exclusion
Also fix support for dependencies with empty streams list.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
ebd6dba78f mmd_resolver: allow configuring output of solve() by policy
Also make results more determenistic.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
52e73b64c2 mmd_resolver: store alternatives per source package
Input:
* (c0) gtk: [1] + foo: [1]
* (c1) gtk: [1] + foo: [1, 2]

Before:
* c0 + gtk:1 + foo:1
* c1 + gtk:1 + foo:2

After:
* c0 + gtk:1 + foo:1
* c1 + gtk:1 + foo:1
* c1 + gtk:1 + foo:2

Acked-by: Jan Kaluža <jkaluza@redhat.com>
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
e3490d129a mmd_resolver: generate combinations only for top-level dependencies
Reported-by: Petr Šabata <contyk@redhat.com>
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
9d3bcf4a06 mmd_resolver: replace asserts with meaningful exceptions
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
7cbd0a0301 mmd_resolver: rework solvables generation
Now we have good separation between runtime and buildtime dependencies:
If mmd has context, it is built artefact which supposed to have only one
dependency entry, we create solvable with real arch for it. Otherwise we
create multiple solvables with "src" arch.

In "src" solvables, "context" is a number which represents index in
dependencies array.

Stream is not included anymore in "evr" because it's incomparable.
Version is not included anymore in "name" because it's there just for
comparison, nothing more (it's not different module-stream).

As a side, add_requires/add_conflicts/add_provides were replaced with
non-deprecated add_deparray method.

With all this, we are ready to handle MMDs which have multiple elements
in dependencies (modulemd v2).

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
060275f094 mmd_resolver: remove useless provides from modules
That would be never used and is totally useless.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
652c445b2c mmd_resolver: simplify conflict rule
Conflicting with module(foo) is more than enough to make sure that we
will have only one copy of solvables providing it.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
9ce5dffb14 mmd_resolver: rewrite function for finding alternatives
Previous version was assuming that number of alternatives is static
which is wrong, they can be appearing depending on solvables.

Also it was checking even impossible combinations (due to using
itertools.product).

Now we check only real possibilities.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Igor Gnatenko
4ff944477d mmd_resolver: set 'src' arch for build repo solvables
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00
Jan Kaluža
e7587cb77b add MMDResolver to find possible combinations between modules
Using libsolv for solving part and libmodulemd for getting the data.

Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
2018-04-03 09:58:57 -04:00