# HG changeset patch # User J. Ali Harlow # Date 1467719304 -3600 # Node ID 8c80282a3888b85d8fa2e0e8ec24139642063219 # Parent bed9ffa7f33a2175a6582e9ff1bb272f9bd03aa0 Port to razor 0.6.3.94 diff -r bed9ffa7f33a -r 8c80282a3888 plover/import-yum.c --- a/plover/import-yum.c Tue Jun 28 19:46:19 2016 +0100 +++ b/plover/import-yum.c Tue Jul 05 12:48:24 2016 +0100 @@ -61,9 +61,11 @@ struct razor_importer *importer; struct import_property_context *current_property_context; + const char *base_uri; + GTree *uris; char name[256], arch[64], summary[512], description[4096]; char url[256], license[64], buffer[512], *p; - char pkgid[128]; + char pkgid[128], evr[128]; uint32_t property_type; int state; @@ -93,6 +95,8 @@ struct yum_context *ctx = data; const char *n, *epoch, *version, *release; char buffer[128]; + char *s; + gchar *nevra; uint32_t pre, relation, flags; int i; @@ -131,11 +135,12 @@ return; } - razor_build_evr(buffer, sizeof buffer, epoch, version, release); + razor_build_evr(ctx->evr, sizeof ctx->evr, epoch, version, + release); if (!strcmp(ctx->arch, "noarch") || !strcmp(ctx->arch, razor_system_arch())) { razor_importer_begin_package(ctx->importer, ctx->name, - buffer, ctx->arch); + ctx->evr, ctx->arch); } else ctx->state = YUM_STATE_SKIPPING_PACKAGE; } else if (strcmp(name, "summary") == 0) { @@ -150,6 +155,19 @@ } else if (strcmp(name, "checksum") == 0) { ctx->p = ctx->pkgid; ctx->state = YUM_STATE_CHECKSUM; + } else if (strcmp(name, "location") == 0) { + if (ctx->state != YUM_STATE_SKIPPING_PACKAGE) { + for (i = 0; atts[i]; i += 2) + if (strcmp(atts[i], "href") == 0) { + nevra=g_strconcat(ctx->name,"-",ctx->evr,".", + ctx->arch,NULL); + s=razor_path_relative_to_uri(ctx->base_uri, + atts[i + 1],NULL); + g_tree_insert(ctx->uris,nevra,g_strdup(s)); + free(s); + break; + } + } } else if (strcmp(name, "rpm:license") == 0) { ctx->p = ctx->license; ctx->state = YUM_STATE_LICENSE; @@ -308,11 +326,14 @@ #define XML_BUFFER_SIZE 4096 -struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri, +PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri, GError **error) { struct yum_context ctx; - gchar *s; + gchar *s,**rpm_uris; + GPtrArray *uris; + char *uri; + const char *name,*version,*arch; void *buf; gssize len; GFile *file; @@ -320,10 +341,15 @@ GInputStream *primary,*filelists; GZlibDecompressor *decompressor; XML_ParsingStatus status; - struct razor_set *set; + struct razor_set *razor; + struct razor_package_iterator *iter; + struct razor_package *pkg; + PloverPackageSet *set; + PloverRepository *repository; plover__uri_handler_init(); ctx.importer=razor_importer_create(); ctx.state=YUM_STATE_BEGIN; + ctx.base_uri=base_uri; ctx.primary_parser=XML_ParserCreate(NULL); XML_SetUserData(ctx.primary_parser,&ctx); XML_SetElementHandler(ctx.primary_parser,yum_primary_start_element, @@ -334,31 +360,38 @@ XML_SetElementHandler(ctx.filelists_parser,yum_filelists_start_element, yum_filelists_end_element); XML_SetCharacterDataHandler(ctx.filelists_parser,yum_character_data); - s=g_build_filename(base_uri,"repodata","primary.xml.gz",NULL); - file=g_file_new_for_uri(s); - g_free(s); + uri=razor_path_relative_to_uri(base_uri,"repodata/primary.xml.gz",NULL); + file=g_file_new_for_uri(uri); + free(uri); stream=g_file_read(file,NULL,error); g_object_unref(file); - if (!stream) + if (!stream) { + XML_ParserFree(ctx.primary_parser); + XML_ParserFree(ctx.filelists_parser); return NULL; + } decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP); primary=g_converter_input_stream_new(G_INPUT_STREAM(stream), G_CONVERTER(decompressor)); g_object_unref(stream); g_object_unref(decompressor); - s=g_build_filename(base_uri,"repodata","filelists.xml.gz",NULL); - file=g_file_new_for_uri(s); - g_free(s); + uri=razor_path_relative_to_uri(base_uri,"repodata/filelists.xml.gz",NULL); + file=g_file_new_for_uri(uri); + free(uri); stream=g_file_read(file,NULL,error); g_object_unref(file); - if (!stream) + if (!stream) { + XML_ParserFree(ctx.primary_parser); + XML_ParserFree(ctx.filelists_parser); return NULL; + } decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP); filelists=g_converter_input_stream_new(G_INPUT_STREAM(stream), G_CONVERTER(decompressor)); g_object_unref(stream); g_object_unref(decompressor); ctx.current_parser=ctx.primary_parser; + ctx.uris=g_tree_new_full((GCompareDataFunc)strcmp,NULL,g_free,NULL); ctx.current=0; do { @@ -389,7 +422,7 @@ XML_ParserFree(ctx.filelists_parser); g_object_unref(primary); g_object_unref(filelists); - set=razor_importer_finish(ctx.importer); + razor=razor_importer_finish(ctx.importer); #if RAZOR_HEADER_VERSION_MIN<=1 /* * Header version 1 is supported by plover v0.3 and is used on @@ -400,9 +433,44 @@ * which they don't support. */ if (plover_system_arch_is_x86()) - razor_set_set_header_version(set,1); + razor_set_set_header_version(razor,1); #endif - return set; + uris=g_ptr_array_new(); + iter=razor_package_iterator_create(razor); + while(razor_package_iterator_next(iter,&pkg,RAZOR_DETAIL_NAME,&name, + RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST)) + { + s=g_strconcat(name,"-",version,".",arch,NULL); + g_ptr_array_add(uris,g_tree_lookup(ctx.uris,s)); + g_free(s); + } + razor_package_iterator_destroy(iter); + g_ptr_array_add(uris,NULL); + g_tree_unref(ctx.uris); + rpm_uris=(gchar **)g_ptr_array_free(uris,FALSE); + set=plover_package_set_new_from_razor(razor); + razor_set_unref(razor); + repository=plover_repository_new_from_package_set(set, + (const char **)rpm_uris); + g_object_unref(set); + g_strfreev(rpm_uris); + return repository; +} + +struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri, + GError **error) +{ + PloverRepository *repository; + PloverPackageSet *set; + struct razor_set *razor; + repository=plover_repository_new_from_yum_uri(base_uri,error); + if (!repository) + return NULL; + set=plover_repository_get_package_set(repository); + razor=plover_package_set_get_razor(set); + razor_set_ref(razor); + g_object_unref(repository); + return razor; } struct razor_set *plover_razor_set_create_from_yum(const char *base, diff -r bed9ffa7f33a -r 8c80282a3888 plover/razor.c --- a/plover/razor.c Tue Jun 28 19:46:19 2016 +0100 +++ b/plover/razor.c Tue Jul 05 12:48:24 2016 +0100 @@ -111,7 +111,6 @@ { plover_propagate_g_error(&error,tmp_error); razor_atomic_propagate_error(atomic,error,NULL); - razor_error_free(error); g_free(uri); return -1; } diff -r bed9ffa7f33a -r 8c80282a3888 plover/repository.c --- a/plover/repository.c Tue Jun 28 19:46:19 2016 +0100 +++ b/plover/repository.c Tue Jul 05 12:48:24 2016 +0100 @@ -66,6 +66,20 @@ { } +PloverRepository *plover_repository_new_from_package_set(PloverPackageSet *set, + const char **rpm_uris) +{ + PloverRepository *repository; + PloverRepositoryPrivate *priv; + g_return_val_if_fail(PLOVER_IS_PACKAGE_SET(set),NULL); + g_return_val_if_fail(rpm_uris != NULL,NULL); + repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL); + priv=PLOVER_REPOSITORY_GET_PRIVATE(repository); + priv->uris=g_strdupv((char **)rpm_uris); + priv->set=g_object_ref(set); + return repository; +} + PloverRepository *plover_repository_new_from_files(const char **filenames, GError **error) { @@ -103,41 +117,6 @@ return g_strconcat(name,"-",v,".",arch,".rpm",NULL); } -PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri, - GError **error) -{ - char *s; - const char *name,*version,*arch; - GPtrArray *uris; - struct razor_set *imported; - struct razor_package *package; - struct razor_package_iterator *pi; - PloverPackageSet *set; - PloverRepository *repository; - PloverRepositoryPrivate *priv; - imported=plover_razor_set_create_from_yum_uri(base_uri,error); - if (!imported) - return NULL; - set=plover_package_set_new_from_razor(imported); - razor_set_unref(imported); - repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL); - priv=PLOVER_REPOSITORY_GET_PRIVATE(repository); - uris=g_ptr_array_new(); - pi=razor_package_iterator_create(plover_package_set_get_razor(set)); - while (razor_package_iterator_next(pi,&package,RAZOR_DETAIL_NAME,&name, - RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST)) - { - s=rpm_filename(name,version,arch); - g_ptr_array_add(uris,g_build_filename(base_uri,"rpms",s,NULL)); - free(s); - } - razor_package_iterator_destroy(pi); - g_ptr_array_add(uris,NULL); - priv->uris=(gchar **)g_ptr_array_free(uris,FALSE); - priv->set=set; - return repository; -} - PloverRepository *plover_repository_new_from_yum(const char *base, GError **error) { diff -r bed9ffa7f33a -r 8c80282a3888 plover/repository.h --- a/plover/repository.h Tue Jun 28 19:46:19 2016 +0100 +++ b/plover/repository.h Tue Jul 05 12:48:24 2016 +0100 @@ -35,6 +35,8 @@ #include GType plover_repository_get_type(void) G_GNUC_CONST; +PloverRepository *plover_repository_new_from_package_set(PloverPackageSet *set, + const char **rpm_uris); PloverRepository *plover_repository_new_from_files(const char **filenames, GError **error); PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri, diff -r bed9ffa7f33a -r 8c80282a3888 tests/Makefile.am --- a/tests/Makefile.am Tue Jun 28 19:46:19 2016 +0100 +++ b/tests/Makefile.am Tue Jul 05 12:48:24 2016 +0100 @@ -38,14 +38,12 @@ $(BUILD_RPM) $(srcdir)/unsatisfiable.spec $(BUILD_RPM) $(srcdir)/uninstallable.spec $(BUILD_RPM) $(srcdir)/badpostun.spec - mkdir -p yum-repo-test-dir/rpms - mv rpmbuild/RPMS/noarch/*.rpm yum-repo-test-dir/rpms + mkdir -p yum-repo-test-dir/Packages + mv rpmbuild/RPMS/noarch/*.rpm yum-repo-test-dir/Packages rm -rf rpmbuild - cp $(srcdir)/comps.xml yum-repo-test-dir/rpms - $(CREATEREPO) --simple-md-filenames -g comps.xml -o yum-repo-test-dir \ - yum-repo-test-dir/rpms - $(RM) yum-repo-test-dir/rpms/comps.xml - cp $(srcdir)/comps.xml yum-repo-test-dir/repodata + cp $(srcdir)/comps.xml yum-repo-test-dir + $(CREATEREPO) --simple-md-filenames -g comps.xml yum-repo-test-dir + mv yum-repo-test-dir/comps.xml yum-repo-test-dir/repodata primary.xml.gz: yum-repo-test-dir/repodata/primary.xml.gz cp yum-repo-test-dir/repodata/primary.xml.gz \ @@ -56,9 +54,10 @@ razor-test-dir/var/lib/razor/system.rzdb: primary.xml.gz $(RM) -r razor-test-dir $(RAZOR) --root=file:razor-test-dir init - $(RAZOR) --root=file:razor-test-dir \ - --url=file://localhost/`pwd`/yum-repo-test-dir import-yum - $(RAZOR) --root=file:razor-test-dir install zap zappy zappy2 zappy-tools + $(RAZOR) --url=file://localhost`pwd`/yum-repo-test-dir \ + --root=file:razor-test-dir import-yum + $(RAZOR) --url=file://localhost`pwd`/yum-repo-test-dir \ + --root=file:razor-test-dir install zap zappy zappy2 zappy-tools endif diff -r bed9ffa7f33a -r 8c80282a3888 tests/plover/test-package.c --- a/tests/plover/test-package.c Tue Jun 28 19:46:19 2016 +0100 +++ b/tests/plover/test-package.c Tue Jul 05 12:48:24 2016 +0100 @@ -135,7 +135,7 @@ * razor_importer_add_rpm() doesn't support prefixes so we have * to do it the really hard way. */ - uri=g_strconcat("file:../yum-repo-test-dir/rpms/",name,"-",version, + uri=g_strconcat("file:../yum-repo-test-dir/Packages/",name,"-",version, ".noarch.rpm",NULL); rpm=razor_rpm_open(uri,&err); if (!rpm) diff -r bed9ffa7f33a -r 8c80282a3888 tests/plover/test-packageset.c --- a/tests/plover/test-packageset.c Tue Jun 28 19:46:19 2016 +0100 +++ b/tests/plover/test-packageset.c Tue Jul 05 12:48:24 2016 +0100 @@ -339,7 +339,7 @@ gchar **filenames; filenames=g_new(char *,G_N_ELEMENTS(yum_packages)+1); for(i=0;imessage); g_unsetenv("RAZOR_ROOT"); diff -r bed9ffa7f33a -r 8c80282a3888 tests/plover/test-repository.c --- a/tests/plover/test-repository.c Tue Jun 28 19:46:19 2016 +0100 +++ b/tests/plover/test-repository.c Tue Jul 05 12:48:24 2016 +0100 @@ -40,7 +40,7 @@ GError *err=NULL; filenames=g_new(char *,G_N_ELEMENTS(test_repo_packages)+1); for(i=0;i