Hello Andreas,
I just committed the new version of {sec-}blend-gen-control which now uses the {contain-}provides column. I run again the tester and a surprising, I have to say, bug(?) in sec-blend-gen-control came out( I will explain it below ). The control/task-description files for almost all blends seem to be ok(also the differences we had with debian-imaging with "djvu-viewer" virtual package are now solved), only debian-edu control files still have differences with packages which are not found in any of the tables(packages, new_packages, ubuntu_packages, blends_prospectivepackages) that the blends_metadata_gathener.py checks. For example:
diff control/control.amd64 control-sec/control.amd64
130c130
< dpt-i2o-raidutils | raidutils,
---
> dpt-i2o-raidutils | raidutils | dpt-raidutil,
138c138
< foomatic-filters-ppds,
---
> foomatic-filters-ppds | cupsomatic-ppd,
440a441
> flashplugin-nonfree-pulse | libflashsupport,
524c525
< kig,
---
> kig | keuklid | kgeo,
553d553
< libflashsupport,
603a604
> sodipodi,
706c707
< gpsim-led,
---
> gpsim-led | gpsim-lded,
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Except from debian-edu other Blends seem to be ok(and virtual packages are handled properly, except from the case which I explain below).
Now about the interesting bug. For debian-edu:
For the packages: nfs-kernel-server | nfs-server , we have:
1)In blends_dependencies_alternatives for debian-edu we have:
blend | task | alternatives | contains_provides | dependency
------------+-------------+--------------------------------+-------------------+------------
debian-edu | main-server | nfs-kernel-server | nfs-server | t | d
2)and in blends_dependencies we have:
blend | task | package | provides | dependency
------------+-------------+-------------------+----------+------------
debian-edu | main-server | nfs-kernel-server | f | d
debian-edu | main-server | nfs-server | t | d
Let's take the control file for architecture kfreebsd-amd64
For kfreebsd-amd64, testing release virtual package "nfs-server" is available but "nfs-kernel-server" package is not. So blend-gen-control correctly places "nfs-server" in Depends: and "nfs-kernel-server" in Suggests:.
In the blends_dependencies table where each package is single I know exactly which packages are virtual or not. So for this example I will check if nfs-kernel-server exists by outer joining the blends_dependencies table(like I do for all the packages) but for the virtual nfs-server(provides=true so I handle this packages in different way than the other ) I will do to this(in order to check if it exists):
SELECT DISTINCT provides, p.distribution, component FROM packages p
JOIN releases r ON p.release = r.release
WHERE provides ~ ('((\s|,)'||'nfs-server'||'(\s+|,|$)|^'||'nfs-server'||'$)')
AND r.role='testing' and p.architecture='kfreebsd-amd64' AND component='main'
output:
provides | distribution | component
-------------------------------+--------------+-----------
nfs-kernel-server, nfs-server | debian | main
So here I get a result which contain the "nfs-server" so I know it's available.
Notice here that nfs-kernel-server also appears as a virtual package
In the case of blends_dependencies_alternatives where I have:
blend | task | alternatives | contains_provides | dependency
------------+-------------+--------------------------------+-------------------+------------
debian-edu | main-server | nfs-kernel-server | nfs-server | t | d
I do not know which package is virtual or not so I will check for both of them like in a common result set:
SELECT DISTINCT package, p.distribution, component FROM packages p
JOIN releases r ON p.release = r.release
WHERE package in ('nfs-server', 'nfs-kernel-server')
AND r.role='testing' and p.architecture='kfreebsd-amd64' AND component='main'
UNION
SELECT DISTINCT provides, p.distribution, component FROM packages p
JOIN releases r ON p.release = r.release
WHERE provides ~ ('((\s|,)'||'(nfs-kernel-server|nfs-server)'||'(\s+|,|$)|^'||'(nfs-kernel-server|nfs-server)'||'$)')
AND r.role='testing' and p.architecture='kfreebsd-amd64' AND component='main'
output:
package | distribution | component
-------------------------------+--------------+-----------
nfs-kernel-server, nfs-server | debian | main
Although nfs-kernel-server does not appear in "packages" table for kfreebsd-amd64, testing release(so blend-gen-control place it in suggests), it appears in a provides column(as a virtual package) so sec-blend-gen-control place them both in Depends: nfs-kernel-server | nfs-server (it does not know which of them is a package or a virtual package so it checks for each of them in a common result set). Anyway this bug(I do not know if actually it's a bug) will appear in sec-blend-gen-control ONLY in cases where a package appears in packages UDD table both in "package" and "provides" columns.
So due to way the different {sec-}blend-gen-controls work, they handle it these packages in a different way. I will try to think another way of handling the virtual packages, without changing current UDD state, in order to avoid that.
PS: I hope I used proper wording to explain the issue, in case you don't understand let me know so I will try to rewrite it a better way.
Kind regards
Emmanouil