Also store the package arch in the pacakge set file.
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);