1.1 --- a/razor.c Mon Jun 09 22:58:49 2008 -0400
1.2 +++ b/razor.c Mon Jun 09 23:51:52 2008 -0400
1.3 @@ -1874,10 +1874,16 @@
1.4 razor_transaction_update_package(struct razor_transaction *trans,
1.5 struct razor_package *package)
1.6 {
1.7 - struct razor_package *spkgs;
1.8 + struct razor_package *spkgs, *upkgs, *end;
1.9
1.10 spkgs = trans->system.set->packages.data;
1.11 - trans->system.packages[package - spkgs] |= TRANS_PACKAGE_UPDATE;
1.12 + upkgs = trans->upstream.set->packages.data;
1.13 + end = trans->system.set->packages.data +
1.14 + trans->system.set->packages.size;
1.15 + if (spkgs <= package && package < end)
1.16 + trans->system.packages[package - spkgs] |= TRANS_PACKAGE_UPDATE;
1.17 + else
1.18 + trans->upstream.packages[package - upkgs] |= TRANS_PACKAGE_UPDATE;
1.19 }
1.20
1.21 struct prop_iter {
1.22 @@ -2119,6 +2125,8 @@
1.23 }
1.24 }
1.25
1.26 +static const char *relation_string[] = { "<", "<=", "=", ">=", ">" };
1.27 +
1.28 static void
1.29 mark_satisfied_requires(struct razor_transaction *trans,
1.30 struct transaction_set *rts,
1.31 @@ -2141,8 +2149,6 @@
1.32 }
1.33 }
1.34
1.35 -static const char *relation_string[] = { "<", "<=", "=", ">=", ">" };
1.36 -
1.37 static void
1.38 mark_all_satisfied_requires(struct razor_transaction *trans)
1.39 {
1.40 @@ -2377,28 +2383,46 @@
1.41 return trans->changes;
1.42 }
1.43
1.44 +static void
1.45 +describe_unsatisfied(struct razor_set *set, struct razor_property *rp)
1.46 +{
1.47 + struct razor_package_iterator pi;
1.48 + struct razor_package *pkg;
1.49 + const char *name, *version, *arch, *pool;
1.50 +
1.51 + pool = set->string_pool.data;
1.52 + fprintf(stderr, "could not satisfy %s %s %s, required by",
1.53 + &pool[rp->name],
1.54 + relation_string[rp->relation],
1.55 + &pool[rp->version]);
1.56 +
1.57 + razor_package_iterator_init_for_property(&pi, set, rp);
1.58 + while (razor_package_iterator_next(&pi, &pkg, &name, &version, &arch))
1.59 + fprintf(stderr, " %s-%s", name, version);
1.60 +
1.61 + fprintf(stderr, "\n");
1.62 +}
1.63 +
1.64 void
1.65 razor_transaction_describe(struct razor_transaction *trans)
1.66 {
1.67 struct prop_iter rpi;
1.68 struct razor_property *rp;
1.69
1.70 + flush_scheduled_system_updates(trans);
1.71 + flush_scheduled_upstream_updates(trans);
1.72 + mark_all_satisfied_requires(trans);
1.73 +
1.74 prop_iter_init(&rpi, &trans->system);
1.75 while (prop_iter_next(&rpi, RAZOR_PROPERTY_REQUIRES, &rp)) {
1.76 if (!(rpi.present[rp - rpi.start] & TRANS_PROPERTY_SATISFIED))
1.77 - fprintf(stderr, "could not satisfy req %s %s %s\n",
1.78 - &rpi.pool[rp->name],
1.79 - relation_string[rp->relation],
1.80 - &rpi.pool[rp->version]);
1.81 + describe_unsatisfied(trans->system.set, rp);
1.82 }
1.83
1.84 prop_iter_init(&rpi, &trans->upstream);
1.85 while (prop_iter_next(&rpi, RAZOR_PROPERTY_REQUIRES, &rp)) {
1.86 if (!(rpi.present[rp - rpi.start] & TRANS_PROPERTY_SATISFIED))
1.87 - fprintf(stderr, "could not satisfy req %s %s %s\n",
1.88 - &rpi.pool[rp->name],
1.89 - relation_string[rp->relation],
1.90 - &rpi.pool[rp->version]);
1.91 + describe_unsatisfied(trans->upstream.set, rp);
1.92 }
1.93 }
1.94