From: Kristian Høgsberg Date: Thu, 25 Oct 2007 17:19:49 +0000 (-0400) Subject: Fix yum importer. X-Git-Tag: 0.1~298 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=f4eda2807e7b743930c047bd76afcc371b5ce815;p=razor2.git%2F.git Fix yum importer. --- diff --git a/Makefile b/Makefile index c6ba436..848b3bf 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ LDLIBS = -lexpat -g -lrpm 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 --git a/import.c b/import.c index 7af9621..d8a720f 100644 --- a/import.c +++ b/import.c @@ -171,7 +171,8 @@ static void 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 @@ yum_start_element(void *data, const char *name, const char **atts) 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 @@ yum_start_element(void *data, const char *name, const char **atts) 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 @@ yum_start_element(void *data, const char *name, const char **atts) 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 @@ razor_set_create_from_yum_filelist(int fd) int len; ctx.importer = razor_importer_new(); + ctx.state = YUM_STATE_BEGIN; parser = XML_ParserCreate(NULL); XML_SetUserData(parser, &ctx);