From: Kristian Høgsberg Date: Mon, 7 Apr 2008 03:35:46 +0000 (-0400) Subject: Also store the package arch in the pacakge set file. X-Git-Tag: 0.1~172 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=57a0e7b9642610583933002cf5503458d5df2be9;p=razor.git Also store the package arch in the pacakge set file. --- diff --git a/main.c b/main.c index 58277cd..66ff944 100644 --- a/main.c +++ b/main.c @@ -25,7 +25,7 @@ command_list(int argc, const char *argv[]) struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; - const char *pattern, *name, *version; + const char *pattern, *name, *version, *arch; int only_names = 0, i = 0; if (strcmp(argv[i], "--only-names") == 0) { @@ -36,14 +36,15 @@ command_list(int argc, const char *argv[]) pattern = argv[i]; set = razor_set_open(repo_filename); pi = razor_package_iterator_create(set); - while (razor_package_iterator_next(pi, &package, &name, &version)) { + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) { if (pattern && fnmatch(pattern, name, 0) != 0) continue; if (only_names) printf("%s\n", name); else - printf("%s-%s\n", name, version); + printf("%s-%s.%s\n", name, version, arch); } razor_package_iterator_destroy(pi); razor_set_destroy(set); @@ -132,14 +133,15 @@ command_list_file_packages(int argc, const char *argv[]) struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; - const char *name, *version; + const char *name, *version, *arch; set = razor_set_open(repo_filename); if (set == NULL) return 1; pi = razor_package_iterator_create_for_file(set, argv[0]); - while (razor_package_iterator_next(pi, &package, &name, &version)) + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) printf("%s-%s\n", name, version); razor_package_iterator_destroy(pi); @@ -168,11 +170,12 @@ list_packages_for_property(struct razor_set *set, { struct razor_package_iterator *pi; struct razor_package *package; - const char *name, *version; + const char *name, *version, *arch; pi = razor_package_iterator_create_for_property(set, property); - while (razor_package_iterator_next(pi, &package, &name, &version)) - printf("%s-%s\n", name, version); + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) + printf("%s-%s.%s\n", name, version, arch); razor_package_iterator_destroy(pi); } @@ -385,7 +388,8 @@ command_remove(int argc, const char *argv[]) static void print_diff(const char *name, - const char *old_version, const char *new_version, void *data) + const char *old_version, const char *new_version, const char *arch, + void *data) { if (old_version) printf("removing %s %s\n", name, old_version); @@ -499,14 +503,15 @@ list_packages(int count, struct razor_set *set) { struct razor_package_iterator *pi; struct razor_package *package; - const char *name, *version; + const char *name, *version, *arch; char **packages; int i; packages = malloc(count * sizeof *packages); pi = razor_package_iterator_create(set); i = 0; - while (razor_package_iterator_next(pi, &package, &name, &version)) + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) packages[i++] = strdup(name); razor_package_iterator_destroy(pi); @@ -629,7 +634,7 @@ command_download(int argc, const char *argv[]) struct razor_set *set; struct razor_package_iterator *pi; struct razor_package *package; - const char *pattern = argv[0], *name, *version; + const char *pattern = argv[0], *name, *version, *arch; char url[256], file[256]; CURL *curl; @@ -639,7 +644,8 @@ command_download(int argc, const char *argv[]) set = razor_set_open(rawhide_repo_filename); pi = razor_package_iterator_create(set); - while (razor_package_iterator_next(pi, &package, &name, &version)) { + while (razor_package_iterator_next(pi, &package, + &name, &version, &arch)) { if (pattern && fnmatch(pattern, name, 0) != 0) continue; diff --git a/razor.c b/razor.c index 1b9219e..def7174 100644 --- a/razor.c +++ b/razor.c @@ -45,6 +45,7 @@ struct razor_package { uint name : 24; uint flags : 8; uint32_t version; + uint32_t arch; struct list_head properties; struct list_head files; }; @@ -268,7 +269,9 @@ razor_build_evr(char *evr_buf, int size, const char *epoch, void razor_importer_begin_package(struct razor_importer *importer, - const char *name, const char *version) + const char *name, + const char *version, + const char *arch) { struct razor_package *p; @@ -276,6 +279,7 @@ razor_importer_begin_package(struct razor_importer *importer, p->name = hashtable_tokenize(&importer->table, name); p->flags = 0; p->version = hashtable_tokenize(&importer->table, version); + p->arch = hashtable_tokenize(&importer->table, arch); importer->package = p; array_init(&importer->properties); @@ -816,7 +820,9 @@ razor_package_iterator_create_for_property(struct razor_set *set, int razor_package_iterator_next(struct razor_package_iterator *pi, struct razor_package **package, - const char **name, const char **version) + const char **name, + const char **version, + const char **arch) { char *pool; int valid; @@ -838,6 +844,7 @@ razor_package_iterator_next(struct razor_package_iterator *pi, *package = p; *name = &pool[p->name]; *version = &pool[p->version]; + *arch = &pool[p->arch]; } else { *package = NULL; } @@ -856,10 +863,10 @@ razor_set_get_package(struct razor_set *set, const char *package) { struct razor_package_iterator *pi; struct razor_package *p; - const char *name, *version; + const char *name, *version, *arch; pi = razor_package_iterator_create(set); - while (razor_package_iterator_next(pi, &p, &name, &version)) { + while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) { if (strcmp(package, name) == 0) break; } @@ -1234,6 +1241,8 @@ add_package(struct razor_merger *merger, p->flags = flags; p->version = hashtable_tokenize(&merger->table, &pool[package->version]); + p->arch = hashtable_tokenize(&merger->table, + &pool[package->arch]); p->properties = package->properties; r = list_first(&package->properties, &source->set->property_pool); @@ -1681,14 +1690,14 @@ razor_set_diff(struct razor_set *set, struct razor_set *upstream, { struct razor_package_iterator *pi1, *pi2; struct razor_package *p1, *p2; - const char *name1, *name2, *version1, *version2; + const char *name1, *name2, *version1, *version2, *arch1, *arch2; 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); + razor_package_iterator_next(pi1, &p1, &name1, &version1, &arch1); + razor_package_iterator_next(pi2, &p2, &name2, &version2, &arch2); while (p1 || p2) { if (p1 && p2) { @@ -1700,16 +1709,16 @@ razor_set_diff(struct razor_set *set, struct razor_set *upstream, } if (p2 == NULL || res < 0) - callback(name1, version1, NULL, data); + callback(name1, version1, NULL, arch1, data); else if (p1 == NULL || res > 0) - callback(name2, NULL, version2, data); + callback(name2, NULL, version2, arch2, data); if (p1 != NULL && res <= 0) razor_package_iterator_next(pi1, &p1, - &name1, &version1); + &name1, &version1, &arch1); if (p2 != NULL && res >= 0) razor_package_iterator_next(pi2, &p2, - &name2, &version2); + &name2, &version2, &arch2); } razor_package_iterator_destroy(pi1); diff --git a/razor.h b/razor.h index 7f17fd5..3ff813f 100644 --- a/razor.h +++ b/razor.h @@ -43,7 +43,9 @@ razor_package_iterator_create_for_file(struct razor_set *set, int razor_package_iterator_next(struct razor_package_iterator *pi, struct razor_package **package, - const char **name, const char **version); + const char **name, + const char **version, + const char **arch); void razor_package_iterator_destroy(struct razor_package_iterator *pi); struct razor_property_iterator; @@ -67,6 +69,7 @@ void razor_set_list_unsatisfied(struct razor_set *set); typedef void (*razor_package_callback_t)(const char *name, const char *old_version, const char *new_version, + const char *arch, void *data); void razor_set_diff(struct razor_set *set, struct razor_set *upstream, @@ -130,7 +133,9 @@ struct razor_rpm; struct razor_importer *razor_importer_new(void); void razor_importer_destroy(struct razor_importer *importer); void razor_importer_begin_package(struct razor_importer *importer, - const char *name, const char *version); + const char *name, + const char *version, + const char *arch); void razor_importer_add_property(struct razor_importer *importer, const char *name, enum razor_version_relation relation, diff --git a/rpm.c b/rpm.c index 751253f..ea199c5 100644 --- a/rpm.c +++ b/rpm.c @@ -542,7 +542,7 @@ razor_rpm_close(struct razor_rpm *rpm) int razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm) { - const char *name, *version, *release; + const char *name, *version, *release, *arch; const uint_32 *epoch; char evr[128], buf[16]; @@ -550,6 +550,7 @@ razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm) epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL); version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL); release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL); + arch = razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL); if (epoch) { snprintf(buf, sizeof buf, "%u", ntohl(*epoch)); @@ -557,7 +558,7 @@ razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm) } else { razor_build_evr(evr, sizeof evr, NULL, version, release); } - razor_importer_begin_package(importer, name, evr); + razor_importer_begin_package(importer, name, evr, arch); import_properties(importer, RAZOR_PROPERTY_REQUIRES, rpm, RPMTAG_REQUIRENAME, @@ -621,7 +622,7 @@ razor_set_create_from_rpmdb(void) rpmdbMatchIterator iter; Header h; int_32 type, count, i; - union rpm_entry name, epoch, version, release; + union rpm_entry name, epoch, version, release, arch; union rpm_entry basenames, dirnames, dirindexes; char filename[PATH_MAX], evr[128], buf[16]; rpmdb db; @@ -641,6 +642,7 @@ razor_set_create_from_rpmdb(void) headerGetEntry(h, RPMTAG_EPOCH, &type, &epoch.p, &count); headerGetEntry(h, RPMTAG_VERSION, &type, &version.p, &count); headerGetEntry(h, RPMTAG_RELEASE, &type, &release.p, &count); + headerGetEntry(h, RPMTAG_ARCH, &type, &arch.p, &count); if (epoch.flags != NULL) { snprintf(buf, sizeof buf, "%u", *epoch.flags); @@ -651,7 +653,8 @@ razor_set_create_from_rpmdb(void) NULL, version.string, release.string); } - razor_importer_begin_package(importer, name.string, evr); + razor_importer_begin_package(importer, + name.string, evr, arch.string); add_properties(importer, RAZOR_PROPERTY_REQUIRES, h, RPMTAG_REQUIRENAME, diff --git a/test-driver.c b/test-driver.c index 6eeb5ac..bdfe0e5 100644 --- a/test-driver.c +++ b/test-driver.c @@ -168,13 +168,17 @@ start_package(struct test_context *ctx, const char **atts) { const char *name = NULL, *version = NULL, *arch = NULL; - get_atts(atts, "name", &name, "version", &version, "arch", &arch, NULL); + get_atts(atts, "name", &name, + "version", &version, + "arch", &arch, + NULL); + if (!name) { fprintf(stderr, " package with no name\n"); exit(1); } - razor_importer_begin_package(ctx->importer, name, version); + razor_importer_begin_package(ctx->importer, name, version, arch); razor_importer_add_property(ctx->importer, name, RAZOR_VERSION_EQUAL, version, RAZOR_PROPERTY_PROVIDES); @@ -307,7 +311,9 @@ start_result(struct test_context *ctx, const char **atts) static void diff_callback(const char *name, - const char *old_version, const char *new_version, + const char *old_version, + const char *new_version, + const char *arch, void *data) { struct test_context *ctx = data; diff --git a/yum.c b/yum.c index eefc266..d6d4ec0 100644 --- a/yum.c +++ b/yum.c @@ -17,6 +17,7 @@ enum { YUM_STATE_BEGIN, YUM_STATE_PACKAGE_NAME, + YUM_STATE_PACKAGE_ARCH, YUM_STATE_CHECKSUM, YUM_STATE_REQUIRES, YUM_STATE_PROVIDES, @@ -32,7 +33,7 @@ struct yum_context { struct razor_importer *importer; struct import_property_context *current_property_context; - char name[256], buffer[512], *p; + char name[256], arch[64], buffer[512], *p; char pkgid[128]; int state; }; @@ -69,6 +70,9 @@ yum_primary_start_element(void *data, const char *name, const char **atts) if (strcmp(name, "name") == 0) { ctx->state = YUM_STATE_PACKAGE_NAME; ctx->p = ctx->name; + } else if (strcmp(name, "arch") == 0) { + ctx->state = YUM_STATE_PACKAGE_ARCH; + ctx->p = ctx->arch; } else if (strcmp(name, "version") == 0) { epoch = NULL; version = NULL; @@ -88,7 +92,8 @@ yum_primary_start_element(void *data, const char *name, const char **atts) } razor_build_evr(buffer, sizeof buffer, epoch, version, release); - razor_importer_begin_package(ctx->importer, ctx->name, buffer); + razor_importer_begin_package(ctx->importer, + ctx->name, buffer, ctx->arch); } else if (strcmp(name, "checksum") == 0) { ctx->p = ctx->pkgid; ctx->state = YUM_STATE_CHECKSUM; @@ -163,6 +168,7 @@ yum_primary_end_element (void *data, const char *name) switch (ctx->state) { case YUM_STATE_PACKAGE_NAME: + case YUM_STATE_PACKAGE_ARCH: case YUM_STATE_CHECKSUM: case YUM_STATE_FILE: ctx->state = YUM_STATE_BEGIN; @@ -182,6 +188,7 @@ yum_character_data (void *data, const XML_Char *s, int len) switch (ctx->state) { case YUM_STATE_PACKAGE_NAME: + case YUM_STATE_PACKAGE_ARCH: case YUM_STATE_CHECKSUM: case YUM_STATE_FILE: memcpy(ctx->p, s, len);