#!/usr/bin/python2.7
from __future__ import print_function
import gzip
import glob
import pgdb

from debian.deb822 import Deb822

from univention.repong.repo_lib_cfg import repocfg
from univention.repong.const import RE_SRC

cfg = repocfg()
dbhdl = pgdb.connect(host=cfg.pgdbhost, database=cfg.pgdbname, user=cfg.pgdbuser, password=cfg.pgdbpw)
dbcur = dbhdl.cursor()


missing = set()
for filename in glob.glob('/mnt/build-storage/upstream/debian/dists/buster/*/*/Packages.gz'):
	with gzip.open(filename) as fd:
		for pkg in Deb822.iter_paragraphs(fd):
			if 'Debian Games Team' in pkg['Maintainer']:
				continue
			if pkg.get('Section', '').endswith('games'):
				continue

			ver = pkg['Version']
			try:
				src = pkg['Source']
				m = RE_SRC.match(src)
				if m:
					src, ver = m.groups()
			except LookupError:
				src = pkg['Package']

			dbcur.execute("SELECT 1 FROM src_rev WHERE sourcepackagename=%s AND version=%s LIMIT 1", (src, ver))
			if dbcur.rowcount != 1:
				rec = (src, ver)
				missing.add(rec)

# Games
missing.discard(('crossfire', '1.71.0+dfsg1-2'))
missing.discard(('crrcsim', '0.9.13-3.1'))
missing.discard(('dds', '2.9.0-7'))
missing.discard(('enigma', '1.20-dfsg.1-2.1'))
missing.discard(('etoys', '5.0.2408-1'))
missing.discard(('gemrb', '0.8.5-1'))
missing.discard(('gridlock.app', '1.10-4'))
missing.discard(('kildclient', '3.2.0-2'))
missing.discard(('lizzie', '0.6+dfsg1-4'))
missing.discard(('pysycache', '3.1-3.3'))

# Security
missing.discard(('chromium', '78.0.3904.97-1~deb10u1'))
missing.discard(('dpdk', '18.11.2-2+deb10u1'))
missing.discard(('enigmail', '2:2.0.12+ds1-1~deb10u1'))
missing.discard(('firefox-esr', '68.2.0esr-1~deb10u1'))
missing.discard(('ghostscript', '9.27~dfsg-2+deb10u2'))
missing.discard(('linux', '4.19.67-2+deb10u1'))
missing.discard(('linux-signed-amd64', '4.19.67+2+deb10u1'))
missing.discard(('linux-signed-i386', '4.19.67+2+deb10u1'))
missing.discard(('nss', '2:3.42.1-1+deb10u1'))
missing.discard(('postgresql-common', '200+deb10u2'))
missing.discard(('qemu', '1:3.1+dfsg-8+deb10u2'))
missing.discard(('samba', '2:4.9.5+dfsg-5'))
missing.discard(('spip', '3.2.4-1+deb10u1'))
missing.discard(('thunderbird', '1:60.9.0-1~deb10u1'))
missing.discard(('webkit2gtk', '2.26.1-3~deb10u1'))

for src, ver in sorted(missing):
	print('repo_admin.py -F -r 5.0 -p {}_{}.dsc'.format(src, ver.split(':', 1)[1] if ':' in ver else ver))
