Fix yum importer.
authorKristian Høgsberg <krh@redhat.com>
Thu, 25 Oct 2007 17:19:49 +0000 (13:19 -0400)
committerKristian Høgsberg <krh@redhat.com>
Thu, 25 Oct 2007 17:21:26 +0000 (13:21 -0400)
Makefile
import.c

index c6ba436..848b3bf 100644 (file)
--- 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
index 7af9621..d8a720f 100644 (file)
--- 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);