import.c
changeset 30 702c01e59497
parent 28 c8958f67afd8
child 31 50fd9002d5ee
     1.1 --- a/import.c	Wed Sep 19 14:09:03 2007 -0400
     1.2 +++ b/import.c	Wed Sep 19 15:26:25 2007 -0400
     1.3 @@ -15,7 +15,7 @@
     1.4  #include "razor.h"
     1.5  
     1.6  static void
     1.7 -parse_package(struct import_context *ctx, const char **atts, void *data)
     1.8 +parse_package(struct razor_importer *importer, const char **atts, void *data)
     1.9  {
    1.10  	const char *name = NULL, *version = NULL;
    1.11  	int i;
    1.12 @@ -33,11 +33,15 @@
    1.13  		return;
    1.14  	}
    1.15  
    1.16 -	import_context_add_package(ctx, name, version);
    1.17 +	razor_importer_begin_package(importer, name, version);
    1.18  }
    1.19  
    1.20 +enum {
    1.21 +	RZR_REQUIRES, RZR_PROVIDES
    1.22 +};
    1.23 +
    1.24  static void
    1.25 -parse_property(struct import_context *ctx, const char **atts, void *data)
    1.26 +parse_property(struct razor_importer *importer, const char **atts, void *data)
    1.27  {
    1.28  	const char *name = NULL, *version = NULL;
    1.29  	int i;
    1.30 @@ -54,33 +58,40 @@
    1.31  		return;
    1.32  	}
    1.33  
    1.34 -	import_context_add_property(ctx, data, name, version);
    1.35 +	switch ((int) data) {
    1.36 +	case RZR_REQUIRES:
    1.37 +		razor_importer_add_requires(importer, name, version);
    1.38 +		break;
    1.39 +	case RZR_PROVIDES:
    1.40 +		razor_importer_add_provides(importer, name, version);
    1.41 +		break;
    1.42 +	}
    1.43  }
    1.44  
    1.45  static void
    1.46  start_element(void *data, const char *name, const char **atts)
    1.47  {
    1.48 -	struct import_context *ctx = data;
    1.49 +	struct razor_importer *importer = data;
    1.50  
    1.51  	if (strcmp(name, "package") == 0)
    1.52 -		parse_package(ctx, atts, NULL);
    1.53 +		parse_package(importer, atts, NULL);
    1.54  	else if (strcmp(name, "requires") == 0)
    1.55 -		parse_property(ctx, atts, &ctx->requires);
    1.56 +		parse_property(importer, atts, (void *) RZR_REQUIRES);
    1.57  	else if (strcmp(name, "provides") == 0)
    1.58 -		parse_property(ctx, atts, &ctx->provides);
    1.59 +		parse_property(importer, atts, (void*) RZR_PROVIDES);
    1.60  }
    1.61  
    1.62  static void
    1.63  end_element (void *data, const char *name)
    1.64  {
    1.65 -	struct import_context *ctx = data;
    1.66 +	struct razor_importer *importer = data;
    1.67  
    1.68  	if (strcmp(name, "package") == 0)
    1.69 -		import_context_finish_package(ctx);
    1.70 +		razor_importer_finish_package(importer);
    1.71  }
    1.72  
    1.73  static int
    1.74 -import_rzr_file(struct import_context *ctx, const char *filename)
    1.75 +import_rzr_file(struct razor_importer *importer, const char *filename)
    1.76  {
    1.77  	SHA_CTX sha1;
    1.78  	XML_Parser parser;
    1.79 @@ -97,7 +108,7 @@
    1.80  		return -1;
    1.81  
    1.82  	parser = XML_ParserCreate(NULL);
    1.83 -	XML_SetUserData(parser, ctx);
    1.84 +	XML_SetUserData(parser, importer);
    1.85  	XML_SetElementHandler(parser, start_element, end_element);
    1.86  	if (XML_Parse(parser, p, stat.st_size, 1) == XML_STATUS_ERROR) {
    1.87  		fprintf(stderr,
    1.88 @@ -124,30 +135,32 @@
    1.89  struct razor_set *
    1.90  razor_import_rzr_files(int count, const char *files[])
    1.91  {
    1.92 -	struct import_context ctx;
    1.93 +	struct razor_importer *importer;
    1.94  	int i;
    1.95  
    1.96 -	razor_prepare_import(&ctx);
    1.97 +	importer = razor_importer_new();
    1.98  
    1.99  	for (i = 0; i < count; i++) {
   1.100 -		if (import_rzr_file(&ctx, files[i]) < 0) {
   1.101 +		if (import_rzr_file(importer, files[i]) < 0) {
   1.102  			fprintf(stderr, "failed to import %s\n", files[i]);
   1.103  			exit(-1);
   1.104  		}
   1.105  	}
   1.106  
   1.107 -	return razor_finish_import(&ctx);
   1.108 +	return razor_importer_finish(importer);
   1.109  }
   1.110  
   1.111  /* Import a yum filelist as a razor package set. */
   1.112  
   1.113  enum {
   1.114  	YUM_STATE_BEGIN,
   1.115 -	YUM_STATE_PACKAGE_NAME
   1.116 +	YUM_STATE_PACKAGE_NAME,
   1.117 +	YUM_STATE_REQUIRES,
   1.118 +	YUM_STATE_PROVIDES
   1.119  };
   1.120  
   1.121  struct yum_context {
   1.122 -	struct import_context ctx;
   1.123 +	struct razor_importer *importer;
   1.124  	struct import_property_context *current_property_context;
   1.125  	char *name;
   1.126  	int state;
   1.127 @@ -168,13 +181,13 @@
   1.128  			if (strcmp(atts[i], "ver") == 0)
   1.129  				version = atts[i + 1];
   1.130  		}
   1.131 -		import_context_add_package(&ctx->ctx, ctx->name, version);
   1.132 +		razor_importer_begin_package(ctx->importer, ctx->name, version);
   1.133  	} else if (strcmp(name, "rpm:requires") == 0) {
   1.134 -		ctx->current_property_context = &ctx->ctx.requires;
   1.135 +		ctx->state = YUM_STATE_REQUIRES;
   1.136  	} else if (strcmp(name, "rpm:provides") == 0) {
   1.137 -		ctx->current_property_context = &ctx->ctx.provides;
   1.138 +		ctx->state = YUM_STATE_PROVIDES;
   1.139  	} else if (strcmp(name, "rpm:entry") == 0 &&
   1.140 -		   ctx->current_property_context != NULL) {
   1.141 +		   ctx->state != YUM_STATE_BEGIN) {
   1.142  		n = NULL;
   1.143  		version = NULL;
   1.144  		for (i = 0; atts[i]; i += 2) {
   1.145 @@ -190,9 +203,15 @@
   1.146  			return;
   1.147  		}
   1.148  
   1.149 -		import_context_add_property(&ctx->ctx,
   1.150 -					    ctx->current_property_context,
   1.151 -					    n, version);
   1.152 +		switch (ctx->state) {
   1.153 +		case YUM_STATE_REQUIRES:
   1.154 +			razor_importer_add_requires(ctx->importer, n, version);
   1.155 +			break;
   1.156 +		case YUM_STATE_PROVIDES:
   1.157 +			razor_importer_add_provides(ctx->importer, n, version);
   1.158 +			break;
   1.159 +		}
   1.160 +
   1.161  	}
   1.162  }
   1.163  
   1.164 @@ -203,13 +222,13 @@
   1.165  
   1.166  	if (strcmp(name, "package") == 0) {
   1.167  		free(ctx->name);
   1.168 -		import_context_finish_package(&ctx->ctx);
   1.169 +		razor_importer_finish_package(ctx->importer);
   1.170  	} else if (strcmp(name, "name") == 0) {
   1.171 -		ctx->state = 0;
   1.172 +		ctx->state = YUM_STATE_BEGIN;
   1.173  	} else if (strcmp(name, "rpm:requires") == 0) {
   1.174 -		ctx->current_property_context = NULL;
   1.175 +		ctx->state = YUM_STATE_BEGIN;
   1.176  	} else if (strcmp(name, "rpm:provides") == 0) {
   1.177 -		ctx->current_property_context = NULL;
   1.178 +		ctx->state = YUM_STATE_BEGIN;
   1.179  	}
   1.180  }
   1.181  
   1.182 @@ -230,7 +249,7 @@
   1.183  	char buf[4096];
   1.184  	int len;
   1.185  
   1.186 -	razor_prepare_import(&ctx.ctx);
   1.187 +	ctx.importer = razor_importer_new();	
   1.188  
   1.189  	parser = XML_ParserCreate(NULL);
   1.190  	XML_SetUserData(parser, &ctx);
   1.191 @@ -257,13 +276,13 @@
   1.192  
   1.193  	XML_ParserFree(parser);
   1.194  
   1.195 -	return razor_finish_import(&ctx.ctx);
   1.196 +	return razor_importer_finish(ctx.importer);
   1.197  }
   1.198  
   1.199  struct razor_set *
   1.200  razor_set_create_from_rpmdb(void)
   1.201  {
   1.202 -	struct import_context ctx;
   1.203 +	struct razor_importer *importer;
   1.204  	rpmdbMatchIterator iter;
   1.205  	Header h;
   1.206  	int_32 type, count, i;
   1.207 @@ -278,7 +297,7 @@
   1.208  		exit(1);
   1.209  	}
   1.210  
   1.211 -	razor_prepare_import(&ctx);
   1.212 +	importer = razor_importer_new();
   1.213  
   1.214  	iter = rpmdbInitIterator(db, 0, NULL, 0);
   1.215  	while (h = rpmdbNextIterator(iter), h != NULL) {
   1.216 @@ -288,16 +307,14 @@
   1.217  			       (void **) &version, &count);
   1.218  		headerGetEntry(h, RPMTAG_RELEASE, &type,
   1.219  			       (void **) &release, &count);
   1.220 -		import_context_add_package(&ctx, name, version);
   1.221 -
   1.222 +		razor_importer_begin_package(importer, name, version);
   1.223  
   1.224  		headerGetEntry(h, RPMTAG_REQUIRES, &type,
   1.225  			       (void **) &properties, &count);
   1.226  		headerGetEntry(h, RPMTAG_REQUIREVERSION, &type,
   1.227  			       (void **) &property_versions, &count);
   1.228  		for (i = 0; i < count; i++)
   1.229 -			import_context_add_property(&ctx,
   1.230 -						    &ctx.requires,
   1.231 +			razor_importer_add_requires(importer,
   1.232  						    properties[i],
   1.233  						    property_versions[i]);
   1.234  
   1.235 @@ -306,15 +323,14 @@
   1.236  		headerGetEntry(h, RPMTAG_PROVIDEVERSION, &type,
   1.237  			       (void **) &property_versions, &count);
   1.238  		for (i = 0; i < count; i++)
   1.239 -			import_context_add_property(&ctx,
   1.240 -						    &ctx.provides,
   1.241 +			razor_importer_add_provides(importer,
   1.242  						    properties[i],
   1.243  						    property_versions[i]);
   1.244  
   1.245 -		import_context_finish_package(&ctx);
   1.246 +		razor_importer_finish_package(importer);
   1.247  	}
   1.248  
   1.249  	rpmdbClose(db);
   1.250  
   1.251 -	return razor_finish_import(&ctx);
   1.252 +	return razor_importer_finish(importer);
   1.253  }