mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
feat: Indicate dependency source
Dependencies might reside in the AUR or official repositories. Add "AUR" as superscript letters to indicate if a package/provider is present in the AUR. Signed-off-by: moson <moson@archlinux.org>
This commit is contained in:
parent
1433553c05
commit
0a7b02956f
5 changed files with 72 additions and 7 deletions
|
@ -57,14 +57,17 @@ class PackageDependency(Base):
|
||||||
params=("NULL"),
|
params=("NULL"),
|
||||||
)
|
)
|
||||||
|
|
||||||
def is_package(self) -> bool:
|
def is_aur_package(self) -> bool:
|
||||||
pkg = db.query(_Package).filter(_Package.Name == self.DepName).exists()
|
pkg = db.query(_Package).filter(_Package.Name == self.DepName).exists()
|
||||||
|
return db.query(pkg).scalar()
|
||||||
|
|
||||||
|
def is_package(self) -> bool:
|
||||||
official = (
|
official = (
|
||||||
db.query(_OfficialProvider)
|
db.query(_OfficialProvider)
|
||||||
.filter(_OfficialProvider.Name == self.DepName)
|
.filter(_OfficialProvider.Name == self.DepName)
|
||||||
.exists()
|
.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]:
|
def provides(self) -> list[PackageRelation]:
|
||||||
from aurweb.models.relation_type import PROVIDES_ID
|
from aurweb.models.relation_type import PROVIDES_ID
|
||||||
|
|
|
@ -83,9 +83,11 @@ def package_link(package: Union[Package, OfficialProvider]) -> str:
|
||||||
|
|
||||||
@register_filter("provides_markup")
|
@register_filter("provides_markup")
|
||||||
def provides_markup(provides: Providers) -> str:
|
def provides_markup(provides: Providers) -> str:
|
||||||
return ", ".join(
|
links = []
|
||||||
[f'<a href="{package_link(pkg)}">{pkg.Name}</a>' for pkg in provides]
|
for pkg in provides:
|
||||||
)
|
aur = "ᴬᵁᴿ" if not pkg.is_official else ""
|
||||||
|
links.append(f'<a href="{package_link(pkg)}">{pkg.Name}</a>{aur}')
|
||||||
|
return ", ".join(links)
|
||||||
|
|
||||||
|
|
||||||
def get_pkg_or_base(
|
def get_pkg_or_base(
|
||||||
|
|
|
@ -14,12 +14,15 @@
|
||||||
<a href="{{ dep.DepName | pkgname_link }}">
|
<a href="{{ dep.DepName | pkgname_link }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{ dep.DepName }}
|
{{ dep.DepName }}
|
||||||
{% if broken %}
|
{%- if broken %}
|
||||||
{% if not provides %}
|
{% if not provides %}
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else -%}
|
||||||
</a>
|
</a>
|
||||||
|
{%- if dep.is_aur_package() -%}
|
||||||
|
ᴬᵁᴿ
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if provides %}
|
{% if provides %}
|
||||||
|
|
|
@ -4,6 +4,7 @@ from sqlalchemy.exc import IntegrityError
|
||||||
from aurweb import db
|
from aurweb import db
|
||||||
from aurweb.models.account_type import USER_ID
|
from aurweb.models.account_type import USER_ID
|
||||||
from aurweb.models.dependency_type import DEPENDS_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 import Package
|
||||||
from aurweb.models.package_base import PackageBase
|
from aurweb.models.package_base import PackageBase
|
||||||
from aurweb.models.package_dependency import PackageDependency
|
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)
|
db.create(Package, PackageBase=base, Name=pkgdep.DepName)
|
||||||
|
|
||||||
assert pkgdep.is_package()
|
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():
|
def test_package_dependencies_null_package_raises():
|
||||||
|
|
|
@ -10,8 +10,10 @@ from aurweb.models.package import Package
|
||||||
from aurweb.models.package_base import PackageBase
|
from aurweb.models.package_base import PackageBase
|
||||||
from aurweb.models.package_dependency import PackageDependency
|
from aurweb.models.package_dependency import PackageDependency
|
||||||
from aurweb.models.package_notification import PackageNotification
|
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_source import PackageSource
|
||||||
from aurweb.models.package_vote import PackageVote
|
from aurweb.models.package_vote import PackageVote
|
||||||
|
from aurweb.models.relation_type import PROVIDES_ID
|
||||||
from aurweb.models.user import User
|
from aurweb.models.user import User
|
||||||
from aurweb.packages import util
|
from aurweb.packages import util
|
||||||
|
|
||||||
|
@ -155,3 +157,41 @@ def test_pkg_required(package: Package):
|
||||||
|
|
||||||
# We should have 1 record
|
# We should have 1 record
|
||||||
assert qry.count() == 1
|
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("</a>ᴬᵁᴿ")
|
||||||
|
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("</a>")
|
||||||
|
assert OFFICIAL_BASE in link
|
||||||
|
|
Loading…
Add table
Reference in a new issue