core: Fix object enumeration for archive-z2 repositories
This makes fsck work again, among other things.
This commit is contained in:
parent
bde7e5c719
commit
5d1b0ec1b3
|
|
@ -1067,26 +1067,18 @@ stage_object (OstreeRepo *self,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
get_loose_object_dirs (OstreeRepo *self,
|
append_object_dirs_from (OstreeRepo *self,
|
||||||
GPtrArray **out_object_dirs,
|
GFile *dir,
|
||||||
GCancellable *cancellable,
|
GPtrArray *object_dirs,
|
||||||
GError **error)
|
GCancellable *cancellable,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
GError *temp_error = NULL;
|
GError *temp_error = NULL;
|
||||||
ot_lobj GFile *object_dir_to_scan;
|
gs_unref_object GFileEnumerator *enumerator = NULL;
|
||||||
ot_lptrarray GPtrArray *ret_object_dirs = NULL;
|
gs_unref_object GFileInfo *file_info = NULL;
|
||||||
ot_lobj GFileEnumerator *enumerator = NULL;
|
|
||||||
ot_lobj GFileInfo *file_info = NULL;
|
|
||||||
|
|
||||||
ret_object_dirs = g_ptr_array_new_with_free_func ((GDestroyNotify)g_object_unref);
|
enumerator = g_file_enumerate_children (dir, OSTREE_GIO_FAST_QUERYINFO,
|
||||||
|
|
||||||
if (ostree_repo_get_mode (self) == OSTREE_REPO_MODE_ARCHIVE_Z2)
|
|
||||||
object_dir_to_scan = g_file_get_child (self->uncompressed_objects_dir, "objects");
|
|
||||||
else
|
|
||||||
object_dir_to_scan = g_object_ref (self->objects_dir);
|
|
||||||
|
|
||||||
enumerator = g_file_enumerate_children (object_dir_to_scan, OSTREE_GIO_FAST_QUERYINFO,
|
|
||||||
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
|
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
|
||||||
cancellable,
|
cancellable,
|
||||||
&temp_error);
|
&temp_error);
|
||||||
|
|
@ -1096,7 +1088,6 @@ get_loose_object_dirs (OstreeRepo *self,
|
||||||
{
|
{
|
||||||
g_clear_error (&temp_error);
|
g_clear_error (&temp_error);
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
ot_transfer_out_value (out_object_dirs, &ret_object_dirs);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_propagate_error (error, temp_error);
|
g_propagate_error (error, temp_error);
|
||||||
|
|
@ -1114,8 +1105,8 @@ get_loose_object_dirs (OstreeRepo *self,
|
||||||
|
|
||||||
if (strlen (name) == 2 && type == G_FILE_TYPE_DIRECTORY)
|
if (strlen (name) == 2 && type == G_FILE_TYPE_DIRECTORY)
|
||||||
{
|
{
|
||||||
GFile *objdir = g_file_get_child (object_dir_to_scan, name);
|
GFile *objdir = g_file_get_child (g_file_enumerator_get_container (enumerator), name);
|
||||||
g_ptr_array_add (ret_object_dirs, objdir); /* transfer ownership */
|
g_ptr_array_add (object_dirs, objdir); /* transfer ownership */
|
||||||
}
|
}
|
||||||
g_clear_object (&file_info);
|
g_clear_object (&file_info);
|
||||||
}
|
}
|
||||||
|
|
@ -1128,6 +1119,34 @@ get_loose_object_dirs (OstreeRepo *self,
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
get_loose_object_dirs (OstreeRepo *self,
|
||||||
|
GPtrArray **out_object_dirs,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gboolean ret = FALSE;
|
||||||
|
gs_unref_ptrarray GPtrArray *ret_object_dirs = NULL;
|
||||||
|
|
||||||
|
ret_object_dirs = g_ptr_array_new_with_free_func ((GDestroyNotify)g_object_unref);
|
||||||
|
|
||||||
|
if (ostree_repo_get_mode (self) == OSTREE_REPO_MODE_ARCHIVE_Z2)
|
||||||
|
{
|
||||||
|
gs_unref_object GFile *cachedir = g_file_get_child (self->uncompressed_objects_dir, "objects");
|
||||||
|
if (!append_object_dirs_from (self, cachedir, ret_object_dirs,
|
||||||
|
cancellable, error))
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!append_object_dirs_from (self, self->objects_dir, ret_object_dirs,
|
||||||
|
cancellable, error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
ot_transfer_out_value (out_object_dirs, &ret_object_dirs);
|
ot_transfer_out_value (out_object_dirs, &ret_object_dirs);
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue