mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Track providers in the official repositories
Maintain a list of virtual provisions of packages from the official binary package repositories. The list can be updated using the aurblup script, e.g. via a cronjob. This allows for adding proper links to package dependencies: If an AUR package depends on a package from the official repositories (or on a name provided by a package from the official repositories), add a link to the corresponding archweb package details page. If an AUR package depends on another AUR package (or on a name provided by another AUR package), add a link to the corresponding aurweb package details page. Otherwise, just display the name and do not add a link at all. Fixes FS#46549. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
4411a55ec9
commit
16765d5532
4 changed files with 82 additions and 16 deletions
|
@ -18,6 +18,7 @@ sync_dbs = config.get('aurblup', 'sync-dbs').split(' ')
|
|||
servers = config.get('aurblup', 'servers').split(' ')
|
||||
|
||||
blacklist = set()
|
||||
providers = set()
|
||||
|
||||
h = pyalpm.Handle("/", db_path)
|
||||
for sync_db in sync_dbs:
|
||||
|
@ -30,6 +31,8 @@ for sync_db in sync_dbs:
|
|||
for pkg in repo.pkgcache:
|
||||
blacklist.add(pkg.name)
|
||||
[blacklist.add(x) for x in pkg.replaces]
|
||||
providers.add((pkg.name, pkg.name))
|
||||
[providers.add((pkg.name, x)) for x in pkg.provides]
|
||||
|
||||
db = mysql.connector.connect(host=aur_db_host, user=aur_db_user,
|
||||
passwd=aur_db_pass, db=aur_db_name,
|
||||
|
@ -44,5 +47,15 @@ for pkg in blacklist.difference(oldblacklist):
|
|||
for pkg in oldblacklist.difference(blacklist):
|
||||
cur.execute("DELETE FROM PackageBlacklist WHERE Name = %s", [pkg])
|
||||
|
||||
cur.execute("SELECT Name, Provides FROM OfficialProviders")
|
||||
oldproviders = set(cur.fetchall())
|
||||
|
||||
for pkg, provides in providers.difference(oldproviders):
|
||||
cur.execute("INSERT INTO OfficialProviders (Name, Provides) "
|
||||
"VALUES (%s, %s)", [pkg, provides])
|
||||
for pkg, provides in oldproviders.difference(providers):
|
||||
cur.execute("DELETE FROM OfficialProviders "
|
||||
"WHERE Name = %s AND Provides = %s", [pkg, provides])
|
||||
|
||||
db.commit()
|
||||
db.close()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue