Port to razor 0.6.3.94
authorJ. Ali Harlow <ali@juiblex.co.uk>
Tue Jul 05 12:48:24 2016 +0100 (2016-07-05)
changeset 558c80282a3888
parent 54 bed9ffa7f33a
child 56 42ab9633c451
Port to razor 0.6.3.94
plover/import-yum.c
plover/razor.c
plover/repository.c
plover/repository.h
tests/Makefile.am
tests/plover/test-package.c
tests/plover/test-packageset.c
tests/plover/test-razor.c
tests/plover/test-repository.c
     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);