diff --git a/aurweb/models/package_dependency.py b/aurweb/models/package_dependency.py
index 587ba68d..9cf1eda0 100644
--- a/aurweb/models/package_dependency.py
+++ b/aurweb/models/package_dependency.py
@@ -57,14 +57,17 @@ class PackageDependency(Base):
params=("NULL"),
)
- def is_package(self) -> bool:
+ def is_aur_package(self) -> bool:
pkg = db.query(_Package).filter(_Package.Name == self.DepName).exists()
+ return db.query(pkg).scalar()
+
+ def is_package(self) -> bool:
official = (
db.query(_OfficialProvider)
.filter(_OfficialProvider.Name == self.DepName)
.exists()
)
- return db.query(pkg).scalar() or db.query(official).scalar()
+ return self.is_aur_package() or db.query(official).scalar()
def provides(self) -> list[PackageRelation]:
from aurweb.models.relation_type import PROVIDES_ID
diff --git a/aurweb/packages/util.py b/aurweb/packages/util.py
index 78d79508..cfd1e9e9 100644
--- a/aurweb/packages/util.py
+++ b/aurweb/packages/util.py
@@ -83,9 +83,11 @@ def package_link(package: Union[Package, OfficialProvider]) -> str:
@register_filter("provides_markup")
def provides_markup(provides: Providers) -> str:
- return ", ".join(
- [f'{pkg.Name}' for pkg in provides]
- )
+ links = []
+ for pkg in provides:
+ aur = "ᴬᵁᴿ" if not pkg.is_official else ""
+ links.append(f'{pkg.Name}{aur}')
+ return ", ".join(links)
def get_pkg_or_base(
diff --git a/templates/partials/packages/package_metadata.html b/templates/partials/packages/package_metadata.html
index 50d38b48..c8d583a1 100644
--- a/templates/partials/packages/package_metadata.html
+++ b/templates/partials/packages/package_metadata.html
@@ -14,12 +14,15 @@
{% endif %}
{{ dep.DepName }}
- {% if broken %}
+ {%- if broken %}
{% if not provides %}
{% endif %}
- {% else %}
+ {% else -%}
+ {%- if dep.is_aur_package() -%}
+ ᴬᵁᴿ
+ {% endif %}
{% endif %}
{% if provides %}
diff --git a/test/test_package_dependency.py b/test/test_package_dependency.py
index 9366bb55..1cd2d305 100644
--- a/test/test_package_dependency.py
+++ b/test/test_package_dependency.py
@@ -4,6 +4,7 @@ from sqlalchemy.exc import IntegrityError
from aurweb import db
from aurweb.models.account_type import USER_ID
from aurweb.models.dependency_type import DEPENDS_ID
+from aurweb.models.official_provider import OfficialProvider
from aurweb.models.package import Package
from aurweb.models.package_base import PackageBase
from aurweb.models.package_dependency import PackageDependency
@@ -58,6 +59,22 @@ def test_package_dependencies(user: User, package: Package):
db.create(Package, PackageBase=base, Name=pkgdep.DepName)
assert pkgdep.is_package()
+ assert pkgdep.is_aur_package()
+
+ # Test with OfficialProvider
+ with db.begin():
+ pkgdep = db.create(
+ PackageDependency,
+ Package=package,
+ DepTypeID=DEPENDS_ID,
+ DepName="test-repo-pkg",
+ )
+ db.create(
+ OfficialProvider, Name=pkgdep.DepName, Repo="extra", Provides=pkgdep.DepName
+ )
+
+ assert pkgdep.is_package()
+ assert not pkgdep.is_aur_package()
def test_package_dependencies_null_package_raises():
diff --git a/test/test_packages_util.py b/test/test_packages_util.py
index bae84614..b429181b 100644
--- a/test/test_packages_util.py
+++ b/test/test_packages_util.py
@@ -10,8 +10,10 @@ from aurweb.models.package import Package
from aurweb.models.package_base import PackageBase
from aurweb.models.package_dependency import PackageDependency
from aurweb.models.package_notification import PackageNotification
+from aurweb.models.package_relation import PackageRelation
from aurweb.models.package_source import PackageSource
from aurweb.models.package_vote import PackageVote
+from aurweb.models.relation_type import PROVIDES_ID
from aurweb.models.user import User
from aurweb.packages import util
@@ -155,3 +157,41 @@ def test_pkg_required(package: Package):
# We should have 1 record
assert qry.count() == 1
+
+
+def test_provides_markup(package: Package):
+ # Create dependency and provider for AUR pkg
+ with db.begin():
+ dep = db.create(
+ PackageDependency,
+ Package=package,
+ DepName="test",
+ DepTypeID=DEPENDS_ID,
+ )
+ rel_pkg = db.create(Package, PackageBase=package.PackageBase, Name=dep.DepName)
+ db.create(
+ PackageRelation,
+ Package=rel_pkg,
+ RelName=dep.DepName,
+ RelTypeID=PROVIDES_ID,
+ )
+
+ # AUR provider links should end with ᴬᵁᴿ
+ link = util.provides_markup(dep.provides())
+ assert link.endswith("ᴬᵁᴿ")
+ assert OFFICIAL_BASE not in link
+
+ # Remove AUR provider and add official one
+ with db.begin():
+ db.delete(rel_pkg)
+ db.create(
+ OfficialProvider,
+ Name="official-pkg",
+ Repo="extra",
+ Provides=dep.DepName,
+ )
+
+ # Repo provider links should not have any suffix
+ link = util.provides_markup(dep.provides())
+ assert link.endswith("")
+ assert OFFICIAL_BASE in link