diff --git a/src/ahriman/models/package_archive.py b/src/ahriman/models/package_archive.py index 8e831983..292f370d 100644 --- a/src/ahriman/models/package_archive.py +++ b/src/ahriman/models/package_archive.py @@ -38,6 +38,7 @@ class PackageArchive: helper for package archives Attributes: + BLACKLISTED_PATHS(list[Path]): (class attribute) paths blacklisted from scan package(Package): package descriptor root(Path): path to root filesystem pacman(Pacman): alpm wrapper instance @@ -47,6 +48,16 @@ class PackageArchive: package: Package pacman: Pacman + BLACKLISTED_PATHS = [ + Path("boot"), + Path("etc"), + Path("opt"), + Path("run"), + Path("usr") / "lib" / "cmake", # well-known case, cmake doesn't contain this directory + Path("usr") / "share", # share mostly contains like icons, cursors. etc + Path("var"), + ] + @staticmethod def dynamic_needed(binary_path: Path) -> list[str]: """ @@ -165,6 +176,10 @@ class PackageArchive: if any(package.package_name in base_packages for package in packages): continue + # skip blacklisted paths + if any(path.is_relative_to(parent) for parent in self.BLACKLISTED_PATHS): + continue + # remove explicit dependencies packages = [package for package in packages if package.is_root_package(packages, include_optional=False)] # remove optional dependencies diff --git a/tests/ahriman/models/test_package_archive.py b/tests/ahriman/models/test_package_archive.py index 8d78898a..2ec8fbba 100644 --- a/tests/ahriman/models/test_package_archive.py +++ b/tests/ahriman/models/test_package_archive.py @@ -134,8 +134,10 @@ def test_refine_dependencies(package_archive_ahriman: PackageArchive, mocker: Mo path1 = Path("usr") / "lib" / "python3.12" path2 = path1 / "site-packages" - path3 = Path("etc") - path4 = Path("var") / "lib" / "whatever" + path3 = Path("base") / "path" + path4 = Path("usr") / "lib" / "whatever" + path5 = Path("usr") / "share" / "applications" + path6 = Path("etc") package1 = FilesystemPackage(package_name="package1", depends={"package5"}, opt_depends={"package2"}) package2 = FilesystemPackage(package_name="package2", depends={"package1"}, opt_depends=set()) @@ -149,6 +151,8 @@ def test_refine_dependencies(package_archive_ahriman: PackageArchive, mocker: Mo path2: [package1, package2, package3, package5], path3: [package1, package4], path4: [package1], + path5: [package1], + path6: [package1], }) == { path1: [package6], path2: [package1, package5],