Require TUs to explicitly request to overwrite a pkgbase
[aur.git] / aurweb / scripts / aurblup.py
blob1b6de2f089e289961d942309d5bdd8142be1455d
1 #!/usr/bin/python3
3 import pyalpm
4 import re
6 import aurweb.config
7 import aurweb.db
9 db_path = aurweb.config.get('aurblup', 'db-path')
10 sync_dbs = aurweb.config.get('aurblup', 'sync-dbs').split(' ')
11 server = aurweb.config.get('aurblup', 'server')
14 def main():
15 blacklist = set()
16 providers = set()
17 repomap = dict()
19 h = pyalpm.Handle("/", db_path)
20 for sync_db in sync_dbs:
21 repo = h.register_syncdb(sync_db, pyalpm.SIG_DATABASE_OPTIONAL)
22 repo.servers = [server.replace("%s", sync_db)]
23 t = h.init_transaction()
24 repo.update(False)
25 t.release()
27 for pkg in repo.pkgcache:
28 blacklist.add(pkg.name)
29 [blacklist.add(x) for x in pkg.replaces]
30 providers.add((pkg.name, pkg.name))
31 repomap[(pkg.name, pkg.name)] = repo.name
32 for provision in pkg.provides:
33 provisionname = re.sub(r'(<|=|>).*', '', provision)
34 providers.add((pkg.name, provisionname))
35 repomap[(pkg.name, provisionname)] = repo.name
37 conn = aurweb.db.Connection()
39 cur = conn.execute("SELECT Name, Provides FROM OfficialProviders")
40 oldproviders = set(cur.fetchall())
42 for pkg, provides in providers.difference(oldproviders):
43 repo = repomap[(pkg, provides)]
44 conn.execute("INSERT INTO OfficialProviders (Name, Repo, Provides) "
45 "VALUES (?, ?, ?)", [pkg, repo, provides])
46 for pkg, provides in oldproviders.difference(providers):
47 conn.execute("DELETE FROM OfficialProviders "
48 "WHERE Name = ? AND Provides = ?", [pkg, provides])
50 conn.commit()
51 conn.close()
54 if __name__ == '__main__':
55 main()