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
@@ -27,6 +27,7 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct OstreeRepo OstreeRepo;
|
||||
typedef struct OstreeRepoDevInoCache OstreeRepoDevInoCache;
|
||||
typedef struct OstreeSePolicy OstreeSePolicy;
|
||||
typedef struct OstreeSysroot OstreeSysroot;
|
||||
typedef struct OstreeSysrootUpgrader OstreeSysrootUpgrader;
|
||||
|
||||
Reference in new issue
Block a user