Package: dpkg
Version: 1.13.22
If A -Conflicts-> B, then dpkg correctly refuses to unpack A if B is
installed and to unpack B if A is installed. Furthermore, dpkg
correctly refuses to unpack A even if B is merely unpacked or
half-installed etc.
However, if A is unpacked or half-installed, the conflict is not
checked and it is possible to unpack B. This is a mistake. Between
two packages, Conflicts is a relationship with symmetrical effects (in
the absence of Replaces).
I think it might also be possible to remove the predependencies of
merely-unpacked packages, but I haven't tested this.
The cause lies in depcon.c, in depisok:
/* The dependency is always OK if we're trying to remove the depend*ing*
* package.
*/
switch (dep->up->clientdata->istobe) {
case itb_remove: case itb_deconfigure:
return 1;
case itb_normal:
/* Only `installed' packages can be make dependency problems */
switch (dep->up->status) {
case stat_installed:
break;
case stat_notinstalled: case stat_configfiles: case stat_halfinstalled:
case stat_halfconfigured: case stat_unpacked:
return 1;
default:
internerr("unknown status depending");
}
It is not true that only `installed' packages can cause dependency
problems. Both Conflicts and Pre-Depends, and soon Breaks, can cause
problem even if the `source' package for the dependency is not
completely installed.
I _think_ simply saying something like this:
case stat_halfinstalled: case stat_halfconfigured: case stat_unpacked:
if (dep->type == dep_conflicts ||
dep->type == dep_predepends ||
dep->type == dep_breaks)
break;
/* fall through */
case stat_notinstalled: case stat_configfiles:
return 1;
ought to fix it but I haven't tested this.
Ian.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]