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;