pub fn index_as_worktree<'index, T, U, Find, E>(
index: &'index State,
worktree: &Path,
collector: &mut impl VisitEntry<'index, ContentChange = T, SubmoduleStatus = U>,
compare: impl CompareBlobs<Output = T> + Send + Clone,
submodule: impl SubmoduleStatus<Output = U, Error = E> + Send + Clone,
objects: Find,
progress: &mut dyn Progress,
_: Context<'_>,
options: Options,
) -> Result<Outcome, Error>
Expand description
Calculates the changes that need to be applied to an index
to match the state of the worktree
and makes them
observable in collector
, along with information produced by compare
which gets to see blobs that may have changes, and
submodule
which can take a look at submodules in detail to produce status information (BASE version if its conflicting).
options
are used to configure the operation.
Note worktree
must be the root path of the worktree, not a path inside of the worktree.
Note that index
may require changes to be up-to-date with the working tree and avoid expensive computations by updating
respective entries with stat information from the worktree, and its timestamp is adjusted to the current time for which it
will be considered fresh. All changes that would be applied to the index are delegated to the caller, which receives these
as EntryStatus
.
The pathspec
is used to determine which index entries to check for status in the first place.
objects
is used to access the version of an object in the object database for direct comparison.
It’s important to note that the index
should have its timestamp updated with a timestamp
from just before making this call if entries were updated
§Note
Technically, this function does more as it also provides additional information, like whether a file has conflicts,
and files that were added with git add
are shown as a special as well. It also provides updates to entry filesystem
stats like git status
would if it had to determine the hash.
If that happened, the index should be written back after updating the entries with these updated stats, see Outcome::skipped.
Thus, some care has to be taken to do the right thing when letting the index match the worktree by evaluating the changes observed
by the collector
.