1.1 --- a/configure.ac Thu Jun 16 12:11:14 2016 +0100
1.2 +++ b/configure.ac Thu Jun 16 18:00:21 2016 +0100
1.3 @@ -114,8 +114,10 @@
1.4 AC_CHECK_TOOL([RAZOR],[razor],[no])
1.5 AC_CHECK_TOOL([RPMBUILD],[rpmbuild],[no])
1.6 AC_CHECK_TOOL([CREATEREPO],[createrepo],[no])
1.7 +AC_CHECK_TOOL([COMPILE_RESOURCES],[glib-compile-resources],[no])
1.8 AM_CONDITIONAL([HAVE_CHECK_TOOLS],
1.9 - [test x$RAZOR != xno -a x$RPMBUILD != xno -a x$CREATEREPO != xno])
1.10 + [test x$RAZOR != xno -a x$RPMBUILD != xno -a x$CREATEREPO != xno -a \
1.11 + x$COMPILE_RESOURCES != xno])
1.12
1.13 ##################################################
1.14 # Checks for header files.
2.1 --- a/plover/comps.c Thu Jun 16 12:11:14 2016 +0100
2.2 +++ b/plover/comps.c Thu Jun 16 18:00:21 2016 +0100
2.3 @@ -1,7 +1,7 @@
2.4 /*
2.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
2.6 * Copyright (C) 2008 Red Hat, Inc
2.7 - * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
2.8 + * Copyright (C) 2009, 2016 J. Ali Harlow <ali@juiblex.co.uk>
2.9 *
2.10 * This program is free software; you can redistribute it and/or modify
2.11 * it under the terms of the GNU General Public License as published by
2.12 @@ -372,16 +372,20 @@
2.13
2.14 #define XML_BUFFER_SIZE 4096
2.15
2.16 -struct comps *plover_comps_new_from_file(const char *filename)
2.17 +struct comps *plover_comps_new_from_uri(const char *uri)
2.18 {
2.19 struct comps_context ctx={0};
2.20 void *buf;
2.21 - int len;
2.22 - FILE *fp;
2.23 + gssize len;
2.24 + GFile *file;
2.25 + GFileInputStream *stream;
2.26 XML_ParsingStatus status;
2.27 struct comps *comps;
2.28 - fp=fopen(filename,"r");
2.29 - if (!fp)
2.30 + plover__file_io_init();
2.31 + file=g_file_new_for_uri(uri);
2.32 + stream=g_file_read(file,NULL,NULL);
2.33 + g_object_unref(file);
2.34 + if (!stream)
2.35 return NULL;
2.36 ctx.state=COMPS_STATE_BEGIN;
2.37 ctx.parser=XML_ParserCreateNS(NULL,'\xFF');
2.38 @@ -399,19 +403,20 @@
2.39 case XML_PARSING:
2.40 case XML_INITIALIZED:
2.41 buf=XML_GetBuffer(ctx.parser,XML_BUFFER_SIZE);
2.42 - len=fread(buf,1,XML_BUFFER_SIZE,fp);
2.43 + len=g_input_stream_read(G_INPUT_STREAM(stream),buf,
2.44 + XML_BUFFER_SIZE,NULL,NULL);
2.45 if (len<0)
2.46 {
2.47 comps_group_free(ctx.group);
2.48 XML_ParserFree(ctx.parser);
2.49 - fclose(fp);
2.50 + g_object_unref(stream);
2.51 return NULL;
2.52 }
2.53 if (!XML_ParseBuffer(ctx.parser,len,!len))
2.54 {
2.55 comps_group_free(ctx.group);
2.56 XML_ParserFree(ctx.parser);
2.57 - fclose(fp);
2.58 + g_object_unref(stream);
2.59 return NULL;
2.60 }
2.61 break;
2.62 @@ -420,13 +425,26 @@
2.63 }
2.64 } while (status.parsing!=XML_FINISHED);
2.65 XML_ParserFree(ctx.parser);
2.66 - fclose(fp);
2.67 + g_object_unref(stream);
2.68 comps=plover_comps_new();
2.69 comps->vendor=ctx.vendor;
2.70 comps->groups=ctx.group;
2.71 return comps;
2.72 }
2.73
2.74 +struct comps *plover_comps_new_from_file(const char *filename)
2.75 +{
2.76 + gchar *uri;
2.77 + GFile *file;
2.78 + struct comps *comps;
2.79 + file=g_file_new_for_path(filename);
2.80 + uri=g_file_get_uri(file);
2.81 + g_object_unref(file);
2.82 + comps=plover_comps_new_from_uri(uri);
2.83 + g_free(uri);
2.84 + return comps;
2.85 +}
2.86 +
2.87 struct comps_group *plover_comps_lookup_group(struct comps *comps,
2.88 const char *id)
2.89 {
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/plover/fileio.h Thu Jun 16 18:00:21 2016 +0100
3.3 @@ -0,0 +1,10 @@
3.4 +#ifndef __FILEIO_H__
3.5 +#define __FILEIO_H__
3.6 +
3.7 +G_BEGIN_DECLS
3.8 +
3.9 +void plover__file_io_init(void);
3.10 +
3.11 +G_END_DECLS
3.12 +
3.13 +#endif /* __FILEIO_H__ */
4.1 --- a/plover/import-yum.c Thu Jun 16 12:11:14 2016 +0100
4.2 +++ b/plover/import-yum.c Thu Jun 16 18:00:21 2016 +0100
4.3 @@ -307,18 +307,19 @@
4.4
4.5 #define XML_BUFFER_SIZE 4096
4.6
4.7 -struct razor_set *plover_razor_set_create_from_yum(const char *base,
4.8 +struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri,
4.9 GError **error)
4.10 {
4.11 struct yum_context ctx;
4.12 gchar *s;
4.13 void *buf;
4.14 - int len;
4.15 - gzFile primary, filelists;
4.16 + gssize len;
4.17 + GFile *file;
4.18 + GFileInputStream *stream;
4.19 + GInputStream *primary,*filelists;
4.20 + GZlibDecompressor *decompressor;
4.21 XML_ParsingStatus status;
4.22 struct razor_set *set;
4.23 - int errnum;
4.24 - const char *errstr,*errobj;
4.25 plover__file_io_init();
4.26 ctx.importer=razor_importer_create();
4.27 ctx.state=YUM_STATE_BEGIN;
4.28 @@ -332,27 +333,30 @@
4.29 XML_SetElementHandler(ctx.filelists_parser,yum_filelists_start_element,
4.30 yum_filelists_end_element);
4.31 XML_SetCharacterDataHandler(ctx.filelists_parser,yum_character_data);
4.32 - errno=0;
4.33 - s=g_build_filename(base,"repodata","primary.xml.gz",NULL);
4.34 - primary=gzopen(s,"rb");
4.35 - if (!primary)
4.36 - {
4.37 - g_set_error(error,RAZOR_POSIX_ERROR,errno?errno:ENOMEM,
4.38 - "%s: %s",s,strerror(errno));
4.39 - g_free(s);
4.40 + s=g_build_filename(base_uri,"repodata","primary.xml.gz",NULL);
4.41 + file=g_file_new_for_uri(s);
4.42 + g_free(s);
4.43 + stream=g_file_read(file,NULL,error);
4.44 + g_object_unref(file);
4.45 + if (!stream)
4.46 return NULL;
4.47 - }
4.48 + decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP);
4.49 + primary=g_converter_input_stream_new(G_INPUT_STREAM(stream),
4.50 + G_CONVERTER(decompressor));
4.51 + g_object_unref(stream);
4.52 + g_object_unref(decompressor);
4.53 + s=g_build_filename(base_uri,"repodata","filelists.xml.gz",NULL);
4.54 + file=g_file_new_for_uri(s);
4.55 g_free(s);
4.56 - s=g_build_filename(base,"repodata","filelists.xml.gz",NULL);
4.57 - filelists=gzopen(s,"rb");
4.58 - if (!filelists)
4.59 - {
4.60 - g_set_error(error,RAZOR_POSIX_ERROR,errno?errno:ENOMEM,
4.61 - "%s: %s",s,strerror(errno));
4.62 - g_free(s);
4.63 + stream=g_file_read(file,NULL,error);
4.64 + g_object_unref(file);
4.65 + if (!stream)
4.66 return NULL;
4.67 - }
4.68 - g_free(s);
4.69 + decompressor=g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_GZIP);
4.70 + filelists=g_converter_input_stream_new(G_INPUT_STREAM(stream),
4.71 + G_CONVERTER(decompressor));
4.72 + g_object_unref(stream);
4.73 + g_object_unref(decompressor);
4.74 ctx.current_parser=ctx.primary_parser;
4.75 ctx.current=0;
4.76 do
4.77 @@ -367,29 +371,13 @@
4.78 case XML_INITIALIZED:
4.79 buf=XML_GetBuffer(ctx.current_parser,XML_BUFFER_SIZE);
4.80 if (ctx.current_parser==ctx.primary_parser)
4.81 - len=gzread(primary,buf,XML_BUFFER_SIZE);
4.82 + len=g_input_stream_read(G_INPUT_STREAM(primary),buf,
4.83 + XML_BUFFER_SIZE,NULL,error);
4.84 else
4.85 - len=gzread(filelists,buf,XML_BUFFER_SIZE);
4.86 + len=g_input_stream_read(G_INPUT_STREAM(filelists),buf,
4.87 + XML_BUFFER_SIZE,NULL,error);
4.88 if (len<0)
4.89 - {
4.90 - if (ctx.current_parser==ctx.primary_parser)
4.91 - {
4.92 - errstr=gzerror(primary,&errnum);
4.93 - errobj="primary.xml.gz";
4.94 - }
4.95 - else
4.96 - {
4.97 - errstr=gzerror(filelists,&errnum);
4.98 - errobj="filelists.xml.gz";
4.99 - }
4.100 - if (errnum==Z_ERRNO)
4.101 - g_set_error(error,PLOVER_POSIX_ERROR,errno,"%s: %s",
4.102 - errobj,strerror(errno));
4.103 - else
4.104 - g_set_error(error,RAZOR_ZLIB_ERROR,errnum,"%s: %s",
4.105 - errobj,errstr);
4.106 return NULL;
4.107 - }
4.108 XML_ParseBuffer(ctx.current_parser,len,!len);
4.109 break;
4.110 case XML_FINISHED:
4.111 @@ -398,8 +386,8 @@
4.112 } while (status.parsing!=XML_FINISHED);
4.113 XML_ParserFree(ctx.primary_parser);
4.114 XML_ParserFree(ctx.filelists_parser);
4.115 - gzclose(primary);
4.116 - gzclose(filelists);
4.117 + g_object_unref(primary);
4.118 + g_object_unref(filelists);
4.119 set=razor_importer_finish(ctx.importer);
4.120 #if RAZOR_HEADER_VERSION_MIN<=1
4.121 /*
4.122 @@ -415,3 +403,17 @@
4.123 #endif
4.124 return set;
4.125 }
4.126 +
4.127 +struct razor_set *plover_razor_set_create_from_yum(const char *base,
4.128 + GError **error)
4.129 +{
4.130 + gchar *base_uri;
4.131 + GFile *file;
4.132 + struct razor_set *set;
4.133 + file=g_file_new_for_path(base);
4.134 + base_uri=g_file_get_uri(file);
4.135 + g_object_unref(file);
4.136 + set=plover_razor_set_create_from_yum_uri(base_uri,error);
4.137 + g_free(base_uri);
4.138 + return set;
4.139 +}
5.1 --- a/plover/plover.h Thu Jun 16 12:11:14 2016 +0100
5.2 +++ b/plover/plover.h Thu Jun 16 18:00:21 2016 +0100
5.3 @@ -74,6 +74,8 @@
5.4 void plover_propagate_razor_error(GError **dest,struct razor_error *src);
5.5 void plover_propagate_g_error(struct razor_error **dest,GError *src);
5.6
5.7 +struct razor_set *plover_razor_set_create_from_yum_uri(const char *base_uri,
5.8 + GError **error);
5.9 struct razor_set *plover_razor_set_create_from_yum(const char *base,
5.10 GError **error);
5.11
5.12 @@ -90,6 +92,7 @@
5.13 int plover_installed_files_match_prefix(const char *prefix);
5.14
5.15 struct comps *plover_comps_new(void);
5.16 +struct comps *plover_comps_new_from_uri(const char *uri);
5.17 struct comps *plover_comps_new_from_file(const char *filename);
5.18 void plover_comps_free(struct comps *comps);
5.19 struct comps_group *plover_comps_lookup_group(struct comps *comps,
6.1 --- a/plover/razor.c Thu Jun 16 12:11:14 2016 +0100
6.2 +++ b/plover/razor.c Thu Jun 16 18:00:21 2016 +0100
6.3 @@ -177,16 +177,30 @@
6.4 return 0;
6.5 }
6.6
6.7 +gboolean plover_install_uri(const char *base_uri,const char *prefix,char **pkgs,
6.8 + GError **error)
6.9 +{
6.10 + gboolean retval;
6.11 + PloverTransaction *transaction;
6.12 + transaction=plover_transaction_new_install_uri(base_uri,prefix,pkgs,error);
6.13 + if (!transaction)
6.14 + return FALSE;
6.15 + retval=plover_transaction_commit(transaction,NULL,error);
6.16 + g_object_unref(transaction);
6.17 + return retval;
6.18 +}
6.19 +
6.20 gboolean plover_install(const char *base,const char *prefix,char **pkgs,
6.21 GError **error)
6.22 {
6.23 gboolean retval;
6.24 - PloverTransaction *transaction;
6.25 - transaction=plover_transaction_new_install(base,prefix,pkgs,error);
6.26 - if (!transaction)
6.27 - return FALSE;
6.28 - retval=plover_transaction_commit(transaction,NULL,error);
6.29 - g_object_unref(transaction);
6.30 + GFile *file;
6.31 + gchar *base_uri;
6.32 + file=g_file_new_for_path(base);
6.33 + base_uri=g_file_get_uri(file);
6.34 + g_object_unref(file);
6.35 + retval=plover_install_uri(base_uri,prefix,pkgs,error);
6.36 + g_free(base_uri);
6.37 return retval;
6.38 }
6.39
7.1 --- a/plover/repository.c Thu Jun 16 12:11:14 2016 +0100
7.2 +++ b/plover/repository.c Thu Jun 16 18:00:21 2016 +0100
7.3 @@ -102,7 +102,7 @@
7.4 return g_strconcat(name,"-",v,".",arch,".rpm",NULL);
7.5 }
7.6
7.7 -PloverRepository *plover_repository_new_from_yum(const char *base,
7.8 +PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri,
7.9 GError **error)
7.10 {
7.11 char *s;
7.12 @@ -114,15 +114,9 @@
7.13 PloverPackageSet *set;
7.14 PloverRepository *repository;
7.15 PloverRepositoryPrivate *priv;
7.16 - GFile *file;
7.17 - gchar *uri;
7.18 - imported=plover_razor_set_create_from_yum(base,error);
7.19 + imported=plover_razor_set_create_from_yum_uri(base_uri,error);
7.20 if (!imported)
7.21 return NULL;
7.22 - file=g_file_new_for_path(base);
7.23 - uri=g_file_get_uri(file);
7.24 - g_object_unref(file);
7.25 - g_message("Using %s as URI",uri);
7.26 set=plover_package_set_new_from_razor(imported);
7.27 razor_set_unref(imported);
7.28 repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL);
7.29 @@ -133,14 +127,27 @@
7.30 RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST))
7.31 {
7.32 s=rpm_filename(name,version,arch);
7.33 - g_ptr_array_add(uris,g_build_filename(uri,"rpms",s,NULL));
7.34 + g_ptr_array_add(uris,g_build_filename(base_uri,"rpms",s,NULL));
7.35 free(s);
7.36 }
7.37 razor_package_iterator_destroy(pi);
7.38 g_ptr_array_add(uris,NULL);
7.39 priv->uris=(gchar **)g_ptr_array_free(uris,FALSE);
7.40 priv->set=set;
7.41 - g_free(uri);
7.42 + return repository;
7.43 +}
7.44 +
7.45 +PloverRepository *plover_repository_new_from_yum(const char *base,
7.46 + GError **error)
7.47 +{
7.48 + PloverRepository *repository;
7.49 + gchar *base_uri;
7.50 + GFile *file;
7.51 + file=g_file_new_for_path(base);
7.52 + base_uri=g_file_get_uri(file);
7.53 + g_object_unref(file);
7.54 + repository=plover_repository_new_from_yum_uri(base_uri,error);
7.55 + g_free(base_uri);
7.56 return repository;
7.57 }
7.58
8.1 --- a/plover/repository.h Thu Jun 16 12:11:14 2016 +0100
8.2 +++ b/plover/repository.h Thu Jun 16 18:00:21 2016 +0100
8.3 @@ -37,6 +37,8 @@
8.4 GType plover_repository_get_type(void) G_GNUC_CONST;
8.5 PloverRepository *plover_repository_new_from_files(const char **filenames,
8.6 GError **error);
8.7 +PloverRepository *plover_repository_new_from_yum_uri(const char *base_uri,
8.8 + GError **error);
8.9 PloverRepository *plover_repository_new_from_yum(const char *base,
8.10 GError **error);
8.11 PloverPackageSet *
9.1 --- a/plover/transaction.c Thu Jun 16 12:11:14 2016 +0100
9.2 +++ b/plover/transaction.c Thu Jun 16 18:00:21 2016 +0100
9.3 @@ -493,14 +493,14 @@
9.4 }
9.5
9.6 gboolean
9.7 - plover_transaction_set_upstream_from_yum(PloverTransaction *transaction,
9.8 - const char *base,GError **error)
9.9 + plover_transaction_set_upstream_from_yum_uri(PloverTransaction *transaction,
9.10 + const char *base_uri,GError **error)
9.11 {
9.12 gboolean retval;
9.13 PloverRepository *upstream;
9.14 g_return_val_if_fail(PLOVER_IS_TRANSACTION(transaction),FALSE);
9.15 g_return_val_if_fail(transaction->upstream == NULL,FALSE);
9.16 - upstream=plover_repository_new_from_yum(base,error);
9.17 + upstream=plover_repository_new_from_yum_uri(base_uri,error);
9.18 if (!upstream)
9.19 return FALSE;
9.20 retval=plover_transaction_set_upstream(transaction,upstream,error);
9.21 @@ -508,6 +508,21 @@
9.22 return retval;
9.23 }
9.24
9.25 +gboolean
9.26 + plover_transaction_set_upstream_from_yum(PloverTransaction *transaction,
9.27 + const char *base,GError **error)
9.28 +{
9.29 + gboolean retval;
9.30 + gchar *base_uri;
9.31 + GFile *file;
9.32 + file=g_file_new_for_path(base);
9.33 + base_uri=g_file_get_uri(file);
9.34 + g_object_unref(file);
9.35 + retval=plover_transaction_set_upstream_from_yum_uri(transaction,base_uri,error);
9.36 + g_free(base_uri);
9.37 + return retval;
9.38 +}
9.39 +
9.40 gboolean plover_transaction_install(PloverTransaction *transaction,
9.41 char **pkgs,GError **error)
9.42 {
9.43 @@ -581,13 +596,13 @@
9.44 return TRUE;
9.45 }
9.46
9.47 -PloverTransaction *plover_transaction_new_install(const char *base,
9.48 +PloverTransaction *plover_transaction_new_install_uri(const char *base_uri,
9.49 const char *prefix,char **pkgs,GError **error)
9.50 {
9.51 PloverTransaction *transaction;
9.52 transaction=plover_transaction_new();
9.53 plover_transaction_set_prefix(transaction,prefix);
9.54 - if (!plover_transaction_set_upstream_from_yum(transaction,base,error))
9.55 + if (!plover_transaction_set_upstream_from_yum_uri(transaction,base_uri,error))
9.56 {
9.57 g_object_unref(transaction);
9.58 return NULL;
9.59 @@ -600,6 +615,20 @@
9.60 return transaction;
9.61 }
9.62
9.63 +PloverTransaction *plover_transaction_new_install(const char *base,
9.64 + const char *prefix,char **pkgs,GError **error)
9.65 +{
9.66 + PloverTransaction *transaction;
9.67 + gchar *base_uri;
9.68 + GFile *file;
9.69 + file=g_file_new_for_path(base);
9.70 + base_uri=g_file_get_uri(file);
9.71 + g_object_unref(file);
9.72 + transaction=plover_transaction_new_install_uri(base_uri,prefix,pkgs,error);
9.73 + g_free(base_uri);
9.74 + return transaction;
9.75 +}
9.76 +
9.77 PloverTransaction *plover_transaction_new_update(const char *base,
9.78 const char *prefix,char **pkgs,GError **error)
9.79 {
10.1 --- a/plover/transaction.h Thu Jun 16 12:11:14 2016 +0100
10.2 +++ b/plover/transaction.h Thu Jun 16 18:00:21 2016 +0100
10.3 @@ -52,10 +52,15 @@
10.4 gboolean plover_transaction_set_upstream(PloverTransaction *transaction,
10.5 PloverRepository *upstream,GError **error);
10.6 gboolean
10.7 + plover_transaction_set_upstream_from_yum_uri(PloverTransaction *transaction,
10.8 + const char *base_uri,GError **error);
10.9 +gboolean
10.10 plover_transaction_set_upstream_from_yum(PloverTransaction *transaction,
10.11 const char *base,GError **error);
10.12 gboolean plover_transaction_install(PloverTransaction *transaction,
10.13 char **pkgs,GError **error);
10.14 +PloverTransaction *plover_transaction_new_install_uri(const char *base_uri,
10.15 + const char *prefix,char **pkgs,GError **error);
10.16 PloverTransaction *plover_transaction_new_install(const char *base,
10.17 const char *prefix,char **pkgs,GError **error);
10.18 gboolean plover_transaction_update(PloverTransaction *transaction,
11.1 --- a/tests/plover-gtk/Makefile.am Thu Jun 16 12:11:14 2016 +0100
11.2 +++ b/tests/plover-gtk/Makefile.am Thu Jun 16 18:00:21 2016 +0100
11.3 @@ -3,11 +3,13 @@
11.4 LDADD=../../plover-gtk/libplover-gtk.la ../../plover/libplover.la \
11.5 $(PLOVER_GTK_LIBS)
11.6
11.7 +TEST_EXTENSIONS =
11.8 +
11.9 if HAVE_CHECK_TOOLS
11.10
11.11 TESTS = $(txt_tests) $(gui_tests:=.xvfb)
11.12 TESTS_ENVIRONMENT = gtk_srcdir="$(top_srcdir)/plover-gtk"
11.13 -TEST_EXTENSIONS = .xvfb
11.14 +TEST_EXTENSIONS += .xvfb
11.15 XVFB_LOG_COMPILER = $(top_srcdir)/tests/xvfb-run
11.16 XVFB_LOG_FLAGS = --auto-servernum --auth-file .Xauthority
11.17
12.1 --- a/tests/plover/Makefile.am Thu Jun 16 12:11:14 2016 +0100
12.2 +++ b/tests/plover/Makefile.am Thu Jun 16 18:00:21 2016 +0100
12.3 @@ -11,10 +11,32 @@
12.4
12.5 test_programs = test-import-yum test-package test-repository test-packageset \
12.6 test-transaction test-comps test-log test-util test-razor test-vector \
12.7 - test-exception-handler
12.8 + test-exception-handler test-fileio
12.9
12.10 test_transaction_LDADD = $(LDADD) $(LUA_POSIX_LIBS)
12.11 test_razor_LDADD = $(LDADD) $(LUA_POSIX_LIBS)
12.12 +test_fileio_SOURCES = test-fileio.c test-fileio-gresource.c
12.13 +test_fileio_DEPENDENCIES = test-fileio-gresource.h
12.14 +test_fileio_LDADD = $(LDADD) $(LUA_POSIX_LIBS)
12.15 +
12.16 +test-fileio-gresource.c: test-fileio.gresource.xml
12.17 + $(AM_V_GEN)$(COMPILE_RESOURCES) --target=$@ --generate \
12.18 + --sourcedir=../yum-repo-test-dir --manual-register \
12.19 + test-fileio.gresource.xml
12.20 +
12.21 +test-fileio-gresource.h: test-fileio.gresource.xml
12.22 + $(AM_V_GEN)$(COMPILE_RESOURCES) --target=$@ --generate \
12.23 + --sourcedir=../yum-repo-test-dir --manual-register \
12.24 + test-fileio.gresource.xml
12.25 +
12.26 +test-fileio.gresource.xml:
12.27 + $(AM_V_GEN)(cd ../yum-repo-test-dir; \
12.28 + echo '<?xml version="1.0" encoding="UTF-8"?>'; \
12.29 + echo '<gresources>'; \
12.30 + echo '<gresource prefix="/uk/co/juiblex/project/plover">'; \
12.31 + find . -type f -print | sed -e 's/^\.\/\(.*\)$$/<file>\1<\/file>/'; \
12.32 + echo '</gresource>'; \
12.33 + echo '</gresources>') > $@
12.34
12.35 endif
12.36
12.37 @@ -23,3 +45,6 @@
12.38
12.39 clean-local:
12.40 rm -rf test-log-rotate razor-test-dir-*
12.41 +
12.42 +CLEANFILES = test-fileio-gresource.c test-fileio-gresource.h \
12.43 + test-fileio.gresource.xml
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/tests/plover/test-fileio.c Thu Jun 16 18:00:21 2016 +0100
13.3 @@ -0,0 +1,113 @@
13.4 +/*
13.5 + * Copyright (C) 2009, 2011, 2016 J. Ali Harlow <ali@juiblex.co.uk>
13.6 + *
13.7 + * This program is free software; you can redistribute it and/or modify
13.8 + * it under the terms of the GNU General Public License as published by
13.9 + * the Free Software Foundation; either version 2 of the License, or
13.10 + * (at your option) any later version.
13.11 + *
13.12 + * This program is distributed in the hope that it will be useful,
13.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
13.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13.15 + * GNU General Public License for more details.
13.16 + *
13.17 + * You should have received a copy of the GNU General Public License along
13.18 + * with this program; if not, write to the Free Software Foundation, Inc.,
13.19 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
13.20 + */
13.21 +
13.22 +#include <stdlib.h>
13.23 +#include <stdio.h>
13.24 +#include <string.h>
13.25 +#include <limits.h>
13.26 +#include <lua.h>
13.27 +#include "config.h"
13.28 +#include "plover/plover.h"
13.29 +#include "test-fileio-gresource.h"
13.30 +
13.31 +LUALIB_API int luaopen_posix(lua_State *L);
13.32 +
13.33 +void test_resource(void)
13.34 +{
13.35 + gchar *prefix,*root,*root_uri,*s;
13.36 + int ch,changed;
13.37 + struct comps *comps;
13.38 + struct comps_group *group;
13.39 + struct comps_requirement *pkg;
13.40 + struct plover_vector *packages=NULL;
13.41 + GError *error=NULL;
13.42 + GFile *file;
13.43 + test_fileio_register_resource();
13.44 + root=g_strdup("razor-test-dir-XXXXXX");
13.45 + g_assert(mkdtemp(root));
13.46 + file=g_file_new_for_path(root);
13.47 + root_uri=g_file_get_uri(file);
13.48 + g_object_unref(file);
13.49 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
13.50 + g_free(root_uri);
13.51 + comps=plover_comps_new_from_uri(
13.52 + "resource:///uk/co/juiblex/project/plover/repodata/comps.xml");
13.53 + if (!comps)
13.54 + {
13.55 + perror("resource:///uk/co/juiblex/project/plover/repodata/comps.xml");
13.56 + exit(1);
13.57 + }
13.58 + prefix=plover_default_prefix_for_vendor(comps->vendor);
13.59 + group=plover_comps_lookup_group(comps,"base");
13.60 + if (!group)
13.61 + {
13.62 + fprintf(stderr,"No base group found in comps.xml\n");
13.63 + exit(1);
13.64 + }
13.65 + packages=plover_vector_new();
13.66 + do
13.67 + {
13.68 + changed=0;
13.69 + for(pkg=group->packages;pkg;pkg=pkg->next)
13.70 + {
13.71 + if (plover_vector_contains(packages,pkg->name))
13.72 + continue;
13.73 + if (pkg->type==COMPS_REQUIREMENT_DEFAULT ||
13.74 + pkg->type==COMPS_REQUIREMENT_MANDATORY ||
13.75 + pkg->type==COMPS_REQUIREMENT_CONDITIONAL && (!pkg->requires ||
13.76 + plover_vector_contains(packages,pkg->requires)))
13.77 + {
13.78 + changed++;
13.79 + plover_vector_append(packages,pkg->name);
13.80 + }
13.81 + }
13.82 + } while(changed);
13.83 + plover_comps_free(comps);
13.84 + if (!packages->len)
13.85 + {
13.86 + fprintf(stderr,"No packages to install\n");
13.87 + exit(1);
13.88 + }
13.89 + if (!plover_install_uri("resource:///uk/co/juiblex/project/plover",prefix,
13.90 + packages->strings,&error))
13.91 + {
13.92 + fprintf(stderr,"%s\n",error->message);
13.93 + g_error_free(error);
13.94 + exit(1);
13.95 + }
13.96 + plover_vector_free(packages);
13.97 + g_free(prefix);
13.98 + g_unsetenv("RAZOR_ROOT");
13.99 + test_fileio_unregister_resource();
13.100 + s=g_build_filename(root,"usr/bin/zsh",NULL);
13.101 + g_free(root);
13.102 + if (!g_file_test(s,G_FILE_TEST_EXISTS))
13.103 + g_error("%s: Missing file",s);
13.104 + g_free(s);
13.105 +}
13.106 +
13.107 +int main(int argc,char **argv)
13.108 +{
13.109 + int retval;
13.110 + razor_set_lua_loader("posix",(void (*)())luaopen_posix);
13.111 + g_test_init(&argc,&argv,NULL);
13.112 + g_test_bug_base("mailto:ali@juiblex.co.uk");
13.113 + g_test_add_func("/fileio/resource",test_resource);
13.114 + retval=g_test_run();
13.115 + return retval;
13.116 +}