# HG changeset patch # User J. Ali Harlow # Date 1466075474 -3600 # Node ID 419a02fa70dba9493ac8788a0e3b6ea2dd6e0931 # Parent bd50a4b7ab6837d2432a49ecb514dce540f2a3a2 Port to razor 0.6.3.59 diff -r bd50a4b7ab68 -r 419a02fa70db plover-gtk/transactionhelper.c --- a/plover-gtk/transactionhelper.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover-gtk/transactionhelper.c Thu Jun 16 12:11:14 2016 +0100 @@ -95,6 +95,7 @@ static void plover_transaction_helper_class_init(PloverTransactionHelperClass *klass) { + plover__file_io_init(); GObjectClass *gobject_class=G_OBJECT_CLASS(klass); gobject_class->finalize= (void (*)(GObject *))plover_transaction_helper_finalize; diff -r bd50a4b7ab68 -r 419a02fa70db plover/fileio.c --- a/plover/fileio.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/fileio.c Thu Jun 16 12:11:14 2016 +0100 @@ -17,6 +17,8 @@ */ #include +#include +#include #include #include #include @@ -25,6 +27,158 @@ static GList *open_razor_files; +static gboolean has_valid_scheme(const char *uri) +{ + /* + * RFC 2396 defines valid schemes as: + * scheme = alpha *( alpha | digit | "+" | "-" | "." ) + */ + const char *s; + if (!g_ascii_isalpha(*uri)) + return FALSE; + for(s=uri+1;;s++) + if (*s==':') + return TRUE; + else if (!g_ascii_isalnum(*s) && *s!='+' && *s!='-' && *s!='.') + return FALSE; +} + +static GFile *file_for_uri(const char *uri) +{ + GFile *file; + if (!has_valid_scheme(uri)) + { + g_warning("%s: Not a valid URI",uri); + file=g_file_new_for_path(uri); + } + else + { + if (strstr(uri+1,"file:/")) + g_warning("%s: Implausible URI",uri); + file=g_file_new_for_uri(uri); + } + return file; +} + +int file_mkdir(const char *uri,mode_t mode,struct razor_error **error) +{ + GFile *file; + GFileInfo *info; + gchar *path; + int retval; + GError *err=NULL; + g_message("file_mkdir(%s)",uri); + file=file_for_uri(uri); + path=g_file_get_path(file); + if (path) + { + retval=razor_file_default_mkdir(path,mode,error); + g_free(path); + } + else if (!g_file_make_directory(file,NULL,&err)) + { + retval=-1; + if (g_error_matches(err,G_IO_ERROR,G_IO_ERROR_EXISTS)) + { + info=g_file_query_info(file,G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,NULL,NULL); + if (info) + { + g_clear_error(&err); + if (g_file_info_get_file_type(info)==G_FILE_TYPE_DIRECTORY) + retval=0; + else + razor_set_error(error,RAZOR_POSIX_ERROR,EEXIST,uri, + "Not a directory"); + g_object_unref(info); + } + } + if (err) + plover_propagate_g_error(error,err); + } + else + retval=0; + g_object_unref(file); + return retval; +} + +int file_unlink(const char *uri,struct razor_error **error) +{ + GFile *file; + gchar *path; + int retval; + GError *err=NULL; + g_message("file_unlink(%s)",uri); + file=file_for_uri(uri); + path=g_file_get_path(file); + if (path) + { + retval=razor_file_default_unlink(path,error); + g_free(path); + } + else if (!g_file_delete(file,NULL,&err)) + { + plover_propagate_g_error(error,err); + retval=-1; + } + else + retval=0; + g_object_unref(file); + return retval; +} + +int file_open(const char *uri,int flags,mode_t mode,struct razor_error **error) +{ + GFile *file; + gchar *path; + int retval; + GError *err=NULL; + g_message("file_open(%s)",uri); + file=file_for_uri(uri); + path=g_file_get_path(file); + if (path) + { + retval=razor_file_default_open(path,flags,mode,error); + g_free(path); + } + else + { + razor_set_error(error,RAZOR_GENERAL_ERROR,RAZOR_GENERAL_ERROR_FAILED, + uri,"File is not local"); + retval=-1; + } + g_object_unref(file); + return retval; +} + +int file_move(const char *src_uri,const char *dst_uri, + struct razor_error **error) +{ + GFile *src,*dst; + gchar *src_path,*dst_path; + int retval; + GError *err=NULL; + g_message("file_move(%s,%s)",src_uri,dst_uri); + src=file_for_uri(src_uri); + dst=file_for_uri(dst_uri); + src_path=g_file_get_path(src); + dst_path=g_file_get_path(dst); + if (src_path && dst_path) + retval=razor_file_default_move(src_path,dst_path,error); + else if (!g_file_move(src,dst,G_FILE_COPY_OVERWRITE,NULL,NULL,NULL,&err)) + { + plover_propagate_g_error(error,err); + retval=-1; + } + else + retval=0; + g_free(src_path); + g_free(dst_path); + g_object_unref(src); + g_object_unref(dst); + return retval; +} + static void *file_get_contents(const char *uri,size_t *length,int private, struct razor_error **error) { @@ -35,7 +189,7 @@ gsize len; GError *err=NULL; g_message("file_get_contents(%s)",uri); - file=g_file_new_for_uri(uri); + file=file_for_uri(uri); path=g_file_get_path(file); if (path) { @@ -80,15 +234,183 @@ return retval; } +int file_is_directory(const char *uri,struct razor_error **error) +{ + GFile *file; + GFileInfo *info; + gchar *path; + int retval; + GError *err=NULL; + g_message("file_is_directory(%s)",uri); + file=file_for_uri(uri); + path=g_file_get_path(file); + if (path) + { + retval=razor_file_default_is_directory(path,error); + g_free(path); + } + else + { + info=g_file_query_info(file,G_FILE_ATTRIBUTE_STANDARD_TYPE, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,NULL,&err); + if (info) + { + if (g_file_info_get_file_type(info)==G_FILE_TYPE_DIRECTORY) + retval=1; + else + retval=0; + g_object_unref(info); + } + else + { + retval=-1; + plover_propagate_g_error(error,err); + } + } + g_object_unref(file); + return retval; +} + +char *file_mkdtemp_near(const char *uri,const char *template, + struct razor_error **error) +{ + GFile *file; + gchar *path,*tmpuri; + char *tmppath,*retval; + GError *err=NULL; + g_message("file_mkdtemp_near(%s)",uri); + file=file_for_uri(uri); + path=g_file_get_path(file); + g_object_unref(file); + if (path) + { + tmppath=razor_file_default_mkdtemp_near(path,template,error); + g_free(path); + if (tmppath) + { + file=g_file_new_for_path(tmppath); + tmpuri=g_file_get_uri(file); + g_object_unref(file); + retval=strdup(tmpuri); + g_free(tmpuri); + } + else + retval=NULL; + } + else + { + razor_set_error(error,RAZOR_GENERAL_ERROR,RAZOR_GENERAL_ERROR_FAILED, + uri,"File is not local"); + retval=NULL; + } + return retval; +} + +struct file_dir { + void *razor_file_default; + GFileEnumerator *enumerator; +}; + +void *file_opendir(const char *uri,struct razor_error **error) +{ + GFile *file; + gchar *path; + struct file_dir *dir; + GError *err=NULL; + g_message("file_opendir(%s)",uri); + dir=g_new0(struct file_dir,1); + file=file_for_uri(uri); + path=g_file_get_path(file); + if (path) + { + dir->razor_file_default=razor_file_default_opendir(path,error); + if (!dir->razor_file_default) + { + g_free(dir); + dir=NULL; + } + g_free(path); + } + else + { + dir->enumerator=g_file_enumerate_children(file, + G_FILE_ATTRIBUTE_STANDARD_NAME,G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + NULL,&err); + if (!dir->enumerator) + { + g_free(dir); + dir=NULL; + plover_propagate_g_error(error,err); + } + } + g_object_unref(file); + return dir; +} + +char *file_readdir(void *dp,struct razor_error **error) +{ + struct file_dir *dir=dp; + char *name; + GError *err=NULL; + GFileInfo *info; + g_message("file_readdir(%p)",dp); + if (dir->razor_file_default) + name=razor_file_default_readdir(dir->razor_file_default,error); + else + { + info=g_file_enumerator_next_file(dir->enumerator,NULL,&err); + if (!info) + { + name=NULL; + plover_propagate_g_error(error,err); + } + else + { + name=strdup(g_file_info_get_name(info)); + g_object_unref(info); + } + } + return name; +} + +int file_closedir(void *dp,struct razor_error **error) +{ + struct file_dir *dir=dp; + int retval; + GError *err=NULL; + g_message("file_closedir(%p)",dp); + if (dir->razor_file_default) + retval=razor_file_default_closedir(dir->razor_file_default,error); + else + { + retval=g_file_enumerator_close(dir->enumerator,NULL,&err)?0:-1; + if (retval) + plover_propagate_g_error(error,err); + g_object_unref(dir->enumerator); + } + g_free(dir); + return retval; +} + void plover__file_io_init(void) { static gsize init=0; - struct razor_file_vtable file_vtable; + struct razor_file_vtable file_vtable={0,}; g_message("plover__file_io_init()"); if (g_once_init_enter(&init)) { + file_vtable.structure_size=sizeof(file_vtable); + file_vtable.mkdir=file_mkdir; + file_vtable.unlink=file_unlink; + file_vtable.open=file_open; + file_vtable.move=file_move; file_vtable.get_contents=file_get_contents; file_vtable.free_contents=file_free_contents; + file_vtable.is_directory=file_is_directory; + file_vtable.mkdtemp_near=file_mkdtemp_near; + file_vtable.opendir=file_opendir; + file_vtable.readdir=file_readdir; + file_vtable.closedir=file_closedir; razor_file_set_vtable(&file_vtable); g_once_init_leave(&init,1); } diff -r bd50a4b7ab68 -r 419a02fa70db plover/import-yum.c --- a/plover/import-yum.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/import-yum.c Thu Jun 16 12:11:14 2016 +0100 @@ -319,6 +319,7 @@ struct razor_set *set; int errnum; const char *errstr,*errobj; + plover__file_io_init(); ctx.importer=razor_importer_create(); ctx.state=YUM_STATE_BEGIN; ctx.primary_parser=XML_ParserCreate(NULL); diff -r bd50a4b7ab68 -r 419a02fa70db plover/packageset.c --- a/plover/packageset.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/packageset.c Thu Jun 16 12:11:14 2016 +0100 @@ -85,6 +85,7 @@ static void plover_package_set_class_init(PloverPackageSetClass *klass) { + plover__file_io_init(); GObjectClass *oclass=G_OBJECT_CLASS(klass); oclass->finalize=plover_package_set_finalize; oclass->dispose=plover_package_set_dispose; @@ -125,13 +126,19 @@ struct razor_set *system=NULL; PloverPackageSetPrivate *priv; struct razor_error *error=NULL; + GFile *file; + gchar *uri; g_return_val_if_fail(PLOVER_IS_PACKAGE_SET(set),FALSE); + file=g_file_new_for_path(*install_root?install_root:"/"); + uri=g_file_get_uri(file); + g_object_unref(file); + g_message("Using %s as URI",uri); if (exclusive) { - root=razor_root_open(install_root,NULL); + root=razor_root_open(uri,NULL); if (!root) { - if (razor_root_create(install_root,&error)) + if (razor_root_create(uri,&error)) { if (razor_error_get_domain(error)==RAZOR_GENERAL_ERROR && razor_error_get_code(error)== @@ -139,14 +146,15 @@ { razor_error_free(error); error=NULL; - root=razor_root_open(install_root,&error); + root=razor_root_open(uri,&error); } } else - root=razor_root_open(install_root,&error); + root=razor_root_open(uri,&error); if (!root) { plover_propagate_razor_error(err,error); + g_free(uri); return FALSE; } } @@ -155,7 +163,8 @@ razor_set_ref(system); } else - system=razor_root_open_read_only(install_root,&error); + system=razor_root_open_read_only(uri,&error); + g_free(uri); if (error) { g_set_error_literal(err,PLOVER_RAZOR_ERROR,RAZOR_GENERAL_ERROR_FAILED, @@ -362,10 +371,17 @@ struct razor_importer *importer; struct razor_rpm *rpm; struct razor_error *tmp_error=NULL; + GFile *file; + gchar *uri; + plover__file_io_init(); importer=razor_importer_create(); for(i=0;filenames[i];i++) { - rpm=razor_rpm_open(filenames[i],&tmp_error); + file=g_file_new_for_path(filenames[i]); + uri=g_file_get_uri(file); + g_object_unref(file); + rpm=razor_rpm_open(uri,&tmp_error); + g_free(uri); if (!rpm) { razor_importer_destroy(importer); diff -r bd50a4b7ab68 -r 419a02fa70db plover/razor.c --- a/plover/razor.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/razor.c Thu Jun 16 12:11:14 2016 +0100 @@ -61,6 +61,13 @@ int r,count; GError *tmp_error=NULL; PloverPackage *package; + GFile *file; + gchar *uri; + plover__file_io_init(); + file=g_file_new_for_path(*install_root?install_root:"/"); + uri=g_file_get_uri(file); + g_object_unref(file); + g_message("Using %s as URI",uri); switch(stage) { case RAZOR_STAGE_SCRIPTS_PRE: @@ -82,6 +89,7 @@ { razor_atomic_abort(atomic,PLOVER_GENERAL_ERROR, PLOVER_GENERAL_ERROR_CANCELLED,"Operation was cancelled"); + g_free(uri); return -1; } if (action==RAZOR_INSTALL_ACTION_REMOVE) @@ -91,7 +99,7 @@ if (stage==RAZOR_STAGE_FILES) printf(" Removing : %s ",name); r=razor_package_remove(system,plover_package_set_get_razor(next), - atomic,pkg,install_root,count,stage); + atomic,pkg,uri,count,stage); if (stage==RAZOR_STAGE_FILES) printf("\n"); } @@ -104,6 +112,7 @@ plover_propagate_g_error(&error,tmp_error); razor_atomic_propagate_error(atomic,error,NULL); razor_error_free(error); + g_free(uri); return -1; } if (stage==RAZOR_STAGE_FILES) @@ -111,7 +120,7 @@ if (relocations) razor_rpm_set_relocations(rpm,relocations); razor_transaction_fixup_package(trans,pkg,rpm); - r=razor_rpm_install(rpm,atomic,install_root,1,stage); + r=razor_rpm_install(rpm,atomic,uri,1,stage); razor_rpm_close(rpm); if (stage==RAZOR_STAGE_FILES) printf("\n"); @@ -121,7 +130,10 @@ else r=0; if (razor_atomic_in_error_state(atomic)) + { + g_free(uri); return -1; + } else if (r) { if (action==RAZOR_INSTALL_ACTION_REMOVE) @@ -151,6 +163,7 @@ fprintf(stderr,"error: %s, exit status %d\n",t,r); razor_atomic_abort(atomic,PLOVER_SCRIPTLET_ERROR,r,t); g_free(t); + g_free(uri); return -1; } else @@ -160,6 +173,7 @@ name,version,arch,r); } } + g_free(uri); return 0; } @@ -238,8 +252,7 @@ { int len,matches=1; const char *name; - char *install_root; - GFile *file; + const char *install_root; struct razor_set *set; struct razor_package *package; struct razor_package_iterator *pi; @@ -248,12 +261,12 @@ len=strlen(prefix); while(len && prefix[len-1]=='/') len--; - install_root=getenv("RAZOR_ROOT"); + install_root=g_getenv("RAZOR_ROOT"); if (!install_root) - install_root=""; - file=g_file_new_for_path(*install_root?install_root:"/"); - set=razor_root_open_read_only(g_file_get_uri(file),NULL); - g_object_unref(file); + install_root="file:///"; + set=razor_root_open_read_only(install_root,NULL); + if (!set) + g_message("Failed to open root"); if (set) { pi=razor_package_iterator_create(set); diff -r bd50a4b7ab68 -r 419a02fa70db plover/repository.c --- a/plover/repository.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/repository.c Thu Jun 16 12:11:14 2016 +0100 @@ -28,7 +28,7 @@ typedef struct _PloverRepositoryPrivate { PloverPackageSet *set; - gchar **filenames; + gchar **uris; } PloverRepositoryPrivate; #define PLOVER_REPOSITORY_GET_PRIVATE(obj)\ @@ -39,7 +39,7 @@ static void plover_repository_finalize(GObject *obj) { PloverRepositoryPrivate *priv=PLOVER_REPOSITORY_GET_PRIVATE(obj); - g_strfreev(priv->filenames); + g_strfreev(priv->uris); if (G_OBJECT_CLASS(plover_repository_parent_class)->finalize) G_OBJECT_CLASS(plover_repository_parent_class)->finalize(obj); } @@ -54,6 +54,7 @@ static void plover_repository_class_init(PloverRepositoryClass *klass) { + plover__file_io_init(); GObjectClass *oclass=G_OBJECT_CLASS(klass); oclass->finalize=plover_repository_finalize; oclass->dispose=plover_repository_dispose; @@ -67,15 +68,25 @@ PloverRepository *plover_repository_new_from_files(const char **filenames, GError **error) { + int i; PloverPackageSet *set; PloverRepository *repository; PloverRepositoryPrivate *priv; + GFile *file; + gchar *uri; set=plover_package_set_new_from_rpms(filenames,error); if (!set) return NULL; repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL); priv=PLOVER_REPOSITORY_GET_PRIVATE(repository); - priv->filenames=g_strdupv((gchar **)filenames); + priv->uris=g_new(char *,g_strv_length((char **)filenames)+1); + for(i=0;filenames[i];i++) + { + file=g_file_new_for_path(filenames[i]); + priv->uris[i]=g_file_get_uri(file); + g_object_unref(file); + } + priv->uris[i]=NULL; priv->set=set; return repository; } @@ -96,33 +107,40 @@ { char *s; const char *name,*version,*arch; - GPtrArray *filenames; + GPtrArray *uris; struct razor_set *imported; struct razor_package *package; struct razor_package_iterator *pi; PloverPackageSet *set; PloverRepository *repository; PloverRepositoryPrivate *priv; + GFile *file; + gchar *uri; imported=plover_razor_set_create_from_yum(base,error); if (!imported) return NULL; + file=g_file_new_for_path(base); + uri=g_file_get_uri(file); + g_object_unref(file); + g_message("Using %s as URI",uri); 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); - filenames=g_ptr_array_new(); + 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(filenames,g_build_filename(base,"rpms",s,NULL)); + g_ptr_array_add(uris,g_build_filename(uri,"rpms",s,NULL)); free(s); } razor_package_iterator_destroy(pi); - g_ptr_array_add(filenames,NULL); - priv->filenames=(gchar **)g_ptr_array_free(filenames,FALSE); + g_ptr_array_add(uris,NULL); + priv->uris=(gchar **)g_ptr_array_free(uris,FALSE); priv->set=set; + g_free(uri); return repository; } @@ -161,7 +179,7 @@ plover_package_get_arch(package)); return NULL; } - rpm=razor_rpm_open(priv->filenames[nth],&tmp_error); + rpm=razor_rpm_open(priv->uris[nth],&tmp_error); if (!rpm) plover_propagate_razor_error(error,tmp_error); return rpm; diff -r bd50a4b7ab68 -r 419a02fa70db plover/transaction.c --- a/plover/transaction.c Tue Jun 14 12:39:53 2016 +0100 +++ b/plover/transaction.c Thu Jun 16 12:11:14 2016 +0100 @@ -428,22 +428,46 @@ const char *install_root,GError **error) { PloverPackageSet *installed; + const char *install_uri; + gchar *install_path; + GFile *file; + gboolean retval; g_return_val_if_fail(PLOVER_IS_TRANSACTION(transaction),FALSE); if (!install_root) - install_root=g_getenv("RAZOR_ROOT"); - if (!install_root) - install_root=""; - if (transaction->installed && !g_strcmp0(install_root, + { + install_uri=g_getenv("RAZOR_ROOT"); + if (install_uri) + { + file=g_file_new_for_uri(install_uri); + install_path=g_file_get_path(file); + g_object_unref(file); + if (!install_path) + { + g_set_error(error,PLOVER_GENERAL_ERROR, + PLOVER_GENERAL_ERROR_FAILED, + "%s: Not a local URI",install_uri); + return FALSE; + } + } + else + install_path=g_strdup("/"); + } + else + install_path=g_strdup(install_root); + if (transaction->installed && !g_strcmp0(install_path, plover_package_set_get_install_root(transaction->installed))) + { + g_free(install_path); return TRUE; + } installed=plover_package_set_new(); - if (!plover_package_set_open(installed,install_root,TRUE,error)) - { + retval=plover_package_set_open(installed,install_path,TRUE,error); + if (retval) + plover_transaction_set_installed(transaction,installed); + else g_object_unref(installed); - return FALSE; - } - plover_transaction_set_installed(transaction,installed); - return TRUE; + g_free(install_path); + return retval; } struct razor_set *plover_transaction_import_yum(PloverTransaction *transaction, @@ -709,7 +733,8 @@ { int i,changed,is_leaf; uint32_t flags; - const char *install_root; + gchar *install_path; + const char *install_uri; const char *name,*version,*maybe_unused_name; struct razor_set *system,*upstream; struct razor_transaction *trans; @@ -717,6 +742,7 @@ PloverTransaction *transaction; struct plover_vector *package_names; GList *to_remove,*lnk,*lnk2,*what_requires,*what_provides; + GFile *file; struct razor_package *package,*maybe_unused_package; struct razor_property *property; struct razor_package_query *query; @@ -724,15 +750,29 @@ struct razor_property_iterator *removed_props; if (!pkgs) return plover_transaction_new_remove(NULL,error); + install_uri=g_getenv("RAZOR_ROOT"); + if (install_uri) + { + file=g_file_new_for_uri(install_uri); + install_path=g_file_get_path(file); + g_object_unref(file); + if (!install_path) + { + g_set_error(error,PLOVER_GENERAL_ERROR,PLOVER_GENERAL_ERROR_FAILED, + "%s: Not a local URI",install_uri); + return NULL; + } + } + else + install_path=g_strdup("/"); installed=plover_package_set_new(); - install_root=g_getenv("RAZOR_ROOT"); - if (!install_root) - install_root=""; - if (!plover_package_set_open(installed,install_root,TRUE,error)) + if (!plover_package_set_open(installed,install_path,TRUE,error)) { g_object_unref(installed); + g_free(install_path); return NULL; } + g_free(install_path); system=plover_package_set_get_razor(installed); package_names=plover_vector_new(); for(i=0;pkgs[i];i++) diff -r bd50a4b7ab68 -r 419a02fa70db tests/plover-gtk/test-transactionhelper.c --- a/tests/plover-gtk/test-transactionhelper.c Tue Jun 14 12:39:53 2016 +0100 +++ b/tests/plover-gtk/test-transactionhelper.c Thu Jun 16 12:11:14 2016 +0100 @@ -91,14 +91,19 @@ static void test_install_group(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); g_free(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); installed=plover_package_set_new_from_installed("../razor-test-dir",&err); if (!installed) @@ -115,15 +120,20 @@ static void test_remove_group(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; struct plover_vector *packages; char *pkgs[]={"zip",NULL}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); packages=plover_transaction_helper_group_get_default_packages(helper, @@ -148,14 +158,19 @@ static void test_update(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); g_free(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); installed=plover_package_set_new_from_installed("../razor-test-dir",&err); if (!installed) @@ -239,15 +254,20 @@ static void test_run_install(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; struct plover_vector *packages; PloverPackageSet *installed; PloverTransactionHelper *helper; struct run_install_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); installed=plover_package_set_new(); if (!plover_package_set_open(installed,root,TRUE,&err)) @@ -339,15 +359,20 @@ static void test_run_remove(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; struct plover_vector *packages; PloverPackageSet *installed; PloverTransactionHelper *helper; struct run_remove_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); packages= @@ -443,8 +468,9 @@ static void test_run_update(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; struct razor_importer *importer; struct razor_set *downgraded; struct razor_atomic *atomic; @@ -454,7 +480,11 @@ struct run_update_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); installed=plover_package_set_new(); @@ -560,7 +590,8 @@ static void test_check_vendor(void) { int fh; - gchar *root,*s; + gchar *root,*root_uri,*s; + GFile *file; GError *err=NULL; struct razor_importer *importer; struct razor_set *downgraded; @@ -572,7 +603,10 @@ g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE); root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); helper=get_transaction_helper(); plover_transaction_helper_set_check_vendor(helper,TRUE); plover_transaction_helper_set_base(helper,"../yum-repo-test-dir"); @@ -588,8 +622,8 @@ razor_importer_finish_package(importer); downgraded=razor_importer_finish(importer); atomic=razor_atomic_open("Add downgraded packages"); - razor_atomic_make_dirs(atomic,root,"/test/bin/zappy"); - s=g_build_filename(root,"test/bin/zappy",NULL); + razor_atomic_make_dirs(atomic,root_uri,"/test/bin/zappy"); + s=g_build_filename(root_uri,"test/bin/zappy",NULL); fh=razor_atomic_create_file(atomic,s,S_IRWXU|S_IRWXG|S_IRWXO); g_free(s); razor_atomic_close(atomic,fh); @@ -610,6 +644,7 @@ g_object_unref(helper); g_unsetenv("RAZOR_ROOT"); g_free(root); + g_free(root_uri); g_unsetenv("PLOVER_VENDOR_PREFIX"); } @@ -652,17 +687,22 @@ static void test_set_error(void) { - gchar *root; + gchar *root,*root_uri; const char *errmsg; GError *err=NULL; const GError *err2=NULL; + GFile *file; PloverPackageSet *installed; PloverTransactionHelper *helper; struct set_error_baton baton={0,}; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); g_free(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); helper=get_transaction_helper(); installed=plover_package_set_new_from_installed("../razor-test-dir",&err); if (!installed) diff -r bd50a4b7ab68 -r 419a02fa70db tests/plover/test-razor.c --- a/tests/plover/test-razor.c Tue Jun 14 12:39:53 2016 +0100 +++ b/tests/plover/test-razor.c Thu Jun 16 12:11:14 2016 +0100 @@ -27,11 +27,16 @@ static void test_install(void) { char *pkgs[]={"zip",NULL}; - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err)) { g_assert(err && err->message); @@ -62,11 +67,16 @@ static void test_update_noop(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); if (!plover_update("../yum-repo-test-dir","/test",NULL,&err)) { g_assert(err && err->message); @@ -80,11 +90,16 @@ static void test_update_nonexistant(void) { char *pkgs[]={"nonexistant",NULL}; - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); g_assert(!plover_update("../yum-repo-test-dir","/test",pkgs,&err)); g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR, PLOVER_GENERAL_ERROR_NO_SUCH_PACKAGE)); @@ -96,11 +111,16 @@ static void test_remove(void) { char *pkgs[]={"zip",NULL}; - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err)) g_error("test-remove: %s",err->message); if (!plover_remove(pkgs,&err)) @@ -115,11 +135,16 @@ static void test_remove_noop(void) { - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); if (!plover_remove(NULL,&err)) { g_assert(err && err->message); @@ -133,11 +158,16 @@ static void test_remove_nonexistant(void) { char *pkgs[]={"nonexistant",NULL}; - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); g_assert(!plover_remove(pkgs,&err)); g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR, PLOVER_GENERAL_ERROR_NO_SUCH_PACKAGE)); @@ -149,11 +179,16 @@ static void test_remove_warning(void) { char *pkgs[]={"badpostun",NULL}; - gchar *root; + gchar *root,*root_uri; GError *err=NULL; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err)) g_error("test-remove-warning: %s",err->message); if (!plover_remove(pkgs,&err)) @@ -168,7 +203,13 @@ static void test_prefix(void) { - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + gchar *root_uri; + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); g_assert(plover_installed_files_match_prefix("/usr//")); g_assert(!plover_installed_files_match_prefix("/tmp")); g_unsetenv("RAZOR_ROOT"); @@ -176,10 +217,15 @@ static void test_prefix_none(void) { - gchar *root; + gchar *root,*root_uri; + GFile *file; root=g_strdup("razor-test-dir-XXXXXX"); g_assert(mkdtemp(root)); - g_setenv("RAZOR_ROOT",root,TRUE); + file=g_file_new_for_path(root); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); g_assert(plover_installed_files_match_prefix("/any-prefix")); g_unsetenv("RAZOR_ROOT"); g_free(root); diff -r bd50a4b7ab68 -r 419a02fa70db tests/plover/test-transaction.c --- a/tests/plover/test-transaction.c Tue Jun 14 12:39:53 2016 +0100 +++ b/tests/plover/test-transaction.c Thu Jun 16 12:11:14 2016 +0100 @@ -56,8 +56,14 @@ struct razor_package *pkg; enum razor_install_action action; int count; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_update("../yum-repo-test-dir","/test", NULL,&err); if (!transaction && err) @@ -85,8 +91,14 @@ { PloverTransaction *transaction; char *pkgs[]={"nonexistant",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_update("../yum-repo-test-dir","/test", pkgs,&err); g_assert(!transaction); @@ -105,8 +117,14 @@ int count; char *name; char *pkgs[]={"zip",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_install("../yum-repo-test-dir","/test", pkgs,&err); if (!transaction && err) @@ -138,8 +156,14 @@ { PloverTransaction *transaction; char *pkgs[]={"nonexistant",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_install("../yum-repo-test-dir","/test", pkgs,&err); g_assert(!transaction); @@ -158,8 +182,14 @@ int count; char *name; char *pkgs[]={"uninstallable",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_install("../yum-repo-test-dir","/test", pkgs,&err); if (!transaction && err) @@ -185,6 +215,7 @@ g_assert_cmpstr(name,==,"uninstallable"); g_assert(!razor_install_iterator_next(iter,&pkg,&action,&count)); g_assert(!plover_transaction_commit(transaction,NULL,&err)); + g_message("plover_transaction_commit: %s",err->message); g_assert_cmpint(err->domain,==,PLOVER_RAZOR_ERROR); g_assert_cmpint(err->code,==,RAZOR_GENERAL_ERROR_FAILED); g_clear_error(&err); @@ -197,8 +228,14 @@ struct razor_install_iterator *iter; char *pkgs[]={"unsatisfiable",NULL}; const char *s; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_install("../yum-repo-test-dir","/test", pkgs,&err); if (!transaction && err) @@ -226,8 +263,14 @@ int count; char *name; char *pkgs[]={"zappy-tools",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_remove(pkgs,&err); if (!transaction && err) g_error("zappy-tools: %s",err->message); @@ -254,8 +297,14 @@ { PloverTransaction *transaction; char *pkgs[]={"nonexistant",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_remove(pkgs,&err); g_assert(!transaction); g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR, @@ -301,8 +350,14 @@ int count; char *name; char *pkgs[]={"zappy-tools",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_remove_with_leaves(pkgs,&err); if (!transaction && err) g_error("zappy-tools: %s",err->message); @@ -335,8 +390,14 @@ { PloverTransaction *transaction; char *pkgs[]={"nonexistant",NULL}; + gchar *root_uri; GError *err=NULL; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + GFile *file; + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_remove_with_leaves(pkgs,&err); g_assert(!transaction); g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR, @@ -354,9 +415,15 @@ enum razor_install_action action; int count; char *name; + gchar *root_uri; GError *err=NULL; + GFile *file; GList *expected=NULL,*lnk; - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE); + file=g_file_new_for_path("../razor-test-dir"); + root_uri=g_file_get_uri(file); + g_object_unref(file); + g_setenv("RAZOR_ROOT",root_uri,TRUE); + g_free(root_uri); transaction=plover_transaction_new_remove_with_leaves(NULL,&err); if (!transaction && err) g_error("remove-all: %s",err->message);