lib/commit: don't query devino cache for modified files
authorJonathan Lebon <jlebon@redhat.com>
Thu, 28 Sep 2017 19:08:06 +0000 (19:08 +0000)
committerAtomic Bot <atomic-devel@projectatomic.io>
Sat, 30 Sep 2017 00:05:07 +0000 (00:05 +0000)
commit8fe45362578a43260876134d6547ebd0bb2485c3
treee91911b8e084a18a43b55d5420dcae20d6fba955
parente4a90caeb9d210344e537e2a9b8016dc0e01e15a
lib/commit: don't query devino cache for modified files

We can't use the cache if the file we want to commit has been modified
by the client through the file info or xattr modifiers. We would
prematurely look into the cache in `write_dfd_iter_to_mtree_internal`,
regardless of whether any filtering applied.

We remove that path there, and make sure that we only use the cache if
there were no modifications. We rename the `get_modified_xattrs` to
`get_final_xattrs` to reflect the fact that the xattrs may not be
modified.

One tricky bit that took me some time was that we now need to store the
st_dev & st_ino values in the GFileInfo because the cache lookup relies
on it. I'm guessing we regressed on this at some point.

This patch does slightly change the semantics of the xattr callback.
Previously, returning NULL from the cb meant no xattrs at all. Now, it
means to default to the on-disk state. We might want to consider putting
that behind a flag instead. Though it seems like a more useful behaviour
so that callers can only override the files they want to without losing
original on-disk state (and if they don't want that, just return an
empty GVariant).

Closes: #1165
Closes: #1170
Approved by: cgwalters
src/libostree/ostree-core-private.h
src/libostree/ostree-core.c
src/libostree/ostree-repo-commit.c
tests/basic-test.sh
tests/test-basic-c.c