diff options
| -rw-r--r-- | meta/lib/oe/package_manager.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py index e862915b1b..2a5d7ef539 100644 --- a/meta/lib/oe/package_manager.py +++ b/meta/lib/oe/package_manager.py | |||
| @@ -581,6 +581,11 @@ class PackageManager(object, metaclass=ABCMeta): | |||
| 581 | # oe-pkgdata-util reads it from a file | 581 | # oe-pkgdata-util reads it from a file |
| 582 | with tempfile.NamedTemporaryFile(mode="w+", prefix="installed-pkgs") as installed_pkgs: | 582 | with tempfile.NamedTemporaryFile(mode="w+", prefix="installed-pkgs") as installed_pkgs: |
| 583 | pkgs = self.list_installed() | 583 | pkgs = self.list_installed() |
| 584 | |||
| 585 | provided_pkgs = set() | ||
| 586 | for pkg in pkgs.values(): | ||
| 587 | provided_pkgs |= set(pkg.get('provs', [])) | ||
| 588 | |||
| 584 | output = oe.utils.format_pkg_list(pkgs, "arch") | 589 | output = oe.utils.format_pkg_list(pkgs, "arch") |
| 585 | installed_pkgs.write(output) | 590 | installed_pkgs.write(output) |
| 586 | installed_pkgs.flush() | 591 | installed_pkgs.flush() |
| @@ -592,10 +597,15 @@ class PackageManager(object, metaclass=ABCMeta): | |||
| 592 | if exclude: | 597 | if exclude: |
| 593 | cmd.extend(['--exclude=' + '|'.join(exclude.split())]) | 598 | cmd.extend(['--exclude=' + '|'.join(exclude.split())]) |
| 594 | try: | 599 | try: |
| 595 | bb.note("Installing complementary packages ...") | ||
| 596 | bb.note('Running %s' % cmd) | 600 | bb.note('Running %s' % cmd) |
| 597 | complementary_pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8") | 601 | complementary_pkgs = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode("utf-8") |
| 598 | self.install(complementary_pkgs.split(), attempt_only=True) | 602 | complementary_pkgs = set(complementary_pkgs.split()) |
| 603 | skip_pkgs = sorted(complementary_pkgs & provided_pkgs) | ||
| 604 | install_pkgs = sorted(complementary_pkgs - provided_pkgs) | ||
| 605 | bb.note("Installing complementary packages ... %s (skipped already provided packages %s)" % ( | ||
| 606 | ' '.join(install_pkgs), | ||
| 607 | ' '.join(skip_pkgs))) | ||
| 608 | self.install(install_pkgs, attempt_only=True) | ||
| 599 | except subprocess.CalledProcessError as e: | 609 | except subprocess.CalledProcessError as e: |
| 600 | bb.fatal("Could not compute complementary packages list. Command " | 610 | bb.fatal("Could not compute complementary packages list. Command " |
| 601 | "'%s' returned %d:\n%s" % | 611 | "'%s' returned %d:\n%s" % |
