Skip to content

Commit

Permalink
Fixed error on adding modular content to a repository
Browse files Browse the repository at this point in the history
The problem was use of values_list() which isn't meant for many-to-many
relationships. Instead, build a set of packages.

fixes #5746
https://pulp.plan.io/issues/5746

(cherry picked from commit 1004c2b)
  • Loading branch information
David Davis authored and goosemania committed Nov 27, 2019
1 parent b0aab10 commit 1f7c405
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES/5746.bugfix
@@ -0,0 +1 @@
Fix error when adding/removing modules to/from a repository.
18 changes: 12 additions & 6 deletions pulp_rpm/app/modulemd.py
Expand Up @@ -3,7 +3,7 @@
import tempfile

from pulpcore.app.models.content import Artifact
from pulp_rpm.app.models import Modulemd
from pulp_rpm.app.models import Modulemd, Package
from pulp_rpm.app.constants import PULP_MODULE_ATTR, PULP_MODULEDEFAULTS_ATTR

import gi
Expand All @@ -18,6 +18,12 @@ def resolve_module_packages(version, previous_version):
Args:
version (pulpcore.app.models.RepositoryVersion): current incomplete repository version
"""
def modules_packages(modules):
packages = set()
for module in modules:
packages.update(module.packages.all())
return packages

current_modules = Modulemd.objects \
.filter(pk__in=version.content.filter(pulp_type="rpm.modulemd"))

Expand All @@ -26,17 +32,17 @@ def resolve_module_packages(version, previous_version):
.filter(pk__in=previous_version.content.filter(pulp_type="rpm.modulemd"))
added_modules = current_modules.difference(previous_modules)
removed_modules = previous_modules.difference(current_modules)
current_module_packages = current_modules.values_list("packages", flat=True)
removed_module_packages = removed_modules.values_list("packages", flat=True)
current_module_packages = modules_packages(current_modules)
removed_module_packages = modules_packages(removed_modules)
packages_to_remove = removed_module_packages.difference(current_module_packages)
version.remove_content(packages_to_remove)
version.remove_content(Package.objects.filter(pk__in=packages_to_remove))
else:
added_modules = current_modules

added_module_packages = added_modules.values_list("packages", flat=True)
added_module_packages = modules_packages(added_modules)
current_packages = version.content.filter(pulp_type="rpm.package")
packages_to_add = added_module_packages.difference(current_packages)
version.add_content(packages_to_add)
version.add_content(Package.objects.filter(pk__in=packages_to_add))


def _create_snippet(snippet_string):
Expand Down

0 comments on commit 1f7c405

Please sign in to comment.