mirror of
https://github.com/ostreedev/ostree.git
synced 2024-10-26 17:25:36 +03:00
OstreeMutableTree: Invalidate parent contents checksum when metadata changes
This bug has existed before the previous commit, but thanks to the previous commit it is now easy to fix. Closes: #1655 Approved by: cgwalters
This commit is contained in:
parent
5b0dd1002e
commit
488365f9bf
@ -148,7 +148,6 @@ invalidate_contents_checksum (OstreeMutableTree *self)
|
||||
if (!self->contents_checksum)
|
||||
break;
|
||||
|
||||
g_free (self->contents_checksum);
|
||||
g_clear_pointer (&self->contents_checksum, g_free);
|
||||
self = self->parent;
|
||||
}
|
||||
@ -158,6 +157,10 @@ void
|
||||
ostree_mutable_tree_set_metadata_checksum (OstreeMutableTree *self,
|
||||
const char *checksum)
|
||||
{
|
||||
if (g_strcmp0 (checksum, self->metadata_checksum) == 0)
|
||||
return;
|
||||
|
||||
invalidate_contents_checksum (self->parent);
|
||||
g_free (self->metadata_checksum);
|
||||
self->metadata_checksum = g_strdup (checksum);
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
static void
|
||||
test_metadata_checksum (void)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
const char *checksum = "12345678901234567890123456789012";
|
||||
glnx_unref_object OstreeMutableTree *tree = ostree_mutable_tree_new ();
|
||||
|
||||
@ -39,6 +40,27 @@ test_metadata_checksum (void)
|
||||
ostree_mutable_tree_set_metadata_checksum (tree, checksum);
|
||||
|
||||
g_assert_cmpstr (checksum, ==, ostree_mutable_tree_get_metadata_checksum (tree));
|
||||
|
||||
/* If a child tree's metadata changes the parent tree's contents needs to be
|
||||
* recalculated */
|
||||
glnx_unref_object OstreeMutableTree *subdir = NULL;
|
||||
g_assert (ostree_mutable_tree_ensure_dir (tree, "subdir", &subdir, &error));
|
||||
g_assert_nonnull (subdir);
|
||||
|
||||
ostree_mutable_tree_set_contents_checksum (
|
||||
subdir, "11111111111111111111111111111111");
|
||||
ostree_mutable_tree_set_metadata_checksum (
|
||||
subdir, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
||||
ostree_mutable_tree_set_contents_checksum (
|
||||
tree, "abcdefabcdefabcdefabcdefabcdefab");
|
||||
|
||||
g_assert_cmpstr (ostree_mutable_tree_get_contents_checksum (tree), ==,
|
||||
"abcdefabcdefabcdefabcdefabcdefab");
|
||||
ostree_mutable_tree_set_metadata_checksum (
|
||||
subdir, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
|
||||
g_assert_null (ostree_mutable_tree_get_contents_checksum (tree));
|
||||
g_assert_cmpstr (ostree_mutable_tree_get_contents_checksum (subdir), ==,
|
||||
"11111111111111111111111111111111");
|
||||
}
|
||||
|
||||
static void
|
||||
@ -162,13 +184,12 @@ test_contents_checksum (void)
|
||||
const char *subdir_checksum = "ABCD0123456789012345678901234567";
|
||||
glnx_unref_object OstreeMutableTree *tree = ostree_mutable_tree_new ();
|
||||
glnx_unref_object OstreeMutableTree *subdir = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_assert_null (ostree_mutable_tree_get_contents_checksum (tree));
|
||||
|
||||
ostree_mutable_tree_set_contents_checksum (tree, checksum);
|
||||
g_assert_cmpstr (checksum, ==, ostree_mutable_tree_get_contents_checksum (tree));
|
||||
|
||||
g_assert (ostree_mutable_tree_ensure_dir (tree, "subdir", &subdir, &error));
|
||||
g_assert (ostree_mutable_tree_ensure_dir (tree, "subdir", &subdir, NULL));
|
||||
g_assert_nonnull (subdir);
|
||||
|
||||
ostree_mutable_tree_set_contents_checksum (subdir, subdir_checksum);
|
||||
|
Loading…
Reference in New Issue
Block a user