razor.c
changeset 146 1d4043c9f869
parent 145 097f7b60b97a
child 147 c3eab84160e5
     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,