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"),
|
||||
)
|
||||
|
||||
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
|
||||
|
|
|
@ -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'<a href="{package_link(pkg)}">{pkg.Name}</a>' for pkg in provides]
|
||||
)
|
||||
links = []
|
||||
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(
|
||||
|
|
|
@ -14,12 +14,15 @@
|
|||
<a href="{{ dep.DepName | pkgname_link }}">
|
||||
{% endif %}
|
||||
{{ dep.DepName }}
|
||||
{% if broken %}
|
||||
{%- if broken %}
|
||||
{% if not provides %}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% else -%}
|
||||
</a>
|
||||
{%- if dep.is_aur_package() -%}
|
||||
ᴬᵁᴿ
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if provides %}
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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("</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