pub fn tree_with_rewrites<E>(
lhs: TreeRefIter<'_>,
rhs: TreeRefIter<'_>,
resource_cache: &mut Platform,
tree_diff_state: &mut State,
objects: &impl FindObjectOrHeader,
for_each: impl FnMut(ChangeRef<'_>) -> Result<Action, E>,
options: Options,
) -> Result<Option<Outcome>, Error>blob only.Expand description
Call for_each repeatedly with all changes that are needed to convert lhs to rhs.
Provide a resource_cache to speed up obtaining blobs for similarity checks.
tree_diff_state can be used to re-use tree-diff memory between calls.
objects are used to lookup trees while performing the diff.
Use options to further configure how the rename tracking is performed.
Reusing resource_cache between multiple invocations saves a lot of IOps as it avoids the creation
of a temporary resource_cache that triggers reading or checking for multiple gitattribute files.
Note that it’s recommended to call clear_resource_cache()
between the calls to avoid runaway memory usage, as the cache isn’t limited.
Note that to do rename tracking like git does, one has to configure the resource_cache with
a conversion pipeline that uses crate::blob::pipeline::Mode::ToGit.
rhs or lhs can be empty to indicate deletion or addition of an entire tree.
Note that the rewrite outcome is only available if rewrite-tracking was enabled.