mtree: Load traversed subdirs when creating parents
authorColin Walters <walters@verbum.org>
Fri, 18 Feb 2022 15:24:13 +0000 (10:24 -0500)
committerColin Walters <walters@verbum.org>
Fri, 18 Feb 2022 15:30:27 +0000 (10:30 -0500)
I'm working on enhancing the ostree-rs-ext test suite and I hit
a bug where walking a mtree and creating a parent would fail to
load lazy intermediate directories, e.g.:

/ -> usr -> bin

If we walked we'd load `/` but keep `usr` lazy, and then invalidation
would crash because it wasn't loaded.

If we're going to mutate a subdir, we need to have all the parents
loaded.

I know this is missing tests, but...it's a bit tedious to do with
the existing C tests.  Eventually soon we'll execute on merging
all 3 repos, and better share test suites.

src/libostree/ostree-mutable-tree.c

index e0e73f3704f61e3b20f8e7f3e16a44604edc5a24..4b3460e36a01a693953af00bca56b81ea5ba356d 100644 (file)
@@ -477,6 +477,9 @@ ostree_mutable_tree_ensure_parent_dirs (OstreeMutableTree  *self,
         }
 
       subdir = next;
+      g_assert (subdir);
+      if (!_ostree_mutable_tree_make_whole (subdir, NULL, error))
+        return FALSE;
     }
 
   if (out_parent)