From: Kristian Høgsberg Date: Tue, 10 Jun 2008 03:51:52 +0000 (-0400) Subject: Make razor_transaction_describe() work and use it in rpm wrapper. X-Git-Tag: 0.1~133 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=9467facac39f69bb70fd474757b8aa5612076c8d;p=razor.git Make razor_transaction_describe() work and use it in rpm wrapper. --- diff --git a/razor.c b/razor.c index fe16d30..52cab91 100644 --- a/razor.c +++ b/razor.c @@ -1874,10 +1874,16 @@ void razor_transaction_update_package(struct razor_transaction *trans, struct razor_package *package) { - struct razor_package *spkgs; + struct razor_package *spkgs, *upkgs, *end; spkgs = trans->system.set->packages.data; - trans->system.packages[package - spkgs] |= TRANS_PACKAGE_UPDATE; + upkgs = trans->upstream.set->packages.data; + end = trans->system.set->packages.data + + trans->system.set->packages.size; + if (spkgs <= package && package < end) + trans->system.packages[package - spkgs] |= TRANS_PACKAGE_UPDATE; + else + trans->upstream.packages[package - upkgs] |= TRANS_PACKAGE_UPDATE; } struct prop_iter { @@ -2119,6 +2125,8 @@ clear_requires_flags(struct transaction_set *ts) } } +static const char *relation_string[] = { "<", "<=", "=", ">=", ">" }; + static void mark_satisfied_requires(struct razor_transaction *trans, struct transaction_set *rts, @@ -2141,8 +2149,6 @@ mark_satisfied_requires(struct razor_transaction *trans, } } -static const char *relation_string[] = { "<", "<=", "=", ">=", ">" }; - static void mark_all_satisfied_requires(struct razor_transaction *trans) { @@ -2377,28 +2383,46 @@ razor_transaction_resolve(struct razor_transaction *trans) return trans->changes; } +static void +describe_unsatisfied(struct razor_set *set, struct razor_property *rp) +{ + struct razor_package_iterator pi; + struct razor_package *pkg; + const char *name, *version, *arch, *pool; + + pool = set->string_pool.data; + fprintf(stderr, "could not satisfy %s %s %s, required by", + &pool[rp->name], + relation_string[rp->relation], + &pool[rp->version]); + + razor_package_iterator_init_for_property(&pi, set, rp); + while (razor_package_iterator_next(&pi, &pkg, &name, &version, &arch)) + fprintf(stderr, " %s-%s", name, version); + + fprintf(stderr, "\n"); +} + void razor_transaction_describe(struct razor_transaction *trans) { struct prop_iter rpi; struct razor_property *rp; + flush_scheduled_system_updates(trans); + flush_scheduled_upstream_updates(trans); + mark_all_satisfied_requires(trans); + prop_iter_init(&rpi, &trans->system); while (prop_iter_next(&rpi, RAZOR_PROPERTY_REQUIRES, &rp)) { if (!(rpi.present[rp - rpi.start] & TRANS_PROPERTY_SATISFIED)) - fprintf(stderr, "could not satisfy req %s %s %s\n", - &rpi.pool[rp->name], - relation_string[rp->relation], - &rpi.pool[rp->version]); + describe_unsatisfied(trans->system.set, rp); } prop_iter_init(&rpi, &trans->upstream); while (prop_iter_next(&rpi, RAZOR_PROPERTY_REQUIRES, &rp)) { if (!(rpi.present[rp - rpi.start] & TRANS_PROPERTY_SATISFIED)) - fprintf(stderr, "could not satisfy req %s %s %s\n", - &rpi.pool[rp->name], - relation_string[rp->relation], - &rpi.pool[rp->version]); + describe_unsatisfied(trans->upstream.set, rp); } } diff --git a/rpm-razor.c b/rpm-razor.c index 55ca92f..21abd9c 100644 --- a/rpm-razor.c +++ b/rpm-razor.c @@ -558,6 +558,7 @@ command_install(int argc, const char *argv[]) razor_transaction_install_package(trans, package); razor_package_iterator_destroy(pi); + razor_transaction_describe(trans); next = razor_transaction_finish(trans); razor_set_destroy(set); razor_set_destroy(upstream); @@ -568,12 +569,34 @@ command_install(int argc, const char *argv[]) static void command_update(int argc, const char *argv[]) { + struct razor_set *set, *upstream, *next; + struct razor_transaction *trans; + struct razor_package_iterator *pi; + struct razor_package *package; + const char *name, *version, *arch; + if (argc == 0) { printf("no packages given for update\n"); exit(1); } - printf("command update - not implemented\n"); + set = razor_set_open(repo_filename); + upstream = create_set_from_command_line(argc, argv); + + trans = razor_transaction_create(set, upstream); + + pi = razor_package_iterator_create(upstream); + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) + razor_transaction_update_package(trans, package); + razor_package_iterator_destroy(pi); + + razor_transaction_describe(trans); + next = razor_transaction_finish(trans); + razor_set_destroy(set); + razor_set_destroy(upstream); + + razor_set_destroy(next); } static int