Make razor_transaction_describe() work and use it in rpm wrapper.
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
2.1 --- a/rpm-razor.c Mon Jun 09 22:58:49 2008 -0400
2.2 +++ b/rpm-razor.c Mon Jun 09 23:51:52 2008 -0400
2.3 @@ -558,6 +558,7 @@
2.4 razor_transaction_install_package(trans, package);
2.5 razor_package_iterator_destroy(pi);
2.6
2.7 + razor_transaction_describe(trans);
2.8 next = razor_transaction_finish(trans);
2.9 razor_set_destroy(set);
2.10 razor_set_destroy(upstream);
2.11 @@ -568,12 +569,34 @@
2.12 static void
2.13 command_update(int argc, const char *argv[])
2.14 {
2.15 + struct razor_set *set, *upstream, *next;
2.16 + struct razor_transaction *trans;
2.17 + struct razor_package_iterator *pi;
2.18 + struct razor_package *package;
2.19 + const char *name, *version, *arch;
2.20 +
2.21 if (argc == 0) {
2.22 printf("no packages given for update\n");
2.23 exit(1);
2.24 }
2.25
2.26 - printf("command update - not implemented\n");
2.27 + set = razor_set_open(repo_filename);
2.28 + upstream = create_set_from_command_line(argc, argv);
2.29 +
2.30 + trans = razor_transaction_create(set, upstream);
2.31 +
2.32 + pi = razor_package_iterator_create(upstream);
2.33 + while (razor_package_iterator_next(pi, &package,
2.34 + &name, &version, &arch))
2.35 + razor_transaction_update_package(trans, package);
2.36 + razor_package_iterator_destroy(pi);
2.37 +
2.38 + razor_transaction_describe(trans);
2.39 + next = razor_transaction_finish(trans);
2.40 + razor_set_destroy(set);
2.41 + razor_set_destroy(upstream);
2.42 +
2.43 + razor_set_destroy(next);
2.44 }
2.45
2.46 static int