From: Dan Winship Date: Wed, 12 Mar 2008 15:53:10 +0000 (-0400) Subject: fix up transaction descriptions a little more X-Git-Tag: 0.1~192 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=1f72f9d7c4066154066afaa1620872a57c4668ac;p=razor2.git%2F.git fix up transaction descriptions a little more --- diff --git a/razor.c b/razor.c index f9e6583..65ac783 100644 --- a/razor.c +++ b/razor.c @@ -1917,7 +1917,8 @@ resolve_new_packages(struct razor_transaction_resolver *trans, sp = trans->system->properties.data; up = trans->upstream->properties.data; for (i = 0; i < end - start; i++) { - if (!packages[i]->name) + if (!packages[i]->name || + packages[i]->state >= RAZOR_PACKAGE_FIRST_ERROR_STATE) continue; spkg = NULL; @@ -1945,9 +1946,10 @@ resolve_new_packages(struct razor_transaction_resolver *trans, packages[i]->name = &spool[spkg->name]; packages[i]->old_version = &spool[spkg->version]; bitarray_set(&trans->syspkgs, spkg - spkgs, 0); - } else { + } + if (!packages[i]->old_package) { packages[i]->name = strdup(packages[i]->name); - packages[i]->state = RAZOR_PACKAGE_REMOVE_NOT_INSTALLED; + packages[i]->state |= RAZOR_PACKAGE_UNAVAILABLE_FLAG; trans->errors++; } } else { @@ -1975,9 +1977,10 @@ resolve_new_packages(struct razor_transaction_resolver *trans, bitarray_set(&trans->syspkgs, spkg - spkgs, 0); } bitarray_set(&trans->uppkgs, upkg - upkgs, 1); - } else { + } + if (!packages[i]->new_package) { packages[i]->name = strdup(packages[i]->name); - packages[i]->state = RAZOR_PACKAGE_INSTALL_UNAVAILABLE; + packages[i]->state |= RAZOR_PACKAGE_UNAVAILABLE_FLAG; trans->errors++; } } @@ -2695,6 +2698,35 @@ const char * const razor_property_types[] = { "requires", "provides", "conflicts with", "obsoletes" }; +static void +print_requirement(struct razor_transaction_package *p) +{ + if (p->dep_type == RAZOR_PROPERTY_CONFLICTS && + !strcmp(p->dep_package, p->name)) { + printf(" because %s %s conflicts with %s", + p->name, p->old_version, p->dep_property); + if (*p->dep_version) { + printf(" %s %s", + razor_version_relations[p->dep_relation], + p->dep_version); + } + } else { + if (strcmp(p->name, p->dep_package) != 0) + printf(" for %s", p->dep_package); + if (*p->dep_version) { + printf(", which %s %s %s %s", + razor_property_types[p->dep_type], + p->dep_property, + razor_version_relations[p->dep_relation], + p->dep_version); + } else if (strcmp(p->dep_property, p->name) != 0) { + printf(", which %s %s", + razor_property_types[p->dep_type], + p->dep_property); + } + } +} + void razor_transaction_describe(struct razor_transaction *trans) { @@ -2710,31 +2742,8 @@ razor_transaction_describe(struct razor_transaction *trans) break; printf("Installing %s %s", p->name, p->new_version); - if (p->dep_package) { - if (p->dep_type == RAZOR_PROPERTY_CONFLICTS && - !strcmp(p->dep_package, p->name)) { - printf(" because %s %s conflicts with %s", - p->name, p->old_version, p->dep_property); - if (*p->dep_version) { - printf(" %s %s", - razor_version_relations[p->dep_relation], - p->dep_version); - } - } else { - printf(" for %s", p->dep_package); - if (*p->dep_version) { - printf(", which %s %s %s %s", - razor_property_types[p->dep_type], - p->dep_property, - razor_version_relations[p->dep_relation], - p->dep_version); - } else if (strcmp(p->dep_property, p->name) != 0) { - printf(", which %s %s", - razor_property_types[p->dep_type], - p->dep_property); - } - } - } + if (p->dep_package) + print_requirement(p); printf("\n"); break; @@ -2771,7 +2780,19 @@ razor_transaction_describe(struct razor_transaction *trans) break; case RAZOR_PACKAGE_INSTALL_UNAVAILABLE: - printf("Error: can't install %s: not found\n", p->name); + printf("Error: can't find %s", p->name); + if (p->dep_package) { + printf(" (which is required"); + print_requirement(p); + printf(")"); + } + printf("\n"); + errors_only = 1; + break; + + case RAZOR_PACKAGE_UPDATE_UNAVAILABLE: + printf("Error: can't find an updated version of %s (which must be updated due to update of %s)\n", + p->name, p->dep_package); errors_only = 1; break; @@ -2781,7 +2802,10 @@ razor_transaction_describe(struct razor_transaction *trans) break; case RAZOR_PACKAGE_UP_TO_DATE: - printf("Error: can't upgrade %s: %s is most recent version\n", p->name, p->old_version); + printf("Error: can't update %s", p->name); + if (p->dep_package) + printf(" (which must be updated due to update of %s)", p->dep_package); + printf(": %s is most recent version\n", p->old_version); errors_only = 1; break; diff --git a/razor.h b/razor.h index a328430..ac439c4 100644 --- a/razor.h +++ b/razor.h @@ -83,10 +83,18 @@ enum razor_transaction_package_state { /* Error states */ + RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4, + RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4, + /* Package requested for install does not exist */ - RAZOR_PACKAGE_INSTALL_UNAVAILABLE, + RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG, + /* Package requiring update does not have any update */ + RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG, /* Package requested for removal does not exist */ - RAZOR_PACKAGE_REMOVE_NOT_INSTALLED, + RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG, + /* (not used) */ + RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG, + /* No newer version of package is available */ RAZOR_PACKAGE_UP_TO_DATE, /* Package marked for both install and remove */