# HG changeset patch # User Dan Winship # Date 1204761711 18000 # Node ID 1d4043c9f869b3c9b81a5e559521c9471a6b2f3c # Parent 097f7b60b97a05cb1f55385636a4069719f186e9 move razor_set_diff so it's not in the middle of the transaction code diff -r 097f7b60b97a -r 1d4043c9f869 razor.c --- a/razor.c Wed Mar 05 10:46:40 2008 -0500 +++ b/razor.c Wed Mar 05 19:01:51 2008 -0500 @@ -1674,6 +1674,52 @@ return result; } +/* The diff order matters. We should sort the packages so that a + * REMOVE of a package comes before the INSTALL, and so that all + * requires for a package have been installed before the package. + **/ + +void +razor_set_diff(struct razor_set *set, struct razor_set *upstream, + razor_package_callback_t callback, void *data) +{ + struct razor_package_iterator *pi1, *pi2; + struct razor_package *p1, *p2; + const char *name1, *name2, *version1, *version2; + int res; + + pi1 = razor_package_iterator_create(set); + pi2 = razor_package_iterator_create(upstream); + + razor_package_iterator_next(pi1, &p1, &name1, &version1); + razor_package_iterator_next(pi2, &p2, &name2, &version2); + + while (p1 || p2) { + if (p1 && p2) { + res = strcmp(name1, name2); + if (res == 0) + res = versioncmp(version1, version2); + } else { + res = 0; + } + + if (p2 == NULL || res < 0) + callback(name1, version1, NULL, data); + else if (p1 == NULL || res > 0) + callback(name2, NULL, version2, data); + + if (p1 != NULL && res <= 0) + razor_package_iterator_next(pi1, &p1, + &name1, &version1); + if (p2 != NULL && res >= 0) + razor_package_iterator_next(pi2, &p2, + &name2, &version2); + } + + razor_package_iterator_destroy(pi1); + razor_package_iterator_destroy(pi2); +} + struct razor_transaction_resolver { struct razor_set *system, *upstream; @@ -2488,52 +2534,6 @@ array_release(&lost_files); } -/* The diff order matters. We should sort the packages so that a - * REMOVE of a package comes before the INSTALL, and so that all - * requires for a package have been installed before the package. - **/ - -void -razor_set_diff(struct razor_set *set, struct razor_set *upstream, - razor_package_callback_t callback, void *data) -{ - struct razor_package_iterator *pi1, *pi2; - struct razor_package *p1, *p2; - const char *name1, *name2, *version1, *version2; - int res; - - pi1 = razor_package_iterator_create(set); - pi2 = razor_package_iterator_create(upstream); - - razor_package_iterator_next(pi1, &p1, &name1, &version1); - razor_package_iterator_next(pi2, &p2, &name2, &version2); - - while (p1 || p2) { - if (p1 && p2) { - res = strcmp(name1, name2); - if (res == 0) - res = versioncmp(version1, version2); - } else { - res = 0; - } - - if (p2 == NULL || res < 0) - callback(name1, version1, NULL, data); - else if (p1 == NULL || res > 0) - callback(name2, NULL, version2, data); - - if (p1 != NULL && res <= 0) - razor_package_iterator_next(pi1, &p1, - &name1, &version1); - if (p2 != NULL && res >= 0) - razor_package_iterator_next(pi2, &p2, - &name2, &version2); - } - - razor_package_iterator_destroy(pi1); - razor_package_iterator_destroy(pi2); -} - struct razor_transaction * razor_transaction_create(struct razor_set *system, struct razor_set *upstream, int update_count, const char **update_packages,