1.1 --- a/razor.c Wed Mar 05 10:46:40 2008 -0500
1.2 +++ b/razor.c Wed Mar 05 19:01:51 2008 -0500
1.3 @@ -1674,6 +1674,52 @@
1.4 return result;
1.5 }
1.6
1.7 +/* The diff order matters. We should sort the packages so that a
1.8 + * REMOVE of a package comes before the INSTALL, and so that all
1.9 + * requires for a package have been installed before the package.
1.10 + **/
1.11 +
1.12 +void
1.13 +razor_set_diff(struct razor_set *set, struct razor_set *upstream,
1.14 + razor_package_callback_t callback, void *data)
1.15 +{
1.16 + struct razor_package_iterator *pi1, *pi2;
1.17 + struct razor_package *p1, *p2;
1.18 + const char *name1, *name2, *version1, *version2;
1.19 + int res;
1.20 +
1.21 + pi1 = razor_package_iterator_create(set);
1.22 + pi2 = razor_package_iterator_create(upstream);
1.23 +
1.24 + razor_package_iterator_next(pi1, &p1, &name1, &version1);
1.25 + razor_package_iterator_next(pi2, &p2, &name2, &version2);
1.26 +
1.27 + while (p1 || p2) {
1.28 + if (p1 && p2) {
1.29 + res = strcmp(name1, name2);
1.30 + if (res == 0)
1.31 + res = versioncmp(version1, version2);
1.32 + } else {
1.33 + res = 0;
1.34 + }
1.35 +
1.36 + if (p2 == NULL || res < 0)
1.37 + callback(name1, version1, NULL, data);
1.38 + else if (p1 == NULL || res > 0)
1.39 + callback(name2, NULL, version2, data);
1.40 +
1.41 + if (p1 != NULL && res <= 0)
1.42 + razor_package_iterator_next(pi1, &p1,
1.43 + &name1, &version1);
1.44 + if (p2 != NULL && res >= 0)
1.45 + razor_package_iterator_next(pi2, &p2,
1.46 + &name2, &version2);
1.47 + }
1.48 +
1.49 + razor_package_iterator_destroy(pi1);
1.50 + razor_package_iterator_destroy(pi2);
1.51 +}
1.52 +
1.53
1.54 struct razor_transaction_resolver {
1.55 struct razor_set *system, *upstream;
1.56 @@ -2488,52 +2534,6 @@
1.57 array_release(&lost_files);
1.58 }
1.59
1.60 -/* The diff order matters. We should sort the packages so that a
1.61 - * REMOVE of a package comes before the INSTALL, and so that all
1.62 - * requires for a package have been installed before the package.
1.63 - **/
1.64 -
1.65 -void
1.66 -razor_set_diff(struct razor_set *set, struct razor_set *upstream,
1.67 - razor_package_callback_t callback, void *data)
1.68 -{
1.69 - struct razor_package_iterator *pi1, *pi2;
1.70 - struct razor_package *p1, *p2;
1.71 - const char *name1, *name2, *version1, *version2;
1.72 - int res;
1.73 -
1.74 - pi1 = razor_package_iterator_create(set);
1.75 - pi2 = razor_package_iterator_create(upstream);
1.76 -
1.77 - razor_package_iterator_next(pi1, &p1, &name1, &version1);
1.78 - razor_package_iterator_next(pi2, &p2, &name2, &version2);
1.79 -
1.80 - while (p1 || p2) {
1.81 - if (p1 && p2) {
1.82 - res = strcmp(name1, name2);
1.83 - if (res == 0)
1.84 - res = versioncmp(version1, version2);
1.85 - } else {
1.86 - res = 0;
1.87 - }
1.88 -
1.89 - if (p2 == NULL || res < 0)
1.90 - callback(name1, version1, NULL, data);
1.91 - else if (p1 == NULL || res > 0)
1.92 - callback(name2, NULL, version2, data);
1.93 -
1.94 - if (p1 != NULL && res <= 0)
1.95 - razor_package_iterator_next(pi1, &p1,
1.96 - &name1, &version1);
1.97 - if (p2 != NULL && res >= 0)
1.98 - razor_package_iterator_next(pi2, &p2,
1.99 - &name2, &version2);
1.100 - }
1.101 -
1.102 - razor_package_iterator_destroy(pi1);
1.103 - razor_package_iterator_destroy(pi2);
1.104 -}
1.105 -
1.106 struct razor_transaction *
1.107 razor_transaction_create(struct razor_set *system, struct razor_set *upstream,
1.108 int update_count, const char **update_packages,