Also store the package arch in the pacakge set file.
authorKristian H?gsberg <krh@redhat.com>
Sun Apr 06 23:35:46 2008 -0400 (2008-04-06)
changeset 19255b177b689c0
parent 191 6e94ebe58141
child 193 2d0d5e7dd439
Also store the package arch in the pacakge set file.
main.c
razor.c
razor.h
rpm.c
test-driver.c
yum.c
     1.1 --- a/main.c	Sun Apr 06 19:34:58 2008 -0400
     1.2 +++ b/main.c	Sun Apr 06 23:35:46 2008 -0400
     1.3 @@ -25,7 +25,7 @@
     1.4  	struct razor_set *set;
     1.5  	struct razor_package_iterator *pi;
     1.6  	struct razor_package *package;
     1.7 -	const char *pattern, *name, *version;
     1.8 +	const char *pattern, *name, *version, *arch;
     1.9  	int only_names = 0, i = 0;
    1.10  
    1.11  	if (strcmp(argv[i], "--only-names") == 0) {
    1.12 @@ -36,14 +36,15 @@
    1.13  	pattern = argv[i];
    1.14  	set = razor_set_open(repo_filename);
    1.15  	pi = razor_package_iterator_create(set);
    1.16 -	while (razor_package_iterator_next(pi, &package, &name, &version)) {
    1.17 +	while (razor_package_iterator_next(pi, &package,
    1.18 +					   &name, &version, &arch)) {
    1.19  		if (pattern && fnmatch(pattern, name, 0) != 0)
    1.20  			continue;
    1.21  
    1.22  		if (only_names)
    1.23  			printf("%s\n", name);
    1.24  		else
    1.25 -			printf("%s-%s\n", name, version);
    1.26 +			printf("%s-%s.%s\n", name, version, arch);
    1.27  	}
    1.28  	razor_package_iterator_destroy(pi);
    1.29  	razor_set_destroy(set);
    1.30 @@ -132,14 +133,15 @@
    1.31  	struct razor_set *set;
    1.32  	struct razor_package_iterator *pi;
    1.33  	struct razor_package *package;
    1.34 -	const char *name, *version;
    1.35 +	const char *name, *version, *arch;
    1.36  
    1.37  	set = razor_set_open(repo_filename);
    1.38  	if (set == NULL)
    1.39  		return 1;
    1.40  
    1.41  	pi = razor_package_iterator_create_for_file(set, argv[0]);
    1.42 -	while (razor_package_iterator_next(pi, &package, &name, &version))
    1.43 +	while (razor_package_iterator_next(pi, &package,
    1.44 +					   &name, &version, &arch))
    1.45  		printf("%s-%s\n", name, version);
    1.46  	razor_package_iterator_destroy(pi);
    1.47  
    1.48 @@ -168,11 +170,12 @@
    1.49  {
    1.50  	struct razor_package_iterator *pi;
    1.51  	struct razor_package *package;
    1.52 -	const char *name, *version;
    1.53 +	const char *name, *version, *arch;
    1.54  
    1.55  	pi = razor_package_iterator_create_for_property(set, property);
    1.56 -	while (razor_package_iterator_next(pi, &package, &name, &version))
    1.57 -		printf("%s-%s\n", name, version);
    1.58 +	while (razor_package_iterator_next(pi, &package,
    1.59 +					   &name, &version, &arch))
    1.60 +		printf("%s-%s.%s\n", name, version, arch);
    1.61  	razor_package_iterator_destroy(pi);
    1.62  }
    1.63  
    1.64 @@ -385,7 +388,8 @@
    1.65  
    1.66  static void
    1.67  print_diff(const char *name,
    1.68 -	   const char *old_version, const char *new_version, void *data)
    1.69 +	   const char *old_version, const char *new_version, const char *arch,
    1.70 +	   void *data)
    1.71  {
    1.72  	if (old_version)
    1.73  		printf("removing %s %s\n", name, old_version);
    1.74 @@ -499,14 +503,15 @@
    1.75  {
    1.76  	struct razor_package_iterator *pi;
    1.77  	struct razor_package *package;
    1.78 -	const char *name, *version;
    1.79 +	const char *name, *version, *arch;
    1.80  	char **packages;
    1.81  	int i;
    1.82  
    1.83  	packages = malloc(count * sizeof *packages);
    1.84  	pi = razor_package_iterator_create(set);
    1.85  	i = 0;
    1.86 -	while (razor_package_iterator_next(pi, &package, &name, &version))
    1.87 +	while (razor_package_iterator_next(pi, &package,
    1.88 +					   &name, &version, &arch))
    1.89  		packages[i++] = strdup(name);
    1.90  	razor_package_iterator_destroy(pi);
    1.91  
    1.92 @@ -629,7 +634,7 @@
    1.93  	struct razor_set *set;
    1.94  	struct razor_package_iterator *pi;
    1.95  	struct razor_package *package;
    1.96 -	const char *pattern = argv[0], *name, *version;
    1.97 +	const char *pattern = argv[0], *name, *version, *arch;
    1.98  	char url[256], file[256];
    1.99  	CURL *curl;
   1.100  
   1.101 @@ -639,7 +644,8 @@
   1.102  
   1.103  	set = razor_set_open(rawhide_repo_filename);
   1.104  	pi = razor_package_iterator_create(set);
   1.105 -	while (razor_package_iterator_next(pi, &package, &name, &version)) {
   1.106 +	while (razor_package_iterator_next(pi, &package,
   1.107 +					   &name, &version, &arch)) {
   1.108  		if (pattern && fnmatch(pattern, name, 0) != 0)
   1.109  			continue;
   1.110  
     2.1 --- a/razor.c	Sun Apr 06 19:34:58 2008 -0400
     2.2 +++ b/razor.c	Sun Apr 06 23:35:46 2008 -0400
     2.3 @@ -45,6 +45,7 @@
     2.4  	uint name  : 24;
     2.5  	uint flags : 8;
     2.6  	uint32_t version;
     2.7 +	uint32_t arch;
     2.8  	struct list_head properties;
     2.9  	struct list_head files;
    2.10  };
    2.11 @@ -268,7 +269,9 @@
    2.12  
    2.13  void
    2.14  razor_importer_begin_package(struct razor_importer *importer,
    2.15 -			     const char *name, const char *version)
    2.16 +			     const char *name,
    2.17 +			     const char *version,
    2.18 +			     const char *arch)
    2.19  {
    2.20  	struct razor_package *p;
    2.21  
    2.22 @@ -276,6 +279,7 @@
    2.23  	p->name = hashtable_tokenize(&importer->table, name);
    2.24  	p->flags = 0;
    2.25  	p->version = hashtable_tokenize(&importer->table, version);
    2.26 +	p->arch = hashtable_tokenize(&importer->table, arch);
    2.27  
    2.28  	importer->package = p;
    2.29  	array_init(&importer->properties);
    2.30 @@ -816,7 +820,9 @@
    2.31  int
    2.32  razor_package_iterator_next(struct razor_package_iterator *pi,
    2.33  			    struct razor_package **package,
    2.34 -			    const char **name, const char **version)
    2.35 +			    const char **name,
    2.36 +			    const char **version,
    2.37 +			    const char **arch)
    2.38  {
    2.39  	char *pool;
    2.40  	int valid;
    2.41 @@ -838,6 +844,7 @@
    2.42  		*package = p;
    2.43  		*name = &pool[p->name];
    2.44  		*version = &pool[p->version];
    2.45 +		*arch = &pool[p->arch];
    2.46  	} else {
    2.47  		*package = NULL;
    2.48  	}
    2.49 @@ -856,10 +863,10 @@
    2.50  {
    2.51  	struct razor_package_iterator *pi;
    2.52  	struct razor_package *p;
    2.53 -	const char *name, *version;
    2.54 +	const char *name, *version, *arch;
    2.55  
    2.56  	pi = razor_package_iterator_create(set);
    2.57 -	while (razor_package_iterator_next(pi, &p, &name, &version)) {
    2.58 +	while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
    2.59  		if (strcmp(package, name) == 0)
    2.60  			break;
    2.61  	}
    2.62 @@ -1234,6 +1241,8 @@
    2.63  	p->flags = flags;
    2.64  	p->version = hashtable_tokenize(&merger->table,
    2.65  					&pool[package->version]);
    2.66 +	p->arch = hashtable_tokenize(&merger->table,
    2.67 +				     &pool[package->arch]);
    2.68  
    2.69  	p->properties = package->properties;
    2.70  	r = list_first(&package->properties, &source->set->property_pool);
    2.71 @@ -1681,14 +1690,14 @@
    2.72  {
    2.73  	struct razor_package_iterator *pi1, *pi2;
    2.74  	struct razor_package *p1, *p2;
    2.75 -	const char *name1, *name2, *version1, *version2;
    2.76 +	const char *name1, *name2, *version1, *version2, *arch1, *arch2;
    2.77  	int res;
    2.78  
    2.79  	pi1 = razor_package_iterator_create(set);
    2.80  	pi2 = razor_package_iterator_create(upstream);
    2.81  
    2.82 -	razor_package_iterator_next(pi1, &p1, &name1, &version1);
    2.83 -	razor_package_iterator_next(pi2, &p2, &name2, &version2);
    2.84 +	razor_package_iterator_next(pi1, &p1, &name1, &version1, &arch1);
    2.85 +	razor_package_iterator_next(pi2, &p2, &name2, &version2, &arch2);
    2.86  
    2.87  	while (p1 || p2) {
    2.88  		if (p1 && p2) {
    2.89 @@ -1700,16 +1709,16 @@
    2.90  		}
    2.91  
    2.92  		if (p2 == NULL || res < 0)
    2.93 -			callback(name1, version1, NULL, data);
    2.94 +			callback(name1, version1, NULL, arch1, data);
    2.95  		else if (p1 == NULL || res > 0)
    2.96 -			callback(name2, NULL, version2, data);
    2.97 +			callback(name2, NULL, version2, arch2, data);
    2.98  
    2.99  		if (p1 != NULL && res <= 0)
   2.100  			razor_package_iterator_next(pi1, &p1,
   2.101 -						    &name1, &version1);
   2.102 +						    &name1, &version1, &arch1);
   2.103  		if (p2 != NULL && res >= 0)
   2.104  			razor_package_iterator_next(pi2, &p2,
   2.105 -						    &name2, &version2);
   2.106 +						    &name2, &version2, &arch2);
   2.107  	}
   2.108  
   2.109  	razor_package_iterator_destroy(pi1);
     3.1 --- a/razor.h	Sun Apr 06 19:34:58 2008 -0400
     3.2 +++ b/razor.h	Sun Apr 06 23:35:46 2008 -0400
     3.3 @@ -43,7 +43,9 @@
     3.4  
     3.5  int razor_package_iterator_next(struct razor_package_iterator *pi,
     3.6  				struct razor_package **package,
     3.7 -				const char **name, const char **version);
     3.8 +				const char **name,
     3.9 +				const char **version,
    3.10 +				const char **arch);
    3.11  void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    3.12  
    3.13  struct razor_property_iterator;
    3.14 @@ -67,6 +69,7 @@
    3.15  typedef void (*razor_package_callback_t)(const char *name,
    3.16  					 const char *old_version,
    3.17  					 const char *new_version,
    3.18 +					 const char *arch,
    3.19  					 void *data);
    3.20  void
    3.21  razor_set_diff(struct razor_set *set, struct razor_set *upstream,
    3.22 @@ -130,7 +133,9 @@
    3.23  struct razor_importer *razor_importer_new(void);
    3.24  void razor_importer_destroy(struct razor_importer *importer);
    3.25  void razor_importer_begin_package(struct razor_importer *importer,
    3.26 -				  const char *name, const char *version);
    3.27 +				  const char *name,
    3.28 +				  const char *version,
    3.29 +				  const char *arch);
    3.30  void razor_importer_add_property(struct razor_importer *importer,
    3.31  				 const char *name,
    3.32  				 enum razor_version_relation relation,
     4.1 --- a/rpm.c	Sun Apr 06 19:34:58 2008 -0400
     4.2 +++ b/rpm.c	Sun Apr 06 23:35:46 2008 -0400
     4.3 @@ -542,7 +542,7 @@
     4.4  int
     4.5  razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
     4.6  {
     4.7 -	const char *name, *version, *release;
     4.8 +	const char *name, *version, *release, *arch;
     4.9  	const uint_32 *epoch;
    4.10  	char evr[128], buf[16];
    4.11  
    4.12 @@ -550,6 +550,7 @@
    4.13  	epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
    4.14  	version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
    4.15  	release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
    4.16 +	arch = razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL);
    4.17  
    4.18  	if (epoch) {
    4.19  		snprintf(buf, sizeof buf, "%u", ntohl(*epoch));
    4.20 @@ -557,7 +558,7 @@
    4.21  	} else {
    4.22  		razor_build_evr(evr, sizeof evr, NULL, version, release);
    4.23  	}
    4.24 -	razor_importer_begin_package(importer, name, evr);
    4.25 +	razor_importer_begin_package(importer, name, evr, arch);
    4.26  
    4.27  	import_properties(importer, RAZOR_PROPERTY_REQUIRES, rpm,
    4.28  			  RPMTAG_REQUIRENAME,
    4.29 @@ -621,7 +622,7 @@
    4.30  	rpmdbMatchIterator iter;
    4.31  	Header h;
    4.32  	int_32 type, count, i;
    4.33 -	union rpm_entry name, epoch, version, release;
    4.34 +	union rpm_entry name, epoch, version, release, arch;
    4.35  	union rpm_entry basenames, dirnames, dirindexes;
    4.36  	char filename[PATH_MAX], evr[128], buf[16];
    4.37  	rpmdb db;
    4.38 @@ -641,6 +642,7 @@
    4.39  		headerGetEntry(h, RPMTAG_EPOCH, &type, &epoch.p, &count);
    4.40  		headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count);
    4.41  		headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count);
    4.42 +		headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count);
    4.43  
    4.44  		if (epoch.flags != NULL) {
    4.45  			snprintf(buf, sizeof buf, "%u", *epoch.flags);
    4.46 @@ -651,7 +653,8 @@
    4.47  					NULL, version.string, release.string);
    4.48  		}
    4.49  
    4.50 -		razor_importer_begin_package(importer, name.string, evr);
    4.51 +		razor_importer_begin_package(importer,
    4.52 +					     name.string, evr, arch.string);
    4.53  
    4.54  		add_properties(importer, RAZOR_PROPERTY_REQUIRES, h,
    4.55  			       RPMTAG_REQUIRENAME,
     5.1 --- a/test-driver.c	Sun Apr 06 19:34:58 2008 -0400
     5.2 +++ b/test-driver.c	Sun Apr 06 23:35:46 2008 -0400
     5.3 @@ -168,13 +168,17 @@
     5.4  {
     5.5  	const char *name = NULL, *version = NULL, *arch = NULL;
     5.6  
     5.7 -	get_atts(atts, "name", &name, "version", &version, "arch", &arch, NULL);
     5.8 +	get_atts(atts, "name", &name,
     5.9 +		 "version", &version,
    5.10 +		 "arch", &arch,
    5.11 +		 NULL);
    5.12 +
    5.13  	if (!name) {
    5.14  		fprintf(stderr, "  package with no name\n");
    5.15  		exit(1);
    5.16  	}
    5.17  
    5.18 -	razor_importer_begin_package(ctx->importer, name, version);
    5.19 +	razor_importer_begin_package(ctx->importer, name, version, arch);
    5.20  	razor_importer_add_property(ctx->importer, name,
    5.21  				    RAZOR_VERSION_EQUAL, version,
    5.22  				    RAZOR_PROPERTY_PROVIDES);
    5.23 @@ -307,7 +311,9 @@
    5.24  
    5.25  static void
    5.26  diff_callback(const char *name,
    5.27 -	      const char *old_version, const char *new_version,
    5.28 +	      const char *old_version,
    5.29 +	      const char *new_version,
    5.30 +	      const char *arch,
    5.31  	      void *data)
    5.32  {
    5.33  	struct test_context *ctx = data;
     6.1 --- a/yum.c	Sun Apr 06 19:34:58 2008 -0400
     6.2 +++ b/yum.c	Sun Apr 06 23:35:46 2008 -0400
     6.3 @@ -17,6 +17,7 @@
     6.4  enum {
     6.5  	YUM_STATE_BEGIN,
     6.6  	YUM_STATE_PACKAGE_NAME,
     6.7 +	YUM_STATE_PACKAGE_ARCH,
     6.8  	YUM_STATE_CHECKSUM,
     6.9  	YUM_STATE_REQUIRES,
    6.10  	YUM_STATE_PROVIDES,
    6.11 @@ -32,7 +33,7 @@
    6.12  
    6.13  	struct razor_importer *importer;
    6.14  	struct import_property_context *current_property_context;
    6.15 -	char name[256], buffer[512], *p;
    6.16 +	char name[256], arch[64], buffer[512], *p;
    6.17  	char pkgid[128];
    6.18  	int state;
    6.19  };
    6.20 @@ -69,6 +70,9 @@
    6.21  	if (strcmp(name, "name") == 0) {
    6.22  		ctx->state = YUM_STATE_PACKAGE_NAME;
    6.23  		ctx->p = ctx->name;
    6.24 +	} else if (strcmp(name, "arch") == 0) {
    6.25 +		ctx->state = YUM_STATE_PACKAGE_ARCH;
    6.26 +		ctx->p = ctx->arch;
    6.27  	} else if (strcmp(name, "version") == 0) {
    6.28  		epoch = NULL;
    6.29  		version = NULL;
    6.30 @@ -88,7 +92,8 @@
    6.31  		}
    6.32  
    6.33  		razor_build_evr(buffer, sizeof buffer, epoch, version, release);
    6.34 -		razor_importer_begin_package(ctx->importer, ctx->name, buffer);
    6.35 +		razor_importer_begin_package(ctx->importer,
    6.36 +					     ctx->name, buffer, ctx->arch);
    6.37  	} else if (strcmp(name, "checksum") == 0) {
    6.38  		ctx->p = ctx->pkgid;
    6.39  		ctx->state = YUM_STATE_CHECKSUM;
    6.40 @@ -163,6 +168,7 @@
    6.41  
    6.42  	switch (ctx->state) {
    6.43  	case YUM_STATE_PACKAGE_NAME:
    6.44 +	case YUM_STATE_PACKAGE_ARCH:
    6.45  	case YUM_STATE_CHECKSUM:
    6.46  	case YUM_STATE_FILE:
    6.47  		ctx->state = YUM_STATE_BEGIN;
    6.48 @@ -182,6 +188,7 @@
    6.49  
    6.50  	switch (ctx->state) {
    6.51  	case YUM_STATE_PACKAGE_NAME:
    6.52 +	case YUM_STATE_PACKAGE_ARCH:
    6.53  	case YUM_STATE_CHECKSUM:
    6.54  	case YUM_STATE_FILE:
    6.55  		memcpy(ctx->p, s, len);