Hi!

Some comments/suggestions. (Note: First wait for Dan's response, whether
he can support your concept (behavior change) or not. I would be sad, if
you did useless work because of me.)

I must repeat some of my earlier suggestions.

We prefer shorter patches. I can fully support in your patch: dropping
PM_TRANS_CONV_INSTALL_IGNOREPKG, I don't know why we haven't done this
earlier. But: I think we should give a warning where we asked the user
earlier. For example, this part could be factorized into a seperate
patch.

> +static int is_needed(alpm_list_t *infolist, pkginfo_t *info, int marker)
> +{
> +     if (info->unresolvable) {
> +             /* Obviously if it's already been marked unresolvable, it is not
> +                needed */
> +             return(0);
> +     } else if (!info->pulled) {
> +             /* If it's top-level (not pulled), then it's needed */
> +             return(1);
> +     } else {
> +             /* Now, if all of the top-level packages which depend on it are
> +                unresolvable, then it is unneeded */
> +             alpm_list_t *i;
> +             for (i = info->dependents; i; i = i->next) {
> +                     pmpkg_t *deppkg = (pmpkg_t *) i->data;
> +                     if (info->marker == marker) {
> +                             /* This means that a dependency loop has been 
> detected; we've
> +                                already marked this package meaning that 
> it's already been
> +                                seen this time through.  So ignore this 
> dependency. */
> +                             continue;
> +                     }
> +
> +                     info->marker = marker;
> +
> +                     if (!is_needed(infolist, findinfo(infolist, deppkg), 
> marker)) {
> +                             return(0);
> +                     }

???

> +             }
> +             
> +             return(1);

???
I don't understand this part. (I checked, your earlier patch also had
this part.) Probably want to do this: If any dependent is needed, then 
this package is also needed, otherwise not.

> +     }
> +}



> +                     pm_errno = PM_ERR_UNSATISFIED_DEPS;
> +                     _alpm_log(PM_LOG_ERROR, _("cannot resolve dependencies 
> for:\n"));
> +                     for (i = unresolvable; i; i = i->next) {
> +                             _alpm_log(PM_LOG_ERROR, _("\t%s\n"), 
> alpm_pkg_get_name((pmpkg_t *) i->data));

2. The result of this:
error: cannot resolve dependencies for:
error:  foo
error:  bar
...

This is ugly, we use data list for this purpose, the front-end should
build this message.

> +                             if (data) {
> +                                     alpm_list_t *targ = alpm_list_add(NULL, 
> i->data);
> +                                     deps = 
> alpm_checkdeps(_alpm_db_get_pkgcache(local), 0, remove, targ);

This is not OK. (If this part existed in your previous patch, sorry for
missing it.) In the target list we may have a satisfier.

> +                                     alpm_list_free(targ);
> +                             }
> +                     }


_______________________________________________
pacman-dev mailing list
[email protected]
http://archlinux.org/mailman/listinfo/pacman-dev

Reply via email to