Package: dpkg
Version: 1.14.7
In processarc.c:
if (!depisok(dsearch,&depprobwhy,0,1)) {
varbufaddc(&depprobwhy,0);
fprintf(stderr, _("dpkg: regarding %s containing %s, pre-dependency
problem:\n%s"),
pfilename, pkg->name, depprobwhy.buf);
if (!force_depends(dsearch->list))
ohshit(_("pre-dependency problem - not installing %.250s"),pkg->name);
dsearch->list should only be used in this way if the dependency is
only one-armed (eg, Provides, Conflicts, Breaks). In this case the
result is that ignore_depends in force_depends will be called on the
wrong package.
This mistake was probably caused partly by the fact that force_depends
is misnamed. It should probably be renamed force_deppossi.
Callers who have a dependency which is (or may be) of a multi-armed
type need to call force_deppossi (ie, force_depends) with the
appropriate deppossi, or do the logic from force_depends themselves.
The latter is a bit messy so I think we should create a new
int force_dependency(int fc, struct pkginfo *up, struct pkginfo *ed) {
return fc ||
ignore_depends(ed) ||
ignore_depends(up);
}
and call it in appropriate places. That will make the appropriate
calls clear for future programmers.
If this is to be done, it should be done in a git branch which is
based on my bug20471 branch, to avoid spurious conflicts.
Ian.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]