core: INCOMPATIBLE CHANGE: Name repo files with their type (e.g. .dirmeta)

This makes inspection easier.  Internally the code gets simpler because
metadata and files are more unified; there is just one object type.
This commit is contained in:
Colin Walters committed 2011-12-12 12:29:09 -05:00
1 parent db9b7b7be6
commit b8e8b58585
13 files changed
+295 -292

No files matched your search

+73 -67
View File
@@ -296,7 +296,7 @@ ostree_repo_resolve_rev (OstreeRepo *self,
if (!ostree_repo_resolve_rev (self, tmp, allow_noent, &tmp2, error))
goto out;
if (!ostree_repo_load_variant_checked (self, OSTREE_SERIALIZED_COMMIT_VARIANT, tmp2, &commit, error))
if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_COMMIT, tmp2, &commit, error))
goto out;
g_variant_get_child (commit, 2, "s", &ret_rev);
@@ -642,6 +642,23 @@ ostree_repo_get_mode (OstreeRepo *self)
return priv->mode;
}
static OstreeObjectType
get_objtype_for_repo_file (OstreeRepo *self)
{
OstreeRepoPrivate *priv = GET_PRIVATE (self);
if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
return OSTREE_OBJECT_TYPE_ARCHIVED_FILE;
else
return OSTREE_OBJECT_TYPE_RAW_FILE;
}
GFile *
ostree_repo_get_file_object_path (OstreeRepo *self,
const char *checksum)
{
return ostree_repo_get_object_path (self, checksum, get_objtype_for_repo_file (self));
}
static gboolean
ostree_repo_stage_object (OstreeRepo *self,
OstreeObjectType objtype,
@@ -663,7 +680,7 @@ ostree_repo_stage_object (OstreeRepo *self,
if (g_cancellable_set_error_if_cancelled (cancellable, error))
return FALSE;
if (objtype == OSTREE_OBJECT_TYPE_FILE && priv->mode == OSTREE_REPO_MODE_ARCHIVE)
if (!OSTREE_OBJECT_TYPE_IS_META(objtype) && priv->mode == OSTREE_REPO_MODE_ARCHIVE)
{
if (!ostree_create_temp_regular_file (priv->tmp_dir,
"archive-tmp-", NULL,
@@ -796,6 +813,7 @@ commit_file (OstreeRepo *self,
GFile *tmp_file = NULL;
GChecksum *ret_checksum = NULL;
gboolean did_exist;
OstreeObjectType objtype;
g_assert (expected_checksum || out_checksum);
@@ -816,7 +834,9 @@ commit_file (OstreeRepo *self,
goto out;
}
if (!ostree_repo_stage_object (self, OSTREE_OBJECT_TYPE_FILE,
objtype = get_objtype_for_repo_file (self);
if (!ostree_repo_stage_object (self, objtype,
file_info, xattrs, input,
&tmp_file, out_checksum ? &ret_checksum : NULL,
cancellable, error))
@@ -825,7 +845,7 @@ commit_file (OstreeRepo *self,
if (expected_checksum == NULL)
expected_checksum = g_checksum_get_string (ret_checksum);
if (!commit_staged_file (self, tmp_file, expected_checksum, OSTREE_OBJECT_TYPE_FILE,
if (!commit_staged_file (self, tmp_file, expected_checksum, objtype,
&did_exist, cancellable, error))
goto out;
g_clear_object (&tmp_file);
@@ -844,12 +864,12 @@ commit_file (OstreeRepo *self,
}
static gboolean
import_gvariant_object (OstreeRepo *self,
OstreeSerializedVariantType type,
GVariant *variant,
GChecksum **out_checksum,
GCancellable *cancellable,
GError **error)
import_gvariant_object (OstreeRepo *self,
OstreeObjectType type,
GVariant *variant,
GChecksum **out_checksum,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
GChecksum *ret_checksum = NULL;
@@ -861,7 +881,7 @@ import_gvariant_object (OstreeRepo *self,
g_variant_get_size (serialized),
NULL);
if (!stage_and_commit_from_input (self, OSTREE_OBJECT_TYPE_META,
if (!stage_and_commit_from_input (self, type,
NULL, NULL, mem,
&ret_checksum,
cancellable, error))
@@ -877,17 +897,22 @@ import_gvariant_object (OstreeRepo *self,
}
gboolean
ostree_repo_load_variant_checked (OstreeRepo *self,
OstreeSerializedVariantType expected_type,
const char *sha256,
GVariant **out_variant,
GError **error)
ostree_repo_load_variant (OstreeRepo *self,
OstreeObjectType expected_type,
const char *sha256,
GVariant **out_variant,
GError **error)
{
gboolean ret = FALSE;
OstreeSerializedVariantType type;
OstreeObjectType type;
GFile *object_path = NULL;
GVariant *ret_variant = NULL;
if (!ostree_repo_load_variant (self, sha256, &type, &ret_variant, error))
g_return_val_if_fail (OSTREE_OBJECT_TYPE_IS_META (expected_type), FALSE);
object_path = ostree_repo_get_object_path (self, sha256, expected_type);
if (!ostree_parse_metadata_file (object_path, &type, &ret_variant, error))
goto out;
if (type != expected_type)
@@ -901,6 +926,7 @@ ostree_repo_load_variant_checked (OstreeRepo *self,
ret = TRUE;
ot_transfer_out_value(out_variant, &ret_variant);
out:
g_clear_object (&object_path);
ot_clear_gvariant (&ret_variant);
return ret;
}
@@ -922,7 +948,7 @@ import_directory_meta (OstreeRepo *self,
dirmeta = ostree_create_directory_metadata (file_info, xattrs);
if (!import_gvariant_object (self, OSTREE_SERIALIZED_DIRMETA_VARIANT,
if (!import_gvariant_object (self, OSTREE_OBJECT_TYPE_DIR_META,
dirmeta, &ret_checksum, cancellable, error))
goto out;
@@ -944,7 +970,7 @@ ostree_repo_get_object_path (OstreeRepo *self,
char *relpath;
GFile *ret;
relpath = ostree_get_relative_object_path (checksum, type, priv->mode == OSTREE_REPO_MODE_ARCHIVE);
relpath = ostree_get_relative_object_path (checksum, type);
path = g_build_filename (priv->path, relpath, NULL);
g_free (relpath);
ret = ot_gfile_new_for_path (path);
@@ -969,7 +995,7 @@ ostree_repo_store_object_trusted (OstreeRepo *self,
if (!g_file_query_exists (local_object, cancellable))
{
if (objtype == OSTREE_OBJECT_TYPE_FILE)
if (!OSTREE_OBJECT_TYPE_IS_META (objtype))
{
if (!commit_file (self, file, checksum, NULL, cancellable, error))
goto out;
@@ -980,7 +1006,7 @@ ostree_repo_store_object_trusted (OstreeRepo *self,
if (!input)
goto out;
if (!stage_and_commit_from_input (self, OSTREE_OBJECT_TYPE_META,
if (!stage_and_commit_from_input (self, objtype,
NULL, NULL, input,
NULL, cancellable, error))
goto out;
@@ -1009,22 +1035,26 @@ ostree_repo_store_archived_file (OstreeRepo *self,
GFile *src = NULL;
GInputStream *input = NULL;
GVariant *xattrs = NULL;
OstreeObjectType dest_objtype;
src = ot_gfile_new_for_path (path);
if (objtype == OSTREE_OBJECT_TYPE_META)
if (OSTREE_OBJECT_TYPE_IS_META(objtype))
{
dest_objtype = objtype;
input = (GInputStream*)g_file_read (src, NULL, error);
if (!input)
goto out;
}
else
{
/* Ensure we convert archived files to bare, or vice versa */
dest_objtype = get_objtype_for_repo_file (self);
if (!ostree_parse_archived_file (src, &file_info, &xattrs, &input, NULL, error))
goto out;
}
if (!ostree_repo_stage_object (self, objtype,
if (!ostree_repo_stage_object (self, dest_objtype,
file_info, xattrs, input,
&tmp_file, &checksum, NULL, error))
goto out;
@@ -1038,7 +1068,7 @@ ostree_repo_store_archived_file (OstreeRepo *self,
}
if (!commit_staged_file (self, tmp_file, g_checksum_get_string (checksum),
objtype, did_exist, NULL, error))
dest_objtype, did_exist, NULL, error))
goto out;
g_clear_object (&tmp_file);
@@ -1123,7 +1153,7 @@ import_commit (OstreeRepo *self,
root_contents_checksum,
root_metadata_checksum);
g_variant_ref_sink (commit);
if (!import_gvariant_object (self, OSTREE_SERIALIZED_COMMIT_VARIANT,
if (!import_gvariant_object (self, OSTREE_OBJECT_TYPE_COMMIT,
commit, &ret_commit, NULL, error))
goto out;
@@ -1208,7 +1238,6 @@ create_tree_variant_from_hashes (GHashTable *file_checksums,
return serialized_tree;
}
static gboolean
import_directory_recurse (OstreeRepo *self,
@@ -1303,7 +1332,7 @@ import_directory_recurse (OstreeRepo *self,
if (!xattrs)
goto out;
if (!stage_and_commit_from_input (self, OSTREE_OBJECT_TYPE_FILE,
if (!stage_and_commit_from_input (self, get_objtype_for_repo_file (self),
child_info, xattrs, file_input,
&child_file_checksum, cancellable, error))
goto out;
@@ -1324,7 +1353,7 @@ import_directory_recurse (OstreeRepo *self,
dir_contents_checksums,
dir_metadata_checksums);
if (!import_gvariant_object (self, OSTREE_SERIALIZED_TREE_VARIANT,
if (!import_gvariant_object (self, OSTREE_OBJECT_TYPE_DIR_TREE,
serialized_tree, &ret_contents_checksum,
cancellable, error))
goto out;
@@ -1462,7 +1491,7 @@ import_libarchive_entry_file (OstreeRepo *self,
if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_REGULAR)
archive_stream = ostree_libarchive_input_stream_new (a);
if (!stage_and_commit_from_input (self, OSTREE_OBJECT_TYPE_FILE,
if (!stage_and_commit_from_input (self, get_objtype_for_repo_file (self),
file_info, NULL, archive_stream,
&ret_checksum, cancellable, error))
goto out;
@@ -1582,7 +1611,7 @@ file_tree_import_recurse (OstreeRepo *self,
dir_contents_checksums,
dir_metadata_checksums);
if (!import_gvariant_object (self, OSTREE_SERIALIZED_TREE_VARIANT,
if (!import_gvariant_object (self, OSTREE_OBJECT_TYPE_DIR_TREE,
serialized_tree, &ret_contents_checksum_obj,
cancellable, error))
goto out;
@@ -1916,11 +1945,16 @@ iter_object_dir (OstreeRepo *self,
if (type == G_FILE_TYPE_DIRECTORY)
goto loop_out;
if (g_str_has_suffix (name, ".meta"))
objtype = OSTREE_OBJECT_TYPE_META;
else if (g_str_has_suffix (name, ".file")
|| g_str_has_suffix (name, ".archive"))
objtype = OSTREE_OBJECT_TYPE_FILE;
if (g_str_has_suffix (name, ".file"))
objtype = OSTREE_OBJECT_TYPE_RAW_FILE;
else if (g_str_has_suffix (name, ".archive"))
objtype = OSTREE_OBJECT_TYPE_ARCHIVED_FILE;
else if (g_str_has_suffix (name, ".dirtree"))
objtype = OSTREE_OBJECT_TYPE_DIR_TREE;
else if (g_str_has_suffix (name, ".dirmeta"))
objtype = OSTREE_OBJECT_TYPE_DIR_META;
else if (g_str_has_suffix (name, ".commit"))
objtype = OSTREE_OBJECT_TYPE_COMMIT;
else
goto loop_out;
@@ -2016,34 +2050,6 @@ ostree_repo_iter_objects (OstreeRepo *self,
return ret;
}
gboolean
ostree_repo_load_variant (OstreeRepo *self,
const char *sha256,
OstreeSerializedVariantType *out_type,
GVariant **out_variant,
GError **error)
{
gboolean ret = FALSE;
OstreeSerializedVariantType ret_type;
GVariant *ret_variant = NULL;
GFile *f = NULL;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
f = ostree_repo_get_object_path (self, sha256, OSTREE_OBJECT_TYPE_META);
if (!ostree_parse_metadata_file (f, &ret_type, &ret_variant, error))
goto out;
ret = TRUE;
if (out_type)
*out_type = ret_type;
ot_transfer_out_value(out_variant, &ret_variant);
out:
ot_clear_gvariant (&ret_variant);
g_clear_object (&f);
return ret;
}
static gboolean
checkout_file_from_input (GFile *file,
OstreeRepoCheckoutMode mode,
@@ -2070,7 +2076,7 @@ checkout_file_from_input (GFile *file,
}
if (!ostree_create_file_from_input (file, temp_info ? temp_info : finfo,
xattrs, input, OSTREE_OBJECT_TYPE_FILE,
xattrs, input, OSTREE_OBJECT_TYPE_RAW_FILE,
NULL, cancellable, error))
goto out;
@@ -2137,7 +2143,7 @@ checkout_tree (OstreeRepo *self,
{
const char *checksum = _ostree_repo_file_get_checksum ((OstreeRepoFile*)src_child);
object_path = ostree_repo_get_object_path (self, checksum, OSTREE_OBJECT_TYPE_FILE);
object_path = ostree_repo_get_object_path (self, checksum, get_objtype_for_repo_file (self));
if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
{
@@ -2239,7 +2245,7 @@ get_file_checksum (GFile *f,
}
else
{
if (!ostree_checksum_file (f, OSTREE_OBJECT_TYPE_FILE,
if (!ostree_checksum_file (f, OSTREE_OBJECT_TYPE_RAW_FILE,
&tmp_checksum, cancellable, error))
goto out;
ret_checksum = g_strdup (g_checksum_get_string (tmp_checksum));