Fix yum importer.
1.1 --- a/Makefile Thu Oct 25 13:21:18 2007 -0400
1.2 +++ b/Makefile Thu Oct 25 13:21:26 2007 -0400
1.3 @@ -4,7 +4,7 @@
1.4 razor : razor.o import.o sha1.o main.o
1.5
1.6 import : razor primary.xml.gz
1.7 - zcat primary.xml.gz | ./razor eat-yum
1.8 + zcat primary.xml.gz | ./razor import-yum
1.9
1.10 primary.xml.gz :
1.11 wget http://download.fedora.redhat.com/pub/fedora/linux/development/i386/os/repodata/primary.xml.gz
2.1 --- a/import.c Thu Oct 25 13:21:18 2007 -0400
2.2 +++ b/import.c Thu Oct 25 13:21:26 2007 -0400
2.3 @@ -171,7 +171,8 @@
2.4 yum_start_element(void *data, const char *name, const char **atts)
2.5 {
2.6 struct yum_context *ctx = data;
2.7 - const char *n, *version;
2.8 + const char *n, *version, *release;
2.9 + char buffer[128];
2.10 int i;
2.11
2.12 if (strcmp(name, "name") == 0) {
2.13 @@ -179,11 +180,21 @@
2.14 ctx->p = ctx->name;
2.15 } else if (strcmp(name, "version") == 0) {
2.16 version = NULL;
2.17 + release = NULL;
2.18 for (i = 0; atts[i]; i += 2) {
2.19 if (strcmp(atts[i], "ver") == 0)
2.20 version = atts[i + 1];
2.21 + else if (strcmp(atts[i], "rel") == 0)
2.22 + release = atts[i + 1];
2.23 }
2.24 - razor_importer_begin_package(ctx->importer, ctx->name, version);
2.25 + if (version == NULL || release == NULL) {
2.26 + fprintf(stderr, "invalid version tag, "
2.27 + "missing version or release attribute\n");
2.28 + return;
2.29 + }
2.30 +
2.31 + snprintf(buffer, sizeof buffer, "%s-%s", version, release);
2.32 + razor_importer_begin_package(ctx->importer, ctx->name, buffer);
2.33 } else if (strcmp(name, "rpm:requires") == 0) {
2.34 ctx->state = YUM_STATE_REQUIRES;
2.35 } else if (strcmp(name, "rpm:provides") == 0) {
2.36 @@ -192,11 +203,14 @@
2.37 ctx->state != YUM_STATE_BEGIN) {
2.38 n = NULL;
2.39 version = NULL;
2.40 + release = NULL;
2.41 for (i = 0; atts[i]; i += 2) {
2.42 if (strcmp(atts[i], "name") == 0)
2.43 n = atts[i + 1];
2.44 else if (strcmp(atts[i], "ver") == 0)
2.45 version = atts[i + 1];
2.46 + else if (strcmp(atts[i], "rel") == 0)
2.47 + release = atts[i + 1];
2.48 }
2.49
2.50 if (n == NULL) {
2.51 @@ -205,12 +219,20 @@
2.52 return;
2.53 }
2.54
2.55 + if (version && release)
2.56 + snprintf(buffer, sizeof buffer,
2.57 + "%s-%s", version, release);
2.58 + else if (version)
2.59 + strcpy(buffer, version);
2.60 + else
2.61 + buffer[0] = '\0';
2.62 +
2.63 switch (ctx->state) {
2.64 case YUM_STATE_REQUIRES:
2.65 - razor_importer_add_requires(ctx->importer, n, version);
2.66 + razor_importer_add_requires(ctx->importer, n, buffer);
2.67 break;
2.68 case YUM_STATE_PROVIDES:
2.69 - razor_importer_add_provides(ctx->importer, n, version);
2.70 + razor_importer_add_provides(ctx->importer, n, buffer);
2.71 break;
2.72 }
2.73 } else if (strcmp(name, "file") == 0) {
2.74 @@ -255,6 +277,7 @@
2.75 int len;
2.76
2.77 ctx.importer = razor_importer_new();
2.78 + ctx.state = YUM_STATE_BEGIN;
2.79
2.80 parser = XML_ParserCreate(NULL);
2.81 XML_SetUserData(parser, &ctx);