razor.c
changeset 238 d19dc7950c76
parent 237 715b18dc94f3
child 239 7a1b0282ae3c
     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