From 6dda8da6c5f2d1c2bd476a05efbdc1946be72b7a Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 29 Nov 2012 17:11:24 -0500 Subject: [PATCH] Switch to using libgsystem shutil More code moved into libgsystem. --- src/libgsystem | 2 +- src/libotutil/ot-gio-utils.c | 195 -------------------- src/libotutil/ot-gio-utils.h | 14 -- src/ostree/ot-admin-builtin-deploy.c | 12 +- src/ostree/ot-admin-builtin-prune.c | 4 +- src/ostree/ot-admin-builtin-update-kernel.c | 2 +- 6 files changed, 10 insertions(+), 219 deletions(-) diff --git a/src/libgsystem b/src/libgsystem index eb4cecbc..82c4b585 160000 --- a/src/libgsystem +++ b/src/libgsystem @@ -1 +1 @@ -Subproject commit eb4cecbc1528e1d1bdd99298d6f58768c6642b24 +Subproject commit 82c4b585f374d094c9f5a5428585f879e7397b3d diff --git a/src/libotutil/ot-gio-utils.c b/src/libotutil/ot-gio-utils.c index 42e36dc9..d37beebb 100644 --- a/src/libotutil/ot-gio-utils.c +++ b/src/libotutil/ot-gio-utils.c @@ -132,198 +132,3 @@ ot_gfile_get_child_build_path (GFile *parent, return g_file_resolve_relative_path (parent, path); } - -static gboolean -cp_internal (GFile *src, - GFile *dest, - gboolean use_hardlinks, - GCancellable *cancellable, - GError **error) -{ - gboolean ret = FALSE; - ot_lobj GFileEnumerator *enumerator = NULL; - ot_lobj GFileInfo *file_info = NULL; - GError *temp_error = NULL; - - enumerator = g_file_enumerate_children (src, OSTREE_GIO_FAST_QUERYINFO, - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - cancellable, error); - if (!enumerator) - goto out; - - if (!gs_file_ensure_directory (dest, FALSE, cancellable, error)) - goto out; - - while ((file_info = g_file_enumerator_next_file (enumerator, cancellable, &temp_error)) != NULL) - { - const char *name = g_file_info_get_name (file_info); - ot_lobj GFile *src_child = g_file_get_child (src, name); - ot_lobj GFile *dest_child = g_file_get_child (dest, name); - - if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY) - { - if (!gs_file_ensure_directory (dest_child, FALSE, cancellable, error)) - goto out; - - /* Can't do this even though we'd like to; it fails with an error about - * setting standard::type not being supported =/ - * - if (!g_file_set_attributes_from_info (dest_child, file_info, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - cancellable, error)) - goto out; - */ - if (chmod (gs_file_get_path_cached (dest_child), - g_file_info_get_attribute_uint32 (file_info, "unix::mode")) == -1) - { - ot_util_set_error_from_errno (error, errno); - goto out; - } - - if (!cp_internal (src_child, dest_child, use_hardlinks, cancellable, error)) - goto out; - } - else - { - gboolean did_link = FALSE; - (void) unlink (gs_file_get_path_cached (dest_child)); - if (use_hardlinks) - { - if (link (gs_file_get_path_cached (src_child), gs_file_get_path_cached (dest_child)) == -1) - { - if (!(errno == EMLINK || errno == EXDEV)) - { - ot_util_set_error_from_errno (error, errno); - goto out; - } - use_hardlinks = FALSE; - } - else - did_link = TRUE; - } - if (!did_link) - { - if (!g_file_copy (src_child, dest_child, - G_FILE_COPY_OVERWRITE | G_FILE_COPY_ALL_METADATA | G_FILE_COPY_NOFOLLOW_SYMLINKS, - cancellable, NULL, NULL, error)) - goto out; - } - } - g_clear_object (&file_info); - } - if (temp_error) - { - g_propagate_error (error, temp_error); - goto out; - } - - ret = TRUE; - out: - return ret; -} - -/** - * ot_gio_shutil_cp_al_or_fallback: - * @src: Source path - * @dest: Destination path - * @cancellable: - * @error: - * - * Recursively copy path @src (which must be a directory) to the - * target @dest. If possible, hardlinks are used; if a hardlink is - * not possible, a regular copy is created. Any existing files are - * overwritten. - * - * Returns: %TRUE on success - */ -gboolean -ot_gio_shutil_cp_al_or_fallback (GFile *src, - GFile *dest, - GCancellable *cancellable, - GError **error) -{ - return cp_internal (src, dest, TRUE, cancellable, error); -} - -/** - * ot_gio_shutil_cp_a: - * @src: Source path - * @dest: Destination path - * @cancellable: - * @error: - * - * Recursively copy path @src (which must be a directory) to the - * target @dest. Any existing files are overwritten. - * - * Returns: %TRUE on success - */ -gboolean -ot_gio_shutil_cp_a (GFile *src, - GFile *dest, - GCancellable *cancellable, - GError **error) -{ - return cp_internal (src, dest, FALSE, cancellable, error); -} - -gboolean -ot_gio_shutil_rm_rf (GFile *path, - GCancellable *cancellable, - GError **error) -{ - gboolean ret = FALSE; - ot_lobj GFileEnumerator *dir_enum = NULL; - ot_lobj GFileInfo *file_info = NULL; - GError *temp_error = NULL; - - dir_enum = g_file_enumerate_children (path, OSTREE_GIO_FAST_QUERYINFO, - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - cancellable, &temp_error); - if (!dir_enum) - { - if (g_error_matches (temp_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) - { - g_clear_error (&temp_error); - ret = TRUE; - } - else - g_propagate_error (error, temp_error); - - goto out; - } - - while ((file_info = g_file_enumerator_next_file (dir_enum, cancellable, &temp_error)) != NULL) - { - ot_lobj GFile *subpath = NULL; - GFileType type; - const char *name; - - type = g_file_info_get_attribute_uint32 (file_info, "standard::type"); - name = g_file_info_get_attribute_byte_string (file_info, "standard::name"); - - subpath = g_file_get_child (path, name); - - if (type == G_FILE_TYPE_DIRECTORY) - { - if (!ot_gio_shutil_rm_rf (subpath, cancellable, error)) - goto out; - } - else - { - if (!gs_file_unlink (subpath, cancellable, error)) - goto out; - } - g_clear_object (&file_info); - } - if (temp_error) - { - g_propagate_error (error, temp_error); - goto out; - } - - if (!g_file_delete (path, cancellable, error)) - goto out; - - ret = TRUE; - out: - return ret; -} diff --git a/src/libotutil/ot-gio-utils.h b/src/libotutil/ot-gio-utils.h index ce055c6d..1ca2c302 100644 --- a/src/libotutil/ot-gio-utils.h +++ b/src/libotutil/ot-gio-utils.h @@ -42,20 +42,6 @@ GFile *ot_gfile_get_child_strconcat (GFile *parent, const char *first, ...) G_GN GFile *ot_gfile_get_child_build_path (GFile *parent, const char *first, ...) G_GNUC_NULL_TERMINATED; -gboolean ot_gio_shutil_cp_a (GFile *src, - GFile *dest, - GCancellable *cancellable, - GError **error); - -gboolean ot_gio_shutil_cp_al_or_fallback (GFile *src, - GFile *dest, - GCancellable *cancellable, - GError **error); - -gboolean ot_gio_shutil_rm_rf (GFile *path, - GCancellable *cancellable, - GError **error); - G_END_DECLS #endif diff --git a/src/ostree/ot-admin-builtin-deploy.c b/src/ostree/ot-admin-builtin-deploy.c index e7681b93..92026e7c 100644 --- a/src/ostree/ot-admin-builtin-deploy.c +++ b/src/ostree/ot-admin-builtin-deploy.c @@ -399,7 +399,7 @@ deploy_tree (OtAdminDeploy *self, deploy_target_etc_path = g_file_resolve_relative_path (deploy_dir, deploy_target_etc_name); /* Delete any previous temporary data */ - if (!ot_gio_shutil_rm_rf (deploy_target_path_tmp, cancellable, error)) + if (!gs_shutil_rm_rf (deploy_target_path_tmp, cancellable, error)) goto out; existing_checkout_info = g_file_query_info (deploy_target_path, OSTREE_GIO_FAST_QUERYINFO, @@ -409,9 +409,9 @@ deploy_tree (OtAdminDeploy *self, { if (opt_force) { - if (!ot_gio_shutil_rm_rf (deploy_target_path, cancellable, error)) + if (!gs_shutil_rm_rf (deploy_target_path, cancellable, error)) goto out; - if (!ot_gio_shutil_rm_rf (deploy_target_etc_path, cancellable, error)) + if (!gs_shutil_rm_rf (deploy_target_etc_path, cancellable, error)) goto out; skip_checkout = FALSE; @@ -482,11 +482,11 @@ deploy_tree (OtAdminDeploy *self, deploy_target_default_etc_path = ot_gfile_get_child_strconcat (deploy_target_path_tmp, "etc", NULL); - if (!ot_gio_shutil_rm_rf (deploy_target_etc_path, cancellable, error)) + if (!gs_shutil_rm_rf (deploy_target_etc_path, cancellable, error)) goto out; - if (!ot_gio_shutil_cp_a (deploy_target_default_etc_path, deploy_target_etc_path, - cancellable, error)) + if (!gs_shutil_cp_a (deploy_target_default_etc_path, deploy_target_etc_path, + cancellable, error)) goto out; g_print ("ostadmin: Created %s\n", gs_file_get_path_cached (deploy_target_etc_path)); diff --git a/src/ostree/ot-admin-builtin-prune.c b/src/ostree/ot-admin-builtin-prune.c index 89a209e8..34654173 100644 --- a/src/ostree/ot-admin-builtin-prune.c +++ b/src/ostree/ot-admin-builtin-prune.c @@ -143,12 +143,12 @@ ot_admin_builtin_prune (int argc, char **argv, GFile *ostree_dir, GError **error "-etc", NULL); g_print ("Deleting deployment %s\n", gs_file_get_path_cached (deployment)); - if (!ot_gio_shutil_rm_rf (deployment, cancellable, error)) + if (!gs_shutil_rm_rf (deployment, cancellable, error)) goto out; /* Note - not atomic; we may be leaving the -etc directory around * if this fails in the middle =/ */ - if (!ot_gio_shutil_rm_rf (deployment_etc, cancellable, error)) + if (!gs_shutil_rm_rf (deployment_etc, cancellable, error)) goto out; } diff --git a/src/ostree/ot-admin-builtin-update-kernel.c b/src/ostree/ot-admin-builtin-update-kernel.c index b944d0e5..c2f72268 100644 --- a/src/ostree/ot-admin-builtin-update-kernel.c +++ b/src/ostree/ot-admin-builtin-update-kernel.c @@ -58,7 +58,7 @@ copy_modules (OtAdminUpdateKernel *self, if (!g_file_query_exists (dest_modules_file, cancellable)) { - if (!ot_gio_shutil_cp_al_or_fallback (src_modules_file, dest_modules_file, cancellable, error)) + if (!gs_shutil_cp_al_or_fallback (src_modules_file, dest_modules_file, cancellable, error)) goto out; }