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 }