repo: Add APIs for devino optimization between checkout -> commit
A fast way to generate new OSTree content using an existing tree is to checkout (as hard links), add/replace files, then call `ostree_repo_scan_hardlinks()`, then commit. But `ostree_repo_scan_hardlinks()` scans the entire repo, which can be slow if you have a lot of content. All we really need is a mapping of (device,inode) -> checksum just for the objects we checked out, then use that mapping for commits. This patch adds API so that callers can create a mapping via `ostree_repo_devino_cache_new()`, then pass it to `ostree_repo_checkout_tree_at()` which will populate it, and then `ostree_repo_write_directory_to_mtree()` can consume it. I plan to use this in rpm-ostree for package layering work. Notes: - The old `ostree_repo_scan_hardlinks()` API still works. - I tweaked the cache to be a set with the checksum colocated with the key, to avoid a separate malloc block per entry. https://github.com/GNOME/ostree/pull/167
This commit is contained in:
1 parent
21fbc16bc3
commit
5929ce9e0e
6 files changed
+157
-51
No files matched your search
@@ -276,8 +276,12 @@ ostree_repo_commit_modifier_new
|
||||
OstreeRepoCommitModifierXattrCallback
|
||||
ostree_repo_commit_modifier_set_xattr_callback
|
||||
ostree_repo_commit_modifier_set_sepolicy
|
||||
ostree_repo_commit_modifier_set_devino_cache
|
||||
ostree_repo_commit_modifier_ref
|
||||
ostree_repo_commit_modifier_unref
|
||||
ostree_repo_devino_cache_new
|
||||
ostree_repo_devino_cache_ref
|
||||
ostree_repo_devino_cache_unref
|
||||
ostree_repo_write_directory_to_mtree
|
||||
ostree_repo_write_dfd_to_mtree
|
||||
ostree_repo_write_archive_to_mtree
|
||||
|
||||
Reference in new issue
Block a user