# HG changeset patch # User Kristian H?gsberg # Date 1193332886 14400 # Node ID 3e42af5305ac880f42d2663286b6ce639ccdb98b # Parent b0e1638a9f964b44d1a482045d1434198d956d4a Fix yum importer. diff -r b0e1638a9f96 -r 3e42af5305ac Makefile --- a/Makefile Thu Oct 25 13:21:18 2007 -0400 +++ b/Makefile Thu Oct 25 13:21:26 2007 -0400 @@ -4,7 +4,7 @@ razor : razor.o import.o sha1.o main.o import : razor primary.xml.gz - zcat primary.xml.gz | ./razor eat-yum + zcat primary.xml.gz | ./razor import-yum primary.xml.gz : wget http://download.fedora.redhat.com/pub/fedora/linux/development/i386/os/repodata/primary.xml.gz diff -r b0e1638a9f96 -r 3e42af5305ac import.c --- a/import.c Thu Oct 25 13:21:18 2007 -0400 +++ b/import.c Thu Oct 25 13:21:26 2007 -0400 @@ -171,7 +171,8 @@ yum_start_element(void *data, const char *name, const char **atts) { struct yum_context *ctx = data; - const char *n, *version; + const char *n, *version, *release; + char buffer[128]; int i; if (strcmp(name, "name") == 0) { @@ -179,11 +180,21 @@ ctx->p = ctx->name; } else if (strcmp(name, "version") == 0) { version = NULL; + release = NULL; for (i = 0; atts[i]; i += 2) { if (strcmp(atts[i], "ver") == 0) version = atts[i + 1]; + else if (strcmp(atts[i], "rel") == 0) + release = atts[i + 1]; } - razor_importer_begin_package(ctx->importer, ctx->name, version); + if (version == NULL || release == NULL) { + fprintf(stderr, "invalid version tag, " + "missing version or release attribute\n"); + return; + } + + snprintf(buffer, sizeof buffer, "%s-%s", version, release); + razor_importer_begin_package(ctx->importer, ctx->name, buffer); } else if (strcmp(name, "rpm:requires") == 0) { ctx->state = YUM_STATE_REQUIRES; } else if (strcmp(name, "rpm:provides") == 0) { @@ -192,11 +203,14 @@ ctx->state != YUM_STATE_BEGIN) { n = NULL; version = NULL; + release = NULL; for (i = 0; atts[i]; i += 2) { if (strcmp(atts[i], "name") == 0) n = atts[i + 1]; else if (strcmp(atts[i], "ver") == 0) version = atts[i + 1]; + else if (strcmp(atts[i], "rel") == 0) + release = atts[i + 1]; } if (n == NULL) { @@ -205,12 +219,20 @@ return; } + if (version && release) + snprintf(buffer, sizeof buffer, + "%s-%s", version, release); + else if (version) + strcpy(buffer, version); + else + buffer[0] = '\0'; + switch (ctx->state) { case YUM_STATE_REQUIRES: - razor_importer_add_requires(ctx->importer, n, version); + razor_importer_add_requires(ctx->importer, n, buffer); break; case YUM_STATE_PROVIDES: - razor_importer_add_provides(ctx->importer, n, version); + razor_importer_add_provides(ctx->importer, n, buffer); break; } } else if (strcmp(name, "file") == 0) { @@ -255,6 +277,7 @@ int len; ctx.importer = razor_importer_new(); + ctx.state = YUM_STATE_BEGIN; parser = XML_ParserCreate(NULL); XML_SetUserData(parser, &ctx);