1.1 --- a/razor.c Wed Mar 12 11:46:53 2008 -0400
1.2 +++ b/razor.c Wed Mar 12 11:53:10 2008 -0400
1.3 @@ -1917,7 +1917,8 @@
1.4 sp = trans->system->properties.data;
1.5 up = trans->upstream->properties.data;
1.6 for (i = 0; i < end - start; i++) {
1.7 - if (!packages[i]->name)
1.8 + if (!packages[i]->name ||
1.9 + packages[i]->state >= RAZOR_PACKAGE_FIRST_ERROR_STATE)
1.10 continue;
1.11
1.12 spkg = NULL;
1.13 @@ -1945,9 +1946,10 @@
1.14 packages[i]->name = &spool[spkg->name];
1.15 packages[i]->old_version = &spool[spkg->version];
1.16 bitarray_set(&trans->syspkgs, spkg - spkgs, 0);
1.17 - } else {
1.18 + }
1.19 + if (!packages[i]->old_package) {
1.20 packages[i]->name = strdup(packages[i]->name);
1.21 - packages[i]->state = RAZOR_PACKAGE_REMOVE_NOT_INSTALLED;
1.22 + packages[i]->state |= RAZOR_PACKAGE_UNAVAILABLE_FLAG;
1.23 trans->errors++;
1.24 }
1.25 } else {
1.26 @@ -1975,9 +1977,10 @@
1.27 bitarray_set(&trans->syspkgs, spkg - spkgs, 0);
1.28 }
1.29 bitarray_set(&trans->uppkgs, upkg - upkgs, 1);
1.30 - } else {
1.31 + }
1.32 + if (!packages[i]->new_package) {
1.33 packages[i]->name = strdup(packages[i]->name);
1.34 - packages[i]->state = RAZOR_PACKAGE_INSTALL_UNAVAILABLE;
1.35 + packages[i]->state |= RAZOR_PACKAGE_UNAVAILABLE_FLAG;
1.36 trans->errors++;
1.37 }
1.38 }
1.39 @@ -2695,6 +2698,35 @@
1.40 "requires", "provides", "conflicts with", "obsoletes"
1.41 };
1.42
1.43 +static void
1.44 +print_requirement(struct razor_transaction_package *p)
1.45 +{
1.46 + if (p->dep_type == RAZOR_PROPERTY_CONFLICTS &&
1.47 + !strcmp(p->dep_package, p->name)) {
1.48 + printf(" because %s %s conflicts with %s",
1.49 + p->name, p->old_version, p->dep_property);
1.50 + if (*p->dep_version) {
1.51 + printf(" %s %s",
1.52 + razor_version_relations[p->dep_relation],
1.53 + p->dep_version);
1.54 + }
1.55 + } else {
1.56 + if (strcmp(p->name, p->dep_package) != 0)
1.57 + printf(" for %s", p->dep_package);
1.58 + if (*p->dep_version) {
1.59 + printf(", which %s %s %s %s",
1.60 + razor_property_types[p->dep_type],
1.61 + p->dep_property,
1.62 + razor_version_relations[p->dep_relation],
1.63 + p->dep_version);
1.64 + } else if (strcmp(p->dep_property, p->name) != 0) {
1.65 + printf(", which %s %s",
1.66 + razor_property_types[p->dep_type],
1.67 + p->dep_property);
1.68 + }
1.69 + }
1.70 +}
1.71 +
1.72 void
1.73 razor_transaction_describe(struct razor_transaction *trans)
1.74 {
1.75 @@ -2710,31 +2742,8 @@
1.76 break;
1.77
1.78 printf("Installing %s %s", p->name, p->new_version);
1.79 - if (p->dep_package) {
1.80 - if (p->dep_type == RAZOR_PROPERTY_CONFLICTS &&
1.81 - !strcmp(p->dep_package, p->name)) {
1.82 - printf(" because %s %s conflicts with %s",
1.83 - p->name, p->old_version, p->dep_property);
1.84 - if (*p->dep_version) {
1.85 - printf(" %s %s",
1.86 - razor_version_relations[p->dep_relation],
1.87 - p->dep_version);
1.88 - }
1.89 - } else {
1.90 - printf(" for %s", p->dep_package);
1.91 - if (*p->dep_version) {
1.92 - printf(", which %s %s %s %s",
1.93 - razor_property_types[p->dep_type],
1.94 - p->dep_property,
1.95 - razor_version_relations[p->dep_relation],
1.96 - p->dep_version);
1.97 - } else if (strcmp(p->dep_property, p->name) != 0) {
1.98 - printf(", which %s %s",
1.99 - razor_property_types[p->dep_type],
1.100 - p->dep_property);
1.101 - }
1.102 - }
1.103 - }
1.104 + if (p->dep_package)
1.105 + print_requirement(p);
1.106 printf("\n");
1.107 break;
1.108
1.109 @@ -2771,7 +2780,19 @@
1.110 break;
1.111
1.112 case RAZOR_PACKAGE_INSTALL_UNAVAILABLE:
1.113 - printf("Error: can't install %s: not found\n", p->name);
1.114 + printf("Error: can't find %s", p->name);
1.115 + if (p->dep_package) {
1.116 + printf(" (which is required");
1.117 + print_requirement(p);
1.118 + printf(")");
1.119 + }
1.120 + printf("\n");
1.121 + errors_only = 1;
1.122 + break;
1.123 +
1.124 + case RAZOR_PACKAGE_UPDATE_UNAVAILABLE:
1.125 + printf("Error: can't find an updated version of %s (which must be updated due to update of %s)\n",
1.126 + p->name, p->dep_package);
1.127 errors_only = 1;
1.128 break;
1.129
1.130 @@ -2781,7 +2802,10 @@
1.131 break;
1.132
1.133 case RAZOR_PACKAGE_UP_TO_DATE:
1.134 - printf("Error: can't upgrade %s: %s is most recent version\n", p->name, p->old_version);
1.135 + printf("Error: can't update %s", p->name);
1.136 + if (p->dep_package)
1.137 + printf(" (which must be updated due to update of %s)", p->dep_package);
1.138 + printf(": %s is most recent version\n", p->old_version);
1.139 errors_only = 1;
1.140 break;
1.141
2.1 --- a/razor.h Wed Mar 12 11:46:53 2008 -0400
2.2 +++ b/razor.h Wed Mar 12 11:53:10 2008 -0400
2.3 @@ -83,10 +83,18 @@
2.4
2.5 /* Error states */
2.6
2.7 + RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4,
2.8 + RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4,
2.9 +
2.10 /* Package requested for install does not exist */
2.11 - RAZOR_PACKAGE_INSTALL_UNAVAILABLE,
2.12 + RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
2.13 + /* Package requiring update does not have any update */
2.14 + RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
2.15 /* Package requested for removal does not exist */
2.16 - RAZOR_PACKAGE_REMOVE_NOT_INSTALLED,
2.17 + RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
2.18 + /* (not used) */
2.19 + RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
2.20 +
2.21 /* No newer version of package is available */
2.22 RAZOR_PACKAGE_UP_TO_DATE,
2.23 /* Package marked for both install and remove */