1.1 --- a/plover-gtk/transactionhelper.c Tue Jun 14 12:39:53 2016 +0100
1.2 +++ b/plover-gtk/transactionhelper.c Thu Jun 16 12:11:14 2016 +0100
1.3 @@ -95,6 +95,7 @@
1.4 static void
1.5 plover_transaction_helper_class_init(PloverTransactionHelperClass *klass)
1.6 {
1.7 + plover__file_io_init();
1.8 GObjectClass *gobject_class=G_OBJECT_CLASS(klass);
1.9 gobject_class->finalize=
1.10 (void (*)(GObject *))plover_transaction_helper_finalize;
2.1 --- a/plover/fileio.c Tue Jun 14 12:39:53 2016 +0100
2.2 +++ b/plover/fileio.c Thu Jun 16 12:11:14 2016 +0100
2.3 @@ -17,6 +17,8 @@
2.4 */
2.5
2.6 #include <stdlib.h>
2.7 +#include <string.h>
2.8 +#include <errno.h>
2.9 #include <razor.h>
2.10 #include <glib.h>
2.11 #include <gio/gio.h>
2.12 @@ -25,6 +27,158 @@
2.13
2.14 static GList *open_razor_files;
2.15
2.16 +static gboolean has_valid_scheme(const char *uri)
2.17 +{
2.18 + /*
2.19 + * RFC 2396 defines valid schemes as:
2.20 + * scheme = alpha *( alpha | digit | "+" | "-" | "." )
2.21 + */
2.22 + const char *s;
2.23 + if (!g_ascii_isalpha(*uri))
2.24 + return FALSE;
2.25 + for(s=uri+1;;s++)
2.26 + if (*s==':')
2.27 + return TRUE;
2.28 + else if (!g_ascii_isalnum(*s) && *s!='+' && *s!='-' && *s!='.')
2.29 + return FALSE;
2.30 +}
2.31 +
2.32 +static GFile *file_for_uri(const char *uri)
2.33 +{
2.34 + GFile *file;
2.35 + if (!has_valid_scheme(uri))
2.36 + {
2.37 + g_warning("%s: Not a valid URI",uri);
2.38 + file=g_file_new_for_path(uri);
2.39 + }
2.40 + else
2.41 + {
2.42 + if (strstr(uri+1,"file:/"))
2.43 + g_warning("%s: Implausible URI",uri);
2.44 + file=g_file_new_for_uri(uri);
2.45 + }
2.46 + return file;
2.47 +}
2.48 +
2.49 +int file_mkdir(const char *uri,mode_t mode,struct razor_error **error)
2.50 +{
2.51 + GFile *file;
2.52 + GFileInfo *info;
2.53 + gchar *path;
2.54 + int retval;
2.55 + GError *err=NULL;
2.56 + g_message("file_mkdir(%s)",uri);
2.57 + file=file_for_uri(uri);
2.58 + path=g_file_get_path(file);
2.59 + if (path)
2.60 + {
2.61 + retval=razor_file_default_mkdir(path,mode,error);
2.62 + g_free(path);
2.63 + }
2.64 + else if (!g_file_make_directory(file,NULL,&err))
2.65 + {
2.66 + retval=-1;
2.67 + if (g_error_matches(err,G_IO_ERROR,G_IO_ERROR_EXISTS))
2.68 + {
2.69 + info=g_file_query_info(file,G_FILE_ATTRIBUTE_STANDARD_TYPE,
2.70 + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,NULL,NULL);
2.71 + if (info)
2.72 + {
2.73 + g_clear_error(&err);
2.74 + if (g_file_info_get_file_type(info)==G_FILE_TYPE_DIRECTORY)
2.75 + retval=0;
2.76 + else
2.77 + razor_set_error(error,RAZOR_POSIX_ERROR,EEXIST,uri,
2.78 + "Not a directory");
2.79 + g_object_unref(info);
2.80 + }
2.81 + }
2.82 + if (err)
2.83 + plover_propagate_g_error(error,err);
2.84 + }
2.85 + else
2.86 + retval=0;
2.87 + g_object_unref(file);
2.88 + return retval;
2.89 +}
2.90 +
2.91 +int file_unlink(const char *uri,struct razor_error **error)
2.92 +{
2.93 + GFile *file;
2.94 + gchar *path;
2.95 + int retval;
2.96 + GError *err=NULL;
2.97 + g_message("file_unlink(%s)",uri);
2.98 + file=file_for_uri(uri);
2.99 + path=g_file_get_path(file);
2.100 + if (path)
2.101 + {
2.102 + retval=razor_file_default_unlink(path,error);
2.103 + g_free(path);
2.104 + }
2.105 + else if (!g_file_delete(file,NULL,&err))
2.106 + {
2.107 + plover_propagate_g_error(error,err);
2.108 + retval=-1;
2.109 + }
2.110 + else
2.111 + retval=0;
2.112 + g_object_unref(file);
2.113 + return retval;
2.114 +}
2.115 +
2.116 +int file_open(const char *uri,int flags,mode_t mode,struct razor_error **error)
2.117 +{
2.118 + GFile *file;
2.119 + gchar *path;
2.120 + int retval;
2.121 + GError *err=NULL;
2.122 + g_message("file_open(%s)",uri);
2.123 + file=file_for_uri(uri);
2.124 + path=g_file_get_path(file);
2.125 + if (path)
2.126 + {
2.127 + retval=razor_file_default_open(path,flags,mode,error);
2.128 + g_free(path);
2.129 + }
2.130 + else
2.131 + {
2.132 + razor_set_error(error,RAZOR_GENERAL_ERROR,RAZOR_GENERAL_ERROR_FAILED,
2.133 + uri,"File is not local");
2.134 + retval=-1;
2.135 + }
2.136 + g_object_unref(file);
2.137 + return retval;
2.138 +}
2.139 +
2.140 +int file_move(const char *src_uri,const char *dst_uri,
2.141 + struct razor_error **error)
2.142 +{
2.143 + GFile *src,*dst;
2.144 + gchar *src_path,*dst_path;
2.145 + int retval;
2.146 + GError *err=NULL;
2.147 + g_message("file_move(%s,%s)",src_uri,dst_uri);
2.148 + src=file_for_uri(src_uri);
2.149 + dst=file_for_uri(dst_uri);
2.150 + src_path=g_file_get_path(src);
2.151 + dst_path=g_file_get_path(dst);
2.152 + if (src_path && dst_path)
2.153 + retval=razor_file_default_move(src_path,dst_path,error);
2.154 + else if (!g_file_move(src,dst,G_FILE_COPY_OVERWRITE,NULL,NULL,NULL,&err))
2.155 + {
2.156 + plover_propagate_g_error(error,err);
2.157 + retval=-1;
2.158 + }
2.159 + else
2.160 + retval=0;
2.161 + g_free(src_path);
2.162 + g_free(dst_path);
2.163 + g_object_unref(src);
2.164 + g_object_unref(dst);
2.165 + return retval;
2.166 +}
2.167 +
2.168 static void *file_get_contents(const char *uri,size_t *length,int private,
2.169 struct razor_error **error)
2.170 {
2.171 @@ -35,7 +189,7 @@
2.172 gsize len;
2.173 GError *err=NULL;
2.174 g_message("file_get_contents(%s)",uri);
2.175 - file=g_file_new_for_uri(uri);
2.176 + file=file_for_uri(uri);
2.177 path=g_file_get_path(file);
2.178 if (path)
2.179 {
2.180 @@ -80,15 +234,183 @@
2.181 return retval;
2.182 }
2.183
2.184 +int file_is_directory(const char *uri,struct razor_error **error)
2.185 +{
2.186 + GFile *file;
2.187 + GFileInfo *info;
2.188 + gchar *path;
2.189 + int retval;
2.190 + GError *err=NULL;
2.191 + g_message("file_is_directory(%s)",uri);
2.192 + file=file_for_uri(uri);
2.193 + path=g_file_get_path(file);
2.194 + if (path)
2.195 + {
2.196 + retval=razor_file_default_is_directory(path,error);
2.197 + g_free(path);
2.198 + }
2.199 + else
2.200 + {
2.201 + info=g_file_query_info(file,G_FILE_ATTRIBUTE_STANDARD_TYPE,
2.202 + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,NULL,&err);
2.203 + if (info)
2.204 + {
2.205 + if (g_file_info_get_file_type(info)==G_FILE_TYPE_DIRECTORY)
2.206 + retval=1;
2.207 + else
2.208 + retval=0;
2.209 + g_object_unref(info);
2.210 + }
2.211 + else
2.212 + {
2.213 + retval=-1;
2.214 + plover_propagate_g_error(error,err);
2.215 + }
2.216 + }
2.217 + g_object_unref(file);
2.218 + return retval;
2.219 +}
2.220 +
2.221 +char *file_mkdtemp_near(const char *uri,const char *template,
2.222 + struct razor_error **error)
2.223 +{
2.224 + GFile *file;
2.225 + gchar *path,*tmpuri;
2.226 + char *tmppath,*retval;
2.227 + GError *err=NULL;
2.228 + g_message("file_mkdtemp_near(%s)",uri);
2.229 + file=file_for_uri(uri);
2.230 + path=g_file_get_path(file);
2.231 + g_object_unref(file);
2.232 + if (path)
2.233 + {
2.234 + tmppath=razor_file_default_mkdtemp_near(path,template,error);
2.235 + g_free(path);
2.236 + if (tmppath)
2.237 + {
2.238 + file=g_file_new_for_path(tmppath);
2.239 + tmpuri=g_file_get_uri(file);
2.240 + g_object_unref(file);
2.241 + retval=strdup(tmpuri);
2.242 + g_free(tmpuri);
2.243 + }
2.244 + else
2.245 + retval=NULL;
2.246 + }
2.247 + else
2.248 + {
2.249 + razor_set_error(error,RAZOR_GENERAL_ERROR,RAZOR_GENERAL_ERROR_FAILED,
2.250 + uri,"File is not local");
2.251 + retval=NULL;
2.252 + }
2.253 + return retval;
2.254 +}
2.255 +
2.256 +struct file_dir {
2.257 + void *razor_file_default;
2.258 + GFileEnumerator *enumerator;
2.259 +};
2.260 +
2.261 +void *file_opendir(const char *uri,struct razor_error **error)
2.262 +{
2.263 + GFile *file;
2.264 + gchar *path;
2.265 + struct file_dir *dir;
2.266 + GError *err=NULL;
2.267 + g_message("file_opendir(%s)",uri);
2.268 + dir=g_new0(struct file_dir,1);
2.269 + file=file_for_uri(uri);
2.270 + path=g_file_get_path(file);
2.271 + if (path)
2.272 + {
2.273 + dir->razor_file_default=razor_file_default_opendir(path,error);
2.274 + if (!dir->razor_file_default)
2.275 + {
2.276 + g_free(dir);
2.277 + dir=NULL;
2.278 + }
2.279 + g_free(path);
2.280 + }
2.281 + else
2.282 + {
2.283 + dir->enumerator=g_file_enumerate_children(file,
2.284 + G_FILE_ATTRIBUTE_STANDARD_NAME,G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
2.285 + NULL,&err);
2.286 + if (!dir->enumerator)
2.287 + {
2.288 + g_free(dir);
2.289 + dir=NULL;
2.290 + plover_propagate_g_error(error,err);
2.291 + }
2.292 + }
2.293 + g_object_unref(file);
2.294 + return dir;
2.295 +}
2.296 +
2.297 +char *file_readdir(void *dp,struct razor_error **error)
2.298 +{
2.299 + struct file_dir *dir=dp;
2.300 + char *name;
2.301 + GError *err=NULL;
2.302 + GFileInfo *info;
2.303 + g_message("file_readdir(%p)",dp);
2.304 + if (dir->razor_file_default)
2.305 + name=razor_file_default_readdir(dir->razor_file_default,error);
2.306 + else
2.307 + {
2.308 + info=g_file_enumerator_next_file(dir->enumerator,NULL,&err);
2.309 + if (!info)
2.310 + {
2.311 + name=NULL;
2.312 + plover_propagate_g_error(error,err);
2.313 + }
2.314 + else
2.315 + {
2.316 + name=strdup(g_file_info_get_name(info));
2.317 + g_object_unref(info);
2.318 + }
2.319 + }
2.320 + return name;
2.321 +}
2.322 +
2.323 +int file_closedir(void *dp,struct razor_error **error)
2.324 +{
2.325 + struct file_dir *dir=dp;
2.326 + int retval;
2.327 + GError *err=NULL;
2.328 + g_message("file_closedir(%p)",dp);
2.329 + if (dir->razor_file_default)
2.330 + retval=razor_file_default_closedir(dir->razor_file_default,error);
2.331 + else
2.332 + {
2.333 + retval=g_file_enumerator_close(dir->enumerator,NULL,&err)?0:-1;
2.334 + if (retval)
2.335 + plover_propagate_g_error(error,err);
2.336 + g_object_unref(dir->enumerator);
2.337 + }
2.338 + g_free(dir);
2.339 + return retval;
2.340 +}
2.341 +
2.342 void plover__file_io_init(void)
2.343 {
2.344 static gsize init=0;
2.345 - struct razor_file_vtable file_vtable;
2.346 + struct razor_file_vtable file_vtable={0,};
2.347 g_message("plover__file_io_init()");
2.348 if (g_once_init_enter(&init))
2.349 {
2.350 + file_vtable.structure_size=sizeof(file_vtable);
2.351 + file_vtable.mkdir=file_mkdir;
2.352 + file_vtable.unlink=file_unlink;
2.353 + file_vtable.open=file_open;
2.354 + file_vtable.move=file_move;
2.355 file_vtable.get_contents=file_get_contents;
2.356 file_vtable.free_contents=file_free_contents;
2.357 + file_vtable.is_directory=file_is_directory;
2.358 + file_vtable.mkdtemp_near=file_mkdtemp_near;
2.359 + file_vtable.opendir=file_opendir;
2.360 + file_vtable.readdir=file_readdir;
2.361 + file_vtable.closedir=file_closedir;
2.362 razor_file_set_vtable(&file_vtable);
2.363 g_once_init_leave(&init,1);
2.364 }
3.1 --- a/plover/import-yum.c Tue Jun 14 12:39:53 2016 +0100
3.2 +++ b/plover/import-yum.c Thu Jun 16 12:11:14 2016 +0100
3.3 @@ -319,6 +319,7 @@
3.4 struct razor_set *set;
3.5 int errnum;
3.6 const char *errstr,*errobj;
3.7 + plover__file_io_init();
3.8 ctx.importer=razor_importer_create();
3.9 ctx.state=YUM_STATE_BEGIN;
3.10 ctx.primary_parser=XML_ParserCreate(NULL);
4.1 --- a/plover/packageset.c Tue Jun 14 12:39:53 2016 +0100
4.2 +++ b/plover/packageset.c Thu Jun 16 12:11:14 2016 +0100
4.3 @@ -85,6 +85,7 @@
4.4
4.5 static void plover_package_set_class_init(PloverPackageSetClass *klass)
4.6 {
4.7 + plover__file_io_init();
4.8 GObjectClass *oclass=G_OBJECT_CLASS(klass);
4.9 oclass->finalize=plover_package_set_finalize;
4.10 oclass->dispose=plover_package_set_dispose;
4.11 @@ -125,13 +126,19 @@
4.12 struct razor_set *system=NULL;
4.13 PloverPackageSetPrivate *priv;
4.14 struct razor_error *error=NULL;
4.15 + GFile *file;
4.16 + gchar *uri;
4.17 g_return_val_if_fail(PLOVER_IS_PACKAGE_SET(set),FALSE);
4.18 + file=g_file_new_for_path(*install_root?install_root:"/");
4.19 + uri=g_file_get_uri(file);
4.20 + g_object_unref(file);
4.21 + g_message("Using %s as URI",uri);
4.22 if (exclusive)
4.23 {
4.24 - root=razor_root_open(install_root,NULL);
4.25 + root=razor_root_open(uri,NULL);
4.26 if (!root)
4.27 {
4.28 - if (razor_root_create(install_root,&error))
4.29 + if (razor_root_create(uri,&error))
4.30 {
4.31 if (razor_error_get_domain(error)==RAZOR_GENERAL_ERROR &&
4.32 razor_error_get_code(error)==
4.33 @@ -139,14 +146,15 @@
4.34 {
4.35 razor_error_free(error);
4.36 error=NULL;
4.37 - root=razor_root_open(install_root,&error);
4.38 + root=razor_root_open(uri,&error);
4.39 }
4.40 }
4.41 else
4.42 - root=razor_root_open(install_root,&error);
4.43 + root=razor_root_open(uri,&error);
4.44 if (!root)
4.45 {
4.46 plover_propagate_razor_error(err,error);
4.47 + g_free(uri);
4.48 return FALSE;
4.49 }
4.50 }
4.51 @@ -155,7 +163,8 @@
4.52 razor_set_ref(system);
4.53 }
4.54 else
4.55 - system=razor_root_open_read_only(install_root,&error);
4.56 + system=razor_root_open_read_only(uri,&error);
4.57 + g_free(uri);
4.58 if (error)
4.59 {
4.60 g_set_error_literal(err,PLOVER_RAZOR_ERROR,RAZOR_GENERAL_ERROR_FAILED,
4.61 @@ -362,10 +371,17 @@
4.62 struct razor_importer *importer;
4.63 struct razor_rpm *rpm;
4.64 struct razor_error *tmp_error=NULL;
4.65 + GFile *file;
4.66 + gchar *uri;
4.67 + plover__file_io_init();
4.68 importer=razor_importer_create();
4.69 for(i=0;filenames[i];i++)
4.70 {
4.71 - rpm=razor_rpm_open(filenames[i],&tmp_error);
4.72 + file=g_file_new_for_path(filenames[i]);
4.73 + uri=g_file_get_uri(file);
4.74 + g_object_unref(file);
4.75 + rpm=razor_rpm_open(uri,&tmp_error);
4.76 + g_free(uri);
4.77 if (!rpm)
4.78 {
4.79 razor_importer_destroy(importer);
5.1 --- a/plover/razor.c Tue Jun 14 12:39:53 2016 +0100
5.2 +++ b/plover/razor.c Thu Jun 16 12:11:14 2016 +0100
5.3 @@ -61,6 +61,13 @@
5.4 int r,count;
5.5 GError *tmp_error=NULL;
5.6 PloverPackage *package;
5.7 + GFile *file;
5.8 + gchar *uri;
5.9 + plover__file_io_init();
5.10 + file=g_file_new_for_path(*install_root?install_root:"/");
5.11 + uri=g_file_get_uri(file);
5.12 + g_object_unref(file);
5.13 + g_message("Using %s as URI",uri);
5.14 switch(stage)
5.15 {
5.16 case RAZOR_STAGE_SCRIPTS_PRE:
5.17 @@ -82,6 +89,7 @@
5.18 {
5.19 razor_atomic_abort(atomic,PLOVER_GENERAL_ERROR,
5.20 PLOVER_GENERAL_ERROR_CANCELLED,"Operation was cancelled");
5.21 + g_free(uri);
5.22 return -1;
5.23 }
5.24 if (action==RAZOR_INSTALL_ACTION_REMOVE)
5.25 @@ -91,7 +99,7 @@
5.26 if (stage==RAZOR_STAGE_FILES)
5.27 printf(" Removing : %s ",name);
5.28 r=razor_package_remove(system,plover_package_set_get_razor(next),
5.29 - atomic,pkg,install_root,count,stage);
5.30 + atomic,pkg,uri,count,stage);
5.31 if (stage==RAZOR_STAGE_FILES)
5.32 printf("\n");
5.33 }
5.34 @@ -104,6 +112,7 @@
5.35 plover_propagate_g_error(&error,tmp_error);
5.36 razor_atomic_propagate_error(atomic,error,NULL);
5.37 razor_error_free(error);
5.38 + g_free(uri);
5.39 return -1;
5.40 }
5.41 if (stage==RAZOR_STAGE_FILES)
5.42 @@ -111,7 +120,7 @@
5.43 if (relocations)
5.44 razor_rpm_set_relocations(rpm,relocations);
5.45 razor_transaction_fixup_package(trans,pkg,rpm);
5.46 - r=razor_rpm_install(rpm,atomic,install_root,1,stage);
5.47 + r=razor_rpm_install(rpm,atomic,uri,1,stage);
5.48 razor_rpm_close(rpm);
5.49 if (stage==RAZOR_STAGE_FILES)
5.50 printf("\n");
5.51 @@ -121,7 +130,10 @@
5.52 else
5.53 r=0;
5.54 if (razor_atomic_in_error_state(atomic))
5.55 + {
5.56 + g_free(uri);
5.57 return -1;
5.58 + }
5.59 else if (r)
5.60 {
5.61 if (action==RAZOR_INSTALL_ACTION_REMOVE)
5.62 @@ -151,6 +163,7 @@
5.63 fprintf(stderr,"error: %s, exit status %d\n",t,r);
5.64 razor_atomic_abort(atomic,PLOVER_SCRIPTLET_ERROR,r,t);
5.65 g_free(t);
5.66 + g_free(uri);
5.67 return -1;
5.68 }
5.69 else
5.70 @@ -160,6 +173,7 @@
5.71 name,version,arch,r);
5.72 }
5.73 }
5.74 + g_free(uri);
5.75 return 0;
5.76 }
5.77
5.78 @@ -238,8 +252,7 @@
5.79 {
5.80 int len,matches=1;
5.81 const char *name;
5.82 - char *install_root;
5.83 - GFile *file;
5.84 + const char *install_root;
5.85 struct razor_set *set;
5.86 struct razor_package *package;
5.87 struct razor_package_iterator *pi;
5.88 @@ -248,12 +261,12 @@
5.89 len=strlen(prefix);
5.90 while(len && prefix[len-1]=='/')
5.91 len--;
5.92 - install_root=getenv("RAZOR_ROOT");
5.93 + install_root=g_getenv("RAZOR_ROOT");
5.94 if (!install_root)
5.95 - install_root="";
5.96 - file=g_file_new_for_path(*install_root?install_root:"/");
5.97 - set=razor_root_open_read_only(g_file_get_uri(file),NULL);
5.98 - g_object_unref(file);
5.99 + install_root="file:///";
5.100 + set=razor_root_open_read_only(install_root,NULL);
5.101 + if (!set)
5.102 + g_message("Failed to open root");
5.103 if (set)
5.104 {
5.105 pi=razor_package_iterator_create(set);
6.1 --- a/plover/repository.c Tue Jun 14 12:39:53 2016 +0100
6.2 +++ b/plover/repository.c Thu Jun 16 12:11:14 2016 +0100
6.3 @@ -28,7 +28,7 @@
6.4
6.5 typedef struct _PloverRepositoryPrivate {
6.6 PloverPackageSet *set;
6.7 - gchar **filenames;
6.8 + gchar **uris;
6.9 } PloverRepositoryPrivate;
6.10
6.11 #define PLOVER_REPOSITORY_GET_PRIVATE(obj)\
6.12 @@ -39,7 +39,7 @@
6.13 static void plover_repository_finalize(GObject *obj)
6.14 {
6.15 PloverRepositoryPrivate *priv=PLOVER_REPOSITORY_GET_PRIVATE(obj);
6.16 - g_strfreev(priv->filenames);
6.17 + g_strfreev(priv->uris);
6.18 if (G_OBJECT_CLASS(plover_repository_parent_class)->finalize)
6.19 G_OBJECT_CLASS(plover_repository_parent_class)->finalize(obj);
6.20 }
6.21 @@ -54,6 +54,7 @@
6.22
6.23 static void plover_repository_class_init(PloverRepositoryClass *klass)
6.24 {
6.25 + plover__file_io_init();
6.26 GObjectClass *oclass=G_OBJECT_CLASS(klass);
6.27 oclass->finalize=plover_repository_finalize;
6.28 oclass->dispose=plover_repository_dispose;
6.29 @@ -67,15 +68,25 @@
6.30 PloverRepository *plover_repository_new_from_files(const char **filenames,
6.31 GError **error)
6.32 {
6.33 + int i;
6.34 PloverPackageSet *set;
6.35 PloverRepository *repository;
6.36 PloverRepositoryPrivate *priv;
6.37 + GFile *file;
6.38 + gchar *uri;
6.39 set=plover_package_set_new_from_rpms(filenames,error);
6.40 if (!set)
6.41 return NULL;
6.42 repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL);
6.43 priv=PLOVER_REPOSITORY_GET_PRIVATE(repository);
6.44 - priv->filenames=g_strdupv((gchar **)filenames);
6.45 + priv->uris=g_new(char *,g_strv_length((char **)filenames)+1);
6.46 + for(i=0;filenames[i];i++)
6.47 + {
6.48 + file=g_file_new_for_path(filenames[i]);
6.49 + priv->uris[i]=g_file_get_uri(file);
6.50 + g_object_unref(file);
6.51 + }
6.52 + priv->uris[i]=NULL;
6.53 priv->set=set;
6.54 return repository;
6.55 }
6.56 @@ -96,33 +107,40 @@
6.57 {
6.58 char *s;
6.59 const char *name,*version,*arch;
6.60 - GPtrArray *filenames;
6.61 + GPtrArray *uris;
6.62 struct razor_set *imported;
6.63 struct razor_package *package;
6.64 struct razor_package_iterator *pi;
6.65 PloverPackageSet *set;
6.66 PloverRepository *repository;
6.67 PloverRepositoryPrivate *priv;
6.68 + GFile *file;
6.69 + gchar *uri;
6.70 imported=plover_razor_set_create_from_yum(base,error);
6.71 if (!imported)
6.72 return NULL;
6.73 + file=g_file_new_for_path(base);
6.74 + uri=g_file_get_uri(file);
6.75 + g_object_unref(file);
6.76 + g_message("Using %s as URI",uri);
6.77 set=plover_package_set_new_from_razor(imported);
6.78 razor_set_unref(imported);
6.79 repository=g_object_new(PLOVER_TYPE_REPOSITORY,NULL);
6.80 priv=PLOVER_REPOSITORY_GET_PRIVATE(repository);
6.81 - filenames=g_ptr_array_new();
6.82 + uris=g_ptr_array_new();
6.83 pi=razor_package_iterator_create(plover_package_set_get_razor(set));
6.84 while (razor_package_iterator_next(pi,&package,RAZOR_DETAIL_NAME,&name,
6.85 RAZOR_DETAIL_VERSION,&version,RAZOR_DETAIL_ARCH,&arch,RAZOR_DETAIL_LAST))
6.86 {
6.87 s=rpm_filename(name,version,arch);
6.88 - g_ptr_array_add(filenames,g_build_filename(base,"rpms",s,NULL));
6.89 + g_ptr_array_add(uris,g_build_filename(uri,"rpms",s,NULL));
6.90 free(s);
6.91 }
6.92 razor_package_iterator_destroy(pi);
6.93 - g_ptr_array_add(filenames,NULL);
6.94 - priv->filenames=(gchar **)g_ptr_array_free(filenames,FALSE);
6.95 + g_ptr_array_add(uris,NULL);
6.96 + priv->uris=(gchar **)g_ptr_array_free(uris,FALSE);
6.97 priv->set=set;
6.98 + g_free(uri);
6.99 return repository;
6.100 }
6.101
6.102 @@ -161,7 +179,7 @@
6.103 plover_package_get_arch(package));
6.104 return NULL;
6.105 }
6.106 - rpm=razor_rpm_open(priv->filenames[nth],&tmp_error);
6.107 + rpm=razor_rpm_open(priv->uris[nth],&tmp_error);
6.108 if (!rpm)
6.109 plover_propagate_razor_error(error,tmp_error);
6.110 return rpm;
7.1 --- a/plover/transaction.c Tue Jun 14 12:39:53 2016 +0100
7.2 +++ b/plover/transaction.c Thu Jun 16 12:11:14 2016 +0100
7.3 @@ -428,22 +428,46 @@
7.4 const char *install_root,GError **error)
7.5 {
7.6 PloverPackageSet *installed;
7.7 + const char *install_uri;
7.8 + gchar *install_path;
7.9 + GFile *file;
7.10 + gboolean retval;
7.11 g_return_val_if_fail(PLOVER_IS_TRANSACTION(transaction),FALSE);
7.12 if (!install_root)
7.13 - install_root=g_getenv("RAZOR_ROOT");
7.14 - if (!install_root)
7.15 - install_root="";
7.16 - if (transaction->installed && !g_strcmp0(install_root,
7.17 + {
7.18 + install_uri=g_getenv("RAZOR_ROOT");
7.19 + if (install_uri)
7.20 + {
7.21 + file=g_file_new_for_uri(install_uri);
7.22 + install_path=g_file_get_path(file);
7.23 + g_object_unref(file);
7.24 + if (!install_path)
7.25 + {
7.26 + g_set_error(error,PLOVER_GENERAL_ERROR,
7.27 + PLOVER_GENERAL_ERROR_FAILED,
7.28 + "%s: Not a local URI",install_uri);
7.29 + return FALSE;
7.30 + }
7.31 + }
7.32 + else
7.33 + install_path=g_strdup("/");
7.34 + }
7.35 + else
7.36 + install_path=g_strdup(install_root);
7.37 + if (transaction->installed && !g_strcmp0(install_path,
7.38 plover_package_set_get_install_root(transaction->installed)))
7.39 + {
7.40 + g_free(install_path);
7.41 return TRUE;
7.42 + }
7.43 installed=plover_package_set_new();
7.44 - if (!plover_package_set_open(installed,install_root,TRUE,error))
7.45 - {
7.46 + retval=plover_package_set_open(installed,install_path,TRUE,error);
7.47 + if (retval)
7.48 + plover_transaction_set_installed(transaction,installed);
7.49 + else
7.50 g_object_unref(installed);
7.51 - return FALSE;
7.52 - }
7.53 - plover_transaction_set_installed(transaction,installed);
7.54 - return TRUE;
7.55 + g_free(install_path);
7.56 + return retval;
7.57 }
7.58
7.59 struct razor_set *plover_transaction_import_yum(PloverTransaction *transaction,
7.60 @@ -709,7 +733,8 @@
7.61 {
7.62 int i,changed,is_leaf;
7.63 uint32_t flags;
7.64 - const char *install_root;
7.65 + gchar *install_path;
7.66 + const char *install_uri;
7.67 const char *name,*version,*maybe_unused_name;
7.68 struct razor_set *system,*upstream;
7.69 struct razor_transaction *trans;
7.70 @@ -717,6 +742,7 @@
7.71 PloverTransaction *transaction;
7.72 struct plover_vector *package_names;
7.73 GList *to_remove,*lnk,*lnk2,*what_requires,*what_provides;
7.74 + GFile *file;
7.75 struct razor_package *package,*maybe_unused_package;
7.76 struct razor_property *property;
7.77 struct razor_package_query *query;
7.78 @@ -724,15 +750,29 @@
7.79 struct razor_property_iterator *removed_props;
7.80 if (!pkgs)
7.81 return plover_transaction_new_remove(NULL,error);
7.82 + install_uri=g_getenv("RAZOR_ROOT");
7.83 + if (install_uri)
7.84 + {
7.85 + file=g_file_new_for_uri(install_uri);
7.86 + install_path=g_file_get_path(file);
7.87 + g_object_unref(file);
7.88 + if (!install_path)
7.89 + {
7.90 + g_set_error(error,PLOVER_GENERAL_ERROR,PLOVER_GENERAL_ERROR_FAILED,
7.91 + "%s: Not a local URI",install_uri);
7.92 + return NULL;
7.93 + }
7.94 + }
7.95 + else
7.96 + install_path=g_strdup("/");
7.97 installed=plover_package_set_new();
7.98 - install_root=g_getenv("RAZOR_ROOT");
7.99 - if (!install_root)
7.100 - install_root="";
7.101 - if (!plover_package_set_open(installed,install_root,TRUE,error))
7.102 + if (!plover_package_set_open(installed,install_path,TRUE,error))
7.103 {
7.104 g_object_unref(installed);
7.105 + g_free(install_path);
7.106 return NULL;
7.107 }
7.108 + g_free(install_path);
7.109 system=plover_package_set_get_razor(installed);
7.110 package_names=plover_vector_new();
7.111 for(i=0;pkgs[i];i++)
8.1 --- a/tests/plover-gtk/test-transactionhelper.c Tue Jun 14 12:39:53 2016 +0100
8.2 +++ b/tests/plover-gtk/test-transactionhelper.c Thu Jun 16 12:11:14 2016 +0100
8.3 @@ -91,14 +91,19 @@
8.4
8.5 static void test_install_group(void)
8.6 {
8.7 - gchar *root;
8.8 + gchar *root,*root_uri;
8.9 GError *err=NULL;
8.10 + GFile *file;
8.11 PloverPackageSet *installed;
8.12 PloverTransactionHelper *helper;
8.13 root=g_strdup("razor-test-dir-XXXXXX");
8.14 g_assert(mkdtemp(root));
8.15 - g_setenv("RAZOR_ROOT",root,TRUE);
8.16 + file=g_file_new_for_path(root);
8.17 g_free(root);
8.18 + root_uri=g_file_get_uri(file);
8.19 + g_object_unref(file);
8.20 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.21 + g_free(root_uri);
8.22 helper=get_transaction_helper();
8.23 installed=plover_package_set_new_from_installed("../razor-test-dir",&err);
8.24 if (!installed)
8.25 @@ -115,15 +120,20 @@
8.26
8.27 static void test_remove_group(void)
8.28 {
8.29 - gchar *root;
8.30 + gchar *root,*root_uri;
8.31 GError *err=NULL;
8.32 + GFile *file;
8.33 PloverPackageSet *installed;
8.34 PloverTransactionHelper *helper;
8.35 struct plover_vector *packages;
8.36 char *pkgs[]={"zip",NULL};
8.37 root=g_strdup("razor-test-dir-XXXXXX");
8.38 g_assert(mkdtemp(root));
8.39 - g_setenv("RAZOR_ROOT",root,TRUE);
8.40 + file=g_file_new_for_path(root);
8.41 + root_uri=g_file_get_uri(file);
8.42 + g_object_unref(file);
8.43 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.44 + g_free(root_uri);
8.45 helper=get_transaction_helper();
8.46 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
8.47 packages=plover_transaction_helper_group_get_default_packages(helper,
8.48 @@ -148,14 +158,19 @@
8.49
8.50 static void test_update(void)
8.51 {
8.52 - gchar *root;
8.53 + gchar *root,*root_uri;
8.54 GError *err=NULL;
8.55 + GFile *file;
8.56 PloverPackageSet *installed;
8.57 PloverTransactionHelper *helper;
8.58 root=g_strdup("razor-test-dir-XXXXXX");
8.59 g_assert(mkdtemp(root));
8.60 - g_setenv("RAZOR_ROOT",root,TRUE);
8.61 + file=g_file_new_for_path(root);
8.62 g_free(root);
8.63 + root_uri=g_file_get_uri(file);
8.64 + g_object_unref(file);
8.65 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.66 + g_free(root_uri);
8.67 helper=get_transaction_helper();
8.68 installed=plover_package_set_new_from_installed("../razor-test-dir",&err);
8.69 if (!installed)
8.70 @@ -239,15 +254,20 @@
8.71
8.72 static void test_run_install(void)
8.73 {
8.74 - gchar *root;
8.75 + gchar *root,*root_uri;
8.76 GError *err=NULL;
8.77 + GFile *file;
8.78 struct plover_vector *packages;
8.79 PloverPackageSet *installed;
8.80 PloverTransactionHelper *helper;
8.81 struct run_install_baton baton={0,};
8.82 root=g_strdup("razor-test-dir-XXXXXX");
8.83 g_assert(mkdtemp(root));
8.84 - g_setenv("RAZOR_ROOT",root,TRUE);
8.85 + file=g_file_new_for_path(root);
8.86 + root_uri=g_file_get_uri(file);
8.87 + g_object_unref(file);
8.88 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.89 + g_free(root_uri);
8.90 helper=get_transaction_helper();
8.91 installed=plover_package_set_new();
8.92 if (!plover_package_set_open(installed,root,TRUE,&err))
8.93 @@ -339,15 +359,20 @@
8.94
8.95 static void test_run_remove(void)
8.96 {
8.97 - gchar *root;
8.98 + gchar *root,*root_uri;
8.99 GError *err=NULL;
8.100 + GFile *file;
8.101 struct plover_vector *packages;
8.102 PloverPackageSet *installed;
8.103 PloverTransactionHelper *helper;
8.104 struct run_remove_baton baton={0,};
8.105 root=g_strdup("razor-test-dir-XXXXXX");
8.106 g_assert(mkdtemp(root));
8.107 - g_setenv("RAZOR_ROOT",root,TRUE);
8.108 + file=g_file_new_for_path(root);
8.109 + root_uri=g_file_get_uri(file);
8.110 + g_object_unref(file);
8.111 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.112 + g_free(root_uri);
8.113 helper=get_transaction_helper();
8.114 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
8.115 packages=
8.116 @@ -443,8 +468,9 @@
8.117
8.118 static void test_run_update(void)
8.119 {
8.120 - gchar *root;
8.121 + gchar *root,*root_uri;
8.122 GError *err=NULL;
8.123 + GFile *file;
8.124 struct razor_importer *importer;
8.125 struct razor_set *downgraded;
8.126 struct razor_atomic *atomic;
8.127 @@ -454,7 +480,11 @@
8.128 struct run_update_baton baton={0,};
8.129 root=g_strdup("razor-test-dir-XXXXXX");
8.130 g_assert(mkdtemp(root));
8.131 - g_setenv("RAZOR_ROOT",root,TRUE);
8.132 + file=g_file_new_for_path(root);
8.133 + root_uri=g_file_get_uri(file);
8.134 + g_object_unref(file);
8.135 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.136 + g_free(root_uri);
8.137 helper=get_transaction_helper();
8.138 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
8.139 installed=plover_package_set_new();
8.140 @@ -560,7 +590,8 @@
8.141 static void test_check_vendor(void)
8.142 {
8.143 int fh;
8.144 - gchar *root,*s;
8.145 + gchar *root,*root_uri,*s;
8.146 + GFile *file;
8.147 GError *err=NULL;
8.148 struct razor_importer *importer;
8.149 struct razor_set *downgraded;
8.150 @@ -572,7 +603,10 @@
8.151 g_setenv("PLOVER_VENDOR_PREFIX","/srv",TRUE);
8.152 root=g_strdup("razor-test-dir-XXXXXX");
8.153 g_assert(mkdtemp(root));
8.154 - g_setenv("RAZOR_ROOT",root,TRUE);
8.155 + file=g_file_new_for_path(root);
8.156 + root_uri=g_file_get_uri(file);
8.157 + g_object_unref(file);
8.158 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.159 helper=get_transaction_helper();
8.160 plover_transaction_helper_set_check_vendor(helper,TRUE);
8.161 plover_transaction_helper_set_base(helper,"../yum-repo-test-dir");
8.162 @@ -588,8 +622,8 @@
8.163 razor_importer_finish_package(importer);
8.164 downgraded=razor_importer_finish(importer);
8.165 atomic=razor_atomic_open("Add downgraded packages");
8.166 - razor_atomic_make_dirs(atomic,root,"/test/bin/zappy");
8.167 - s=g_build_filename(root,"test/bin/zappy",NULL);
8.168 + razor_atomic_make_dirs(atomic,root_uri,"/test/bin/zappy");
8.169 + s=g_build_filename(root_uri,"test/bin/zappy",NULL);
8.170 fh=razor_atomic_create_file(atomic,s,S_IRWXU|S_IRWXG|S_IRWXO);
8.171 g_free(s);
8.172 razor_atomic_close(atomic,fh);
8.173 @@ -610,6 +644,7 @@
8.174 g_object_unref(helper);
8.175 g_unsetenv("RAZOR_ROOT");
8.176 g_free(root);
8.177 + g_free(root_uri);
8.178 g_unsetenv("PLOVER_VENDOR_PREFIX");
8.179 }
8.180
8.181 @@ -652,17 +687,22 @@
8.182
8.183 static void test_set_error(void)
8.184 {
8.185 - gchar *root;
8.186 + gchar *root,*root_uri;
8.187 const char *errmsg;
8.188 GError *err=NULL;
8.189 const GError *err2=NULL;
8.190 + GFile *file;
8.191 PloverPackageSet *installed;
8.192 PloverTransactionHelper *helper;
8.193 struct set_error_baton baton={0,};
8.194 root=g_strdup("razor-test-dir-XXXXXX");
8.195 g_assert(mkdtemp(root));
8.196 - g_setenv("RAZOR_ROOT",root,TRUE);
8.197 + file=g_file_new_for_path(root);
8.198 g_free(root);
8.199 + root_uri=g_file_get_uri(file);
8.200 + g_object_unref(file);
8.201 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
8.202 + g_free(root_uri);
8.203 helper=get_transaction_helper();
8.204 installed=plover_package_set_new_from_installed("../razor-test-dir",&err);
8.205 if (!installed)
9.1 --- a/tests/plover/test-razor.c Tue Jun 14 12:39:53 2016 +0100
9.2 +++ b/tests/plover/test-razor.c Thu Jun 16 12:11:14 2016 +0100
9.3 @@ -27,11 +27,16 @@
9.4 static void test_install(void)
9.5 {
9.6 char *pkgs[]={"zip",NULL};
9.7 - gchar *root;
9.8 + gchar *root,*root_uri;
9.9 GError *err=NULL;
9.10 + GFile *file;
9.11 root=g_strdup("razor-test-dir-XXXXXX");
9.12 g_assert(mkdtemp(root));
9.13 - g_setenv("RAZOR_ROOT",root,TRUE);
9.14 + file=g_file_new_for_path(root);
9.15 + root_uri=g_file_get_uri(file);
9.16 + g_object_unref(file);
9.17 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.18 + g_free(root_uri);
9.19 if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err))
9.20 {
9.21 g_assert(err && err->message);
9.22 @@ -62,11 +67,16 @@
9.23
9.24 static void test_update_noop(void)
9.25 {
9.26 - gchar *root;
9.27 + gchar *root,*root_uri;
9.28 GError *err=NULL;
9.29 + GFile *file;
9.30 root=g_strdup("razor-test-dir-XXXXXX");
9.31 g_assert(mkdtemp(root));
9.32 - g_setenv("RAZOR_ROOT",root,TRUE);
9.33 + file=g_file_new_for_path(root);
9.34 + root_uri=g_file_get_uri(file);
9.35 + g_object_unref(file);
9.36 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.37 + g_free(root_uri);
9.38 if (!plover_update("../yum-repo-test-dir","/test",NULL,&err))
9.39 {
9.40 g_assert(err && err->message);
9.41 @@ -80,11 +90,16 @@
9.42 static void test_update_nonexistant(void)
9.43 {
9.44 char *pkgs[]={"nonexistant",NULL};
9.45 - gchar *root;
9.46 + gchar *root,*root_uri;
9.47 GError *err=NULL;
9.48 + GFile *file;
9.49 root=g_strdup("razor-test-dir-XXXXXX");
9.50 g_assert(mkdtemp(root));
9.51 - g_setenv("RAZOR_ROOT",root,TRUE);
9.52 + file=g_file_new_for_path(root);
9.53 + root_uri=g_file_get_uri(file);
9.54 + g_object_unref(file);
9.55 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.56 + g_free(root_uri);
9.57 g_assert(!plover_update("../yum-repo-test-dir","/test",pkgs,&err));
9.58 g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR,
9.59 PLOVER_GENERAL_ERROR_NO_SUCH_PACKAGE));
9.60 @@ -96,11 +111,16 @@
9.61 static void test_remove(void)
9.62 {
9.63 char *pkgs[]={"zip",NULL};
9.64 - gchar *root;
9.65 + gchar *root,*root_uri;
9.66 GError *err=NULL;
9.67 + GFile *file;
9.68 root=g_strdup("razor-test-dir-XXXXXX");
9.69 g_assert(mkdtemp(root));
9.70 - g_setenv("RAZOR_ROOT",root,TRUE);
9.71 + file=g_file_new_for_path(root);
9.72 + root_uri=g_file_get_uri(file);
9.73 + g_object_unref(file);
9.74 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.75 + g_free(root_uri);
9.76 if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err))
9.77 g_error("test-remove: %s",err->message);
9.78 if (!plover_remove(pkgs,&err))
9.79 @@ -115,11 +135,16 @@
9.80
9.81 static void test_remove_noop(void)
9.82 {
9.83 - gchar *root;
9.84 + gchar *root,*root_uri;
9.85 GError *err=NULL;
9.86 + GFile *file;
9.87 root=g_strdup("razor-test-dir-XXXXXX");
9.88 g_assert(mkdtemp(root));
9.89 - g_setenv("RAZOR_ROOT",root,TRUE);
9.90 + file=g_file_new_for_path(root);
9.91 + root_uri=g_file_get_uri(file);
9.92 + g_object_unref(file);
9.93 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.94 + g_free(root_uri);
9.95 if (!plover_remove(NULL,&err))
9.96 {
9.97 g_assert(err && err->message);
9.98 @@ -133,11 +158,16 @@
9.99 static void test_remove_nonexistant(void)
9.100 {
9.101 char *pkgs[]={"nonexistant",NULL};
9.102 - gchar *root;
9.103 + gchar *root,*root_uri;
9.104 GError *err=NULL;
9.105 + GFile *file;
9.106 root=g_strdup("razor-test-dir-XXXXXX");
9.107 g_assert(mkdtemp(root));
9.108 - g_setenv("RAZOR_ROOT",root,TRUE);
9.109 + file=g_file_new_for_path(root);
9.110 + root_uri=g_file_get_uri(file);
9.111 + g_object_unref(file);
9.112 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.113 + g_free(root_uri);
9.114 g_assert(!plover_remove(pkgs,&err));
9.115 g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR,
9.116 PLOVER_GENERAL_ERROR_NO_SUCH_PACKAGE));
9.117 @@ -149,11 +179,16 @@
9.118 static void test_remove_warning(void)
9.119 {
9.120 char *pkgs[]={"badpostun",NULL};
9.121 - gchar *root;
9.122 + gchar *root,*root_uri;
9.123 GError *err=NULL;
9.124 + GFile *file;
9.125 root=g_strdup("razor-test-dir-XXXXXX");
9.126 g_assert(mkdtemp(root));
9.127 - g_setenv("RAZOR_ROOT",root,TRUE);
9.128 + file=g_file_new_for_path(root);
9.129 + root_uri=g_file_get_uri(file);
9.130 + g_object_unref(file);
9.131 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.132 + g_free(root_uri);
9.133 if (!plover_install("../yum-repo-test-dir","/test",pkgs,&err))
9.134 g_error("test-remove-warning: %s",err->message);
9.135 if (!plover_remove(pkgs,&err))
9.136 @@ -168,7 +203,13 @@
9.137
9.138 static void test_prefix(void)
9.139 {
9.140 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
9.141 + gchar *root_uri;
9.142 + GFile *file;
9.143 + file=g_file_new_for_path("../razor-test-dir");
9.144 + root_uri=g_file_get_uri(file);
9.145 + g_object_unref(file);
9.146 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.147 + g_free(root_uri);
9.148 g_assert(plover_installed_files_match_prefix("/usr//"));
9.149 g_assert(!plover_installed_files_match_prefix("/tmp"));
9.150 g_unsetenv("RAZOR_ROOT");
9.151 @@ -176,10 +217,15 @@
9.152
9.153 static void test_prefix_none(void)
9.154 {
9.155 - gchar *root;
9.156 + gchar *root,*root_uri;
9.157 + GFile *file;
9.158 root=g_strdup("razor-test-dir-XXXXXX");
9.159 g_assert(mkdtemp(root));
9.160 - g_setenv("RAZOR_ROOT",root,TRUE);
9.161 + file=g_file_new_for_path(root);
9.162 + root_uri=g_file_get_uri(file);
9.163 + g_object_unref(file);
9.164 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
9.165 + g_free(root_uri);
9.166 g_assert(plover_installed_files_match_prefix("/any-prefix"));
9.167 g_unsetenv("RAZOR_ROOT");
9.168 g_free(root);
10.1 --- a/tests/plover/test-transaction.c Tue Jun 14 12:39:53 2016 +0100
10.2 +++ b/tests/plover/test-transaction.c Thu Jun 16 12:11:14 2016 +0100
10.3 @@ -56,8 +56,14 @@
10.4 struct razor_package *pkg;
10.5 enum razor_install_action action;
10.6 int count;
10.7 + gchar *root_uri;
10.8 GError *err=NULL;
10.9 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.10 + GFile *file;
10.11 + file=g_file_new_for_path("../razor-test-dir");
10.12 + root_uri=g_file_get_uri(file);
10.13 + g_object_unref(file);
10.14 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.15 + g_free(root_uri);
10.16 transaction=plover_transaction_new_update("../yum-repo-test-dir","/test",
10.17 NULL,&err);
10.18 if (!transaction && err)
10.19 @@ -85,8 +91,14 @@
10.20 {
10.21 PloverTransaction *transaction;
10.22 char *pkgs[]={"nonexistant",NULL};
10.23 + gchar *root_uri;
10.24 GError *err=NULL;
10.25 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.26 + GFile *file;
10.27 + file=g_file_new_for_path("../razor-test-dir");
10.28 + root_uri=g_file_get_uri(file);
10.29 + g_object_unref(file);
10.30 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.31 + g_free(root_uri);
10.32 transaction=plover_transaction_new_update("../yum-repo-test-dir","/test",
10.33 pkgs,&err);
10.34 g_assert(!transaction);
10.35 @@ -105,8 +117,14 @@
10.36 int count;
10.37 char *name;
10.38 char *pkgs[]={"zip",NULL};
10.39 + gchar *root_uri;
10.40 GError *err=NULL;
10.41 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.42 + GFile *file;
10.43 + file=g_file_new_for_path("../razor-test-dir");
10.44 + root_uri=g_file_get_uri(file);
10.45 + g_object_unref(file);
10.46 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.47 + g_free(root_uri);
10.48 transaction=plover_transaction_new_install("../yum-repo-test-dir","/test",
10.49 pkgs,&err);
10.50 if (!transaction && err)
10.51 @@ -138,8 +156,14 @@
10.52 {
10.53 PloverTransaction *transaction;
10.54 char *pkgs[]={"nonexistant",NULL};
10.55 + gchar *root_uri;
10.56 GError *err=NULL;
10.57 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.58 + GFile *file;
10.59 + file=g_file_new_for_path("../razor-test-dir");
10.60 + root_uri=g_file_get_uri(file);
10.61 + g_object_unref(file);
10.62 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.63 + g_free(root_uri);
10.64 transaction=plover_transaction_new_install("../yum-repo-test-dir","/test",
10.65 pkgs,&err);
10.66 g_assert(!transaction);
10.67 @@ -158,8 +182,14 @@
10.68 int count;
10.69 char *name;
10.70 char *pkgs[]={"uninstallable",NULL};
10.71 + gchar *root_uri;
10.72 GError *err=NULL;
10.73 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.74 + GFile *file;
10.75 + file=g_file_new_for_path("../razor-test-dir");
10.76 + root_uri=g_file_get_uri(file);
10.77 + g_object_unref(file);
10.78 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.79 + g_free(root_uri);
10.80 transaction=plover_transaction_new_install("../yum-repo-test-dir","/test",
10.81 pkgs,&err);
10.82 if (!transaction && err)
10.83 @@ -185,6 +215,7 @@
10.84 g_assert_cmpstr(name,==,"uninstallable");
10.85 g_assert(!razor_install_iterator_next(iter,&pkg,&action,&count));
10.86 g_assert(!plover_transaction_commit(transaction,NULL,&err));
10.87 + g_message("plover_transaction_commit: %s",err->message);
10.88 g_assert_cmpint(err->domain,==,PLOVER_RAZOR_ERROR);
10.89 g_assert_cmpint(err->code,==,RAZOR_GENERAL_ERROR_FAILED);
10.90 g_clear_error(&err);
10.91 @@ -197,8 +228,14 @@
10.92 struct razor_install_iterator *iter;
10.93 char *pkgs[]={"unsatisfiable",NULL};
10.94 const char *s;
10.95 + gchar *root_uri;
10.96 GError *err=NULL;
10.97 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.98 + GFile *file;
10.99 + file=g_file_new_for_path("../razor-test-dir");
10.100 + root_uri=g_file_get_uri(file);
10.101 + g_object_unref(file);
10.102 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.103 + g_free(root_uri);
10.104 transaction=plover_transaction_new_install("../yum-repo-test-dir","/test",
10.105 pkgs,&err);
10.106 if (!transaction && err)
10.107 @@ -226,8 +263,14 @@
10.108 int count;
10.109 char *name;
10.110 char *pkgs[]={"zappy-tools",NULL};
10.111 + gchar *root_uri;
10.112 GError *err=NULL;
10.113 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.114 + GFile *file;
10.115 + file=g_file_new_for_path("../razor-test-dir");
10.116 + root_uri=g_file_get_uri(file);
10.117 + g_object_unref(file);
10.118 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.119 + g_free(root_uri);
10.120 transaction=plover_transaction_new_remove(pkgs,&err);
10.121 if (!transaction && err)
10.122 g_error("zappy-tools: %s",err->message);
10.123 @@ -254,8 +297,14 @@
10.124 {
10.125 PloverTransaction *transaction;
10.126 char *pkgs[]={"nonexistant",NULL};
10.127 + gchar *root_uri;
10.128 GError *err=NULL;
10.129 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.130 + GFile *file;
10.131 + file=g_file_new_for_path("../razor-test-dir");
10.132 + root_uri=g_file_get_uri(file);
10.133 + g_object_unref(file);
10.134 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.135 + g_free(root_uri);
10.136 transaction=plover_transaction_new_remove(pkgs,&err);
10.137 g_assert(!transaction);
10.138 g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR,
10.139 @@ -301,8 +350,14 @@
10.140 int count;
10.141 char *name;
10.142 char *pkgs[]={"zappy-tools",NULL};
10.143 + gchar *root_uri;
10.144 GError *err=NULL;
10.145 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.146 + GFile *file;
10.147 + file=g_file_new_for_path("../razor-test-dir");
10.148 + root_uri=g_file_get_uri(file);
10.149 + g_object_unref(file);
10.150 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.151 + g_free(root_uri);
10.152 transaction=plover_transaction_new_remove_with_leaves(pkgs,&err);
10.153 if (!transaction && err)
10.154 g_error("zappy-tools: %s",err->message);
10.155 @@ -335,8 +390,14 @@
10.156 {
10.157 PloverTransaction *transaction;
10.158 char *pkgs[]={"nonexistant",NULL};
10.159 + gchar *root_uri;
10.160 GError *err=NULL;
10.161 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.162 + GFile *file;
10.163 + file=g_file_new_for_path("../razor-test-dir");
10.164 + root_uri=g_file_get_uri(file);
10.165 + g_object_unref(file);
10.166 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.167 + g_free(root_uri);
10.168 transaction=plover_transaction_new_remove_with_leaves(pkgs,&err);
10.169 g_assert(!transaction);
10.170 g_assert(g_error_matches(err,PLOVER_GENERAL_ERROR,
10.171 @@ -354,9 +415,15 @@
10.172 enum razor_install_action action;
10.173 int count;
10.174 char *name;
10.175 + gchar *root_uri;
10.176 GError *err=NULL;
10.177 + GFile *file;
10.178 GList *expected=NULL,*lnk;
10.179 - g_setenv("RAZOR_ROOT","../razor-test-dir",TRUE);
10.180 + file=g_file_new_for_path("../razor-test-dir");
10.181 + root_uri=g_file_get_uri(file);
10.182 + g_object_unref(file);
10.183 + g_setenv("RAZOR_ROOT",root_uri,TRUE);
10.184 + g_free(root_uri);
10.185 transaction=plover_transaction_new_remove_with_leaves(NULL,&err);
10.186 if (!transaction && err)
10.187 g_error("remove-all: %s",err->message);