1.1 --- a/plover/import-yum.c Tue Jun 28 19:46:19 2016 +0100
1.2 +++ b/plover/import-yum.c Tue Jul 05 12:48:24 2016 +0100
1.3 @@ -61,9 +61,11 @@
1.4
1.5 struct razor_importer *importer;
1.6 struct import_property_context *current_property_context;
1.7 + const char *base_uri;
1.8 + GTree *uris;
1.9 char name[256], arch[64], summary[512], description[4096];
1.10 char url[256], license[64], buffer[512], *p;
1.11 - char pkgid[128];
1.12 + char pkgid[128], evr[128];
1.13 uint32_t property_type;
1.14 int state;
1.15
1.16 @@ -93,6 +95,8 @@
1.17 struct yum_context *ctx = data;
1.18 const char *n, *epoch, *version, *release;
1.19 char buffer[128];
1.20 + char *s;
1.21 + gchar *nevra;
1.22 uint32_t pre, relation, flags;
1.23 int i;
1.24
1.25 @@ -131,11 +135,12 @@
1.26 return;
1.27 }
1.28
1.29 - razor_build_evr(buffer, sizeof buffer, epoch, version, release);
1.30 + razor_build_evr(ctx->evr, sizeof ctx->evr, epoch, version,
1.31 + release);
1.32 if (!strcmp(ctx->arch, "noarch") ||
1.33 !strcmp(ctx->arch, razor_system_arch())) {
1.34 razor_importer_begin_package(ctx->importer, ctx->name,
1.35 - buffer, ctx->arch);
1.36 + ctx->evr, ctx->arch);
1.37 } else
1.38 ctx->state = YUM_STATE_SKIPPING_PACKAGE;
1.39 } else if (strcmp(name, "summary") == 0) {
1.40 @@ -150,6 +155,19 @@
1.41 } else if (strcmp(name, "checksum") == 0) {
1.42 ctx->p = ctx->pkgid;
1.43 ctx->state = YUM_STATE_CHECKSUM;
1.44 + } else if (strcmp(name, "location") == 0) {
1.45 + if (ctx->state != YUM_STATE_SKIPPING_PACKAGE) {
1.46 + for (i = 0; atts[i]; i += 2)
1.47 + if (strcmp(atts[i], "href") == 0) {
1.48 + nevra=g_strconcat(ctx->name,"-",ctx->evr,".",
1.49 + ctx->arch,NULL);
1.50 + s=razor_path_relative_to_uri(ctx->base_uri,
1.51 + atts[i + 1],NULL);
1.52 + g_tree_insert(ctx->uris,nevra,g_strdup(s));
1.53 + free(s);
1.54 + break;
1.55 + }
1.56 + }
1.57 } else if (strcmp(name, "rpm:license") == 0) {
1.58 ctx->p = ctx->license;
1.59 ctx->state = YUM_STATE_LICENSE;
1.60 @@ -308,11 +326,14 @@
1.61
1.62 #define XML_BUFFER_SIZE 4096
1.63
1.64 -struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri,
1.65 +PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri,
1.66 GError **error)
1.67 {
1.68 struct yum_context ctx;
1.69 - gchar *s;
1.70 + gchar *s,**rpm_uris;
1.71 + GPtrArray *uris;
1.72 + char *uri;
1.73 + const char *name,*version,*arch;
1.74 void *buf;
1.75 gssize len;
1.76 GFile *file;
1.77 @@ -320,10 +341,15 @@
1.78 GInputStream *primary,*filelists;
1.79 GZlibDecompressor *decompressor;
1.80 XML_ParsingStatus status;
1.81 - struct razor_set *set;
1.82 + struct razor_set *razor;
1.83 + struct razor_package_iterator *iter;
1.84 + struct razor_package *pkg;
1.85 + PloverPackageSet *set;
1.86 + PloverRepository *repository;
1.87 plover__uri_handler_init();
1.88 ctx.importer=razor_importer_create();
1.89 ctx.state=YUM_STATE_BEGIN;
1.90 + ctx.base_uri=base_uri;
1.91 ctx.primary_parser=XML_ParserCreate(NULL);
1.92 XML_SetUserData(ctx.primary_parser,&ctx);
1.93 XML_SetElementHandler(ctx.primary_parser,yum_primary_start_element,
1.94 @@ -334,31 +360,38 @@
1.95 XML_SetElementHandler(ctx.filelists_parser,yum_filelists_start_element,
1.96 yum_filelists_end_element);
1.97 XML_SetCharacterDataHandler(ctx.filelists_parser,yum_character_data);
1.98 - s=g_build_filename(base_uri,"repodata","primary.xml.gz",NULL);
1.99 - file=g_file_new_for_uri(s);
1.100 - g_free(s);
1.101 + uri=razor_path_relative_to_uri(base_uri,"repodata/primary.xml.gz",NULL);
1.102 + file=g_file_new_for_uri(uri);
1.103 + free(uri);
1.104 stream=g_file_read(file,NULL,error);
1.105 g_object_unref(file);
1.106 - if (!stream)
1.107 + if (!stream) {
1.108 + XML_ParserFree(ctx.primary_parser);
1.109 + XML_ParserFree(ctx.filelists_parser);
1.110 return NULL;
1.111 + }
1.112 decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP);
1.113 primary=g_converter_input_stream_new(G_INPUT_STREAM(stream),
1.114 G_CONVERTER(decompressor));
1.115 g_object_unref(stream);
1.116 g_object_unref(decompressor);
1.117 - s=g_build_filename(base_uri,"repodata","filelists.xml.gz",NULL);
1.118 - file=g_file_new_for_uri(s);
1.119 - g_free(s);
1.120 + uri=razor_path_relative_to_uri(base_uri,"repodata/filelists.xml.gz",NULL);
1.121 + file=g_file_new_for_uri(uri);
1.122 + free(uri);
1.123 stream=g_file_read(file,NULL,error);
1.124 g_object_unref(file);
1.125 - if (!stream)
1.126 + if (!stream) {
1.127 + XML_ParserFree(ctx.primary_parser);
1.128 + XML_ParserFree(ctx.filelists_parser);
1.129 return NULL;
1.130 + }
1.131 decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP);
1.132 filelists=g_converter_input_stream_new(G_INPUT_STREAM(stream),
1.133 G_CONVERTER(decompressor));
1.134 g_object_unref(stream);
1.135 g_object_unref(decompressor);
1.136 ctx.current_parser=ctx.primary_parser;
1.137 + ctx.uris=g_tree_new_full((GCompareDataFunc)strcmp,NULL,g_free,NULL);
1.138 ctx.current=0;
1.139 do
1.140 {
1.141 @@ -389,7 +422,7 @@
1.142 XML_ParserFree(ctx.filelists_parser);
1.143 g_object_unref(primary);
1.144 g_object_unref(filelists);
1.145 - set=razor_importer_finish(ctx.importer);
1.146 + razor=razor_importer_finish(ctx.importer);
1.147 #if RAZOR_HEADER_VERSION_MIN<=1
1.148 /*
1.149 * Header version 1 is supported by plover v0.3 and is used on
1.150 @@ -400,9 +433,44 @@
1.151 * which they don't support.
1.152 */
1.153 if (plover_system_arch_is_x86())
1.154 - razor_set_set_header_version(set,1);
1.155 + razor_set_set_header_version(razor,1);
1.156 #endif
1.157 - return set;
1.158 + uris=g_ptr_array_new();
1.159 + iter=razor_package_iterator_create(razor);
1.160 + while(razor_package_iterator_next(iter,&pkg,RAZOR_DETAIL_NAME,&name,
1.161 + RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST))
1.162 + {
1.163 + s=g_strconcat(name,"-",version,".",arch,NULL);
1.164 + g_ptr_array_add(uris,g_tree_lookup(ctx.uris,s));
1.165 + g_free(s);
1.166 + }
1.167 + razor_package_iterator_destroy(iter);
1.168 + g_ptr_array_add(uris,NULL);
1.169 + g_tree_unref(ctx.uris);
1.170 + rpm_uris=(gchar **)g_ptr_array_free(uris,FALSE);
1.171 + set=plover_package_set_new_from_razor(razor);
1.172 + razor_set_unref(razor);
1.173 + repository=plover_repository_new_from_package_set(set,
1.174 + (const char **)rpm_uris);
1.175 + g_object_unref(set);
1.176 + g_strfreev(rpm_uris);
1.177 + return repository;
1.178 +}
1.179 +
1.180 +struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri,
1.181 + GError **error)
1.182 +{
1.183 + PloverRepository *repository;
1.184 + PloverPackageSet *set;
1.185 + struct razor_set *razor;
1.186 + repository=plover_repository_new_from_yum_uri(base_uri,error);
1.187 + if (!repository)
1.188 + return NULL;
1.189 + set=plover_repository_get_package_set(repository);
1.190 + razor=plover_package_set_get_razor(set);
1.191 + razor_set_ref(razor);
1.192 + g_object_unref(repository);
1.193 + return razor;
1.194 }
1.195
1.196 struct razor_set *plover_razor_set_create_from_yum(const char *base,
2.1 --- a/plover/razor.c Tue Jun 28 19:46:19 2016 +0100
2.2 +++ b/plover/razor.c Tue Jul 05 12:48:24 2016 +0100
2.3 @@ -111,7 +111,6 @@
2.4 {
2.5 plover_propagate_g_error(&error,tmp_error);
2.6 razor_atomic_propagate_error(atomic,error,NULL);
2.7 - razor_error_free(error);
2.8 g_free(uri);
2.9 return -1;
2.10 }
3.1 --- a/plover/repository.c Tue Jun 28 19:46:19 2016 +0100
3.2 +++ b/plover/repository.c Tue Jul 05 12:48:24 2016 +0100
3.3 @@ -66,6 +66,20 @@
3.4 {
3.5 }
3.6
3.7 +PloverRepository *plover_repository_new_from_package_set(PloverPackageSet *set,
3.8 + const char **rpm_uris)
3.9 +{
3.10 + PloverRepository *repository;
3.11 + PloverRepositoryPrivate *priv;
3.12 + g_return_val_if_fail(PLOVER_IS_PACKAGE_SET(set),NULL);
3.13 + g_return_val_if_fail(rpm_uris != NULL,NULL);
3.14 + repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL);
3.15 + priv=PLOVER_REPOSITORY_GET_PRIVATE(repository);
3.16 + priv->uris=g_strdupv((char **)rpm_uris);
3.17 + priv->set=g_object_ref(set);
3.18 + return repository;
3.19 +}
3.20 +
3.21 PloverRepository *plover_repository_new_from_files(const char **filenames,
3.22 GError **error)
3.23 {
3.24 @@ -103,41 +117,6 @@
3.25 return g_strconcat(name,"-",v,".",arch,".rpm",NULL);
3.26 }
3.27
3.28 -PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri,
3.29 - GError **error)
3.30 -{
3.31 - char *s;
3.32 - const char *name,*version,*arch;
3.33 - GPtrArray *uris;
3.34 - struct razor_set *imported;
3.35 - struct razor_package *package;
3.36 - struct razor_package_iterator *pi;
3.37 - PloverPackageSet *set;
3.38 - PloverRepository *repository;
3.39 - PloverRepositoryPrivate *priv;
3.40 - imported=plover_razor_set_create_from_yum_uri(base_uri,error);
3.41 - if (!imported)
3.42 - return NULL;
3.43 - set=plover_package_set_new_from_razor(imported);
3.44 - razor_set_unref(imported);
3.45 - repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL);
3.46 - priv=PLOVER_REPOSITORY_GET_PRIVATE(repository);
3.47 - uris=g_ptr_array_new();
3.48 - pi=razor_package_iterator_create(plover_package_set_get_razor(set));
3.49 - while (razor_package_iterator_next(pi,&package,RAZOR_DETAIL_NAME,&name,
3.50 - RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST))
3.51 - {
3.52 - s=rpm_filename(name,version,arch);
3.53 - g_ptr_array_add(uris,g_build_filename(base_uri,"rpms",s,NULL));
3.54 - free(s);
3.55 - }
3.56 - razor_package_iterator_destroy(pi);
3.57 - g_ptr_array_add(uris,NULL);
3.58 - priv->uris=(gchar **)g_ptr_array_free(uris,FALSE);
3.59 - priv->set=set;
3.60 - return repository;
3.61 -}
3.62 -
3.63 PloverRepository *plover_repository_new_from_yum(const char *base,
3.64 GError **error)
3.65 {
4.1 --- a/plover/repository.h Tue Jun 28 19:46:19 2016 +0100
4.2 +++ b/plover/repository.h Tue Jul 05 12:48:24 2016 +0100
4.3 @@ -35,6 +35,8 @@
4.4 #include <plover/packageset.h>
4.5
4.6 GType plover_repository_get_type(void) G_GNUC_CONST;
4.7 +PloverRepository *plover_repository_new_from_package_set(PloverPackageSet *set,
4.8 + const char **rpm_uris);
4.9 PloverRepository *plover_repository_new_from_files(const char **filenames,
4.10 GError **error);
4.11 PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri,
5.1 --- a/tests/Makefile.am Tue Jun 28 19:46:19 2016 +0100
5.2 +++ b/tests/Makefile.am Tue Jul 05 12:48:24 2016 +0100
5.3 @@ -38,14 +38,12 @@
5.4 $(BUILD_RPM) $(srcdir)/unsatisfiable.spec
5.5 $(BUILD_RPM) $(srcdir)/uninstallable.spec
5.6 $(BUILD_RPM) $(srcdir)/badpostun.spec
5.7 - mkdir -p yum-repo-test-dir/rpms
5.8 - mv rpmbuild/RPMS/noarch/*.rpm yum-repo-test-dir/rpms
5.9 + mkdir -p yum-repo-test-dir/Packages
5.10 + mv rpmbuild/RPMS/noarch/*.rpm yum-repo-test-dir/Packages
5.11 rm -rf rpmbuild
5.12 - cp $(srcdir)/comps.xml yum-repo-test-dir/rpms
5.13 - $(CREATEREPO) --simple-md-filenames -g comps.xml -o yum-repo-test-dir \
5.14 - yum-repo-test-dir/rpms
5.15 - $(RM) yum-repo-test-dir/rpms/comps.xml
5.16 - cp $(srcdir)/comps.xml yum-repo-test-dir/repodata
5.17 + cp $(srcdir)/comps.xml yum-repo-test-dir
5.18 + $(CREATEREPO) --simple-md-filenames -g comps.xml yum-repo-test-dir
5.19 + mv yum-repo-test-dir/comps.xml yum-repo-test-dir/repodata
5.20
5.21 primary.xml.gz: yum-repo-test-dir/repodata/primary.xml.gz
5.22 cp yum-repo-test-dir/repodata/primary.xml.gz \
5.23 @@ -56,9 +54,10 @@
5.24 razor-test-dir/var/lib/razor/system.rzdb: primary.xml.gz
5.25 $(RM) -r razor-test-dir
5.26 $(RAZOR) --root=file:razor-test-dir init
5.27 - $(RAZOR) --root=file:razor-test-dir \
5.28 - --url=file://localhost/`pwd`/yum-repo-test-dir import-yum
5.29 - $(RAZOR) --root=file:razor-test-dir install zap zappy zappy2 zappy-tools
5.30 + $(RAZOR) --url=file://localhost`pwd`/yum-repo-test-dir \
5.31 + --root=file:razor-test-dir import-yum
5.32 + $(RAZOR) --url=file://localhost`pwd`/yum-repo-test-dir \
5.33 + --root=file:razor-test-dir install zap zappy zappy2 zappy-tools
5.34
5.35 endif
5.36
6.1 --- a/tests/plover/test-package.c Tue Jun 28 19:46:19 2016 +0100
6.2 +++ b/tests/plover/test-package.c Tue Jul 05 12:48:24 2016 +0100
6.3 @@ -135,7 +135,7 @@
6.4 * razor_importer_add_rpm() doesn't support prefixes so we have
6.5 * to do it the really hard way.
6.6 */
6.7 - uri=g_strconcat("file:../yum-repo-test-dir/rpms/",name,"-",version,
6.8 + uri=g_strconcat("file:../yum-repo-test-dir/Packages/",name,"-",version,
6.9 ".noarch.rpm",NULL);
6.10 rpm=razor_rpm_open(uri,&err);
6.11 if (!rpm)
7.1 --- a/tests/plover/test-packageset.c Tue Jun 28 19:46:19 2016 +0100
7.2 +++ b/tests/plover/test-packageset.c Tue Jul 05 12:48:24 2016 +0100
7.3 @@ -339,7 +339,7 @@
7.4 gchar **filenames;
7.5 filenames=g_new(char *,G_N_ELEMENTS(yum_packages)+1);
7.6 for(i=0;i<G_N_ELEMENTS(yum_packages);i++)
7.7 - filenames[i]=g_strconcat("../yum-repo-test-dir/rpms/",
7.8 + filenames[i]=g_strconcat("../yum-repo-test-dir/Packages/",
7.9 yum_packages[i],"-1-1.noarch.rpm",NULL);
7.10 filenames[i]=NULL;
7.11 package_set=plover_package_set_new_from_rpms((const char **)filenames,&err);
8.1 --- a/tests/plover/test-razor.c Tue Jun 28 19:46:19 2016 +0100
8.2 +++ b/tests/plover/test-razor.c Tue Jul 05 12:48:24 2016 +0100
8.3 @@ -56,9 +56,9 @@
8.4 root=g_strdup("razor-test-dir-XXXXXX");
8.5 g_assert(mkdtemp(root));
8.6 g_setenv("RAZOR_ROOT",root,TRUE);
8.7 - chmod("../yum-repo-test-dir/rpms/zip-1-1.noarch.rpm",0);
8.8 + chmod("../yum-repo-test-dir/Packages/zip-1-1.noarch.rpm",0);
8.9 installed_bad_rpm=plover_install("../yum-repo-test-dir","/test",pkgs,&err);
8.10 - chmod("../yum-repo-test-dir/rpms/zip-1-1.noarch.rpm",0666);
8.11 + chmod("../yum-repo-test-dir/Packages/zip-1-1.noarch.rpm",0666);
8.12 g_assert(!installed_bad_rpm);
8.13 g_assert(err && err->message);
8.14 g_unsetenv("RAZOR_ROOT");
9.1 --- a/tests/plover/test-repository.c Tue Jun 28 19:46:19 2016 +0100
9.2 +++ b/tests/plover/test-repository.c Tue Jul 05 12:48:24 2016 +0100
9.3 @@ -40,7 +40,7 @@
9.4 GError *err=NULL;
9.5 filenames=g_new(char *,G_N_ELEMENTS(test_repo_packages)+1);
9.6 for(i=0;i<G_N_ELEMENTS(test_repo_packages);i++)
9.7 - filenames[i]=g_strconcat("../yum-repo-test-dir/rpms/",
9.8 + filenames[i]=g_strconcat("../yum-repo-test-dir/Packages/",
9.9 test_repo_packages[i],"-1-1.noarch.rpm",NULL);
9.10 filenames[i]=NULL;
9.11 repository=plover_repository_new_from_files((const char **)filenames,&err);