Fix yum importer.
authorKristian H?gsberg <krh@redhat.com>
Thu Oct 25 13:21:26 2007 -0400 (2007-10-25)
changeset 623e42af5305ac
parent 61 b0e1638a9f96
child 63 e5479fd779af
Fix yum importer.
Makefile
import.c
     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);