From a94e0b8bf84c7a0bf1cb6e6cb6a7d548901d48ad Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 6 Dec 2011 20:16:03 -0500 Subject: [PATCH] core: Ensure we chown created directories too --- src/libostree/ostree-core.c | 11 ++++++++++- src/libostree/ostree-repo.c | 16 +++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c index e4fc1f00..8bd06487 100644 --- a/src/libostree/ostree-core.c +++ b/src/libostree/ostree-core.c @@ -884,7 +884,16 @@ ostree_create_file_from_input (GFile *dest_file, } dest_path = ot_gfile_get_path_cached (dest_file); - if (S_ISREG (mode)) + if (S_ISDIR (mode)) + { + if (mkdir (ot_gfile_get_path_cached (dest_file), + g_file_info_get_attribute_uint32 (finfo, "unix::mode")) < 0) + { + ot_util_set_error_from_errno (error, errno); + goto out; + } + } + else if (S_ISREG (mode)) { out = g_file_create (dest_file, 0, cancellable, error); if (!out) diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 2b896a08..7c9ef116 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -1995,16 +1995,14 @@ checkout_one_directory (OstreeRepo *self, if (!_ostree_repo_file_get_xattrs (dir, &xattr_variant, NULL, error)) goto out; - if (mkdir (dest_path, (mode_t)g_file_info_get_attribute_uint32 (dir_info, "unix::mode")) < 0) - { - ot_util_set_error_from_errno (error, errno); - g_prefix_error (error, "Failed to create directory '%s': ", dest_path); - goto out; - } - - if (!ostree_set_xattrs (dest_file, xattr_variant, cancellable, error)) + if (!ostree_create_file_from_input (dest_file, dir_info, + xattr_variant, + NULL, + OSTREE_OBJECT_TYPE_FILE, + NULL, + cancellable, error)) goto out; - + if (!checkout_tree (self, dir, dest_path, cancellable, error)) goto out;