Crate gix_status

Source
Expand description

This crate includes the various diffs git can do between different representations of the repository state, like comparisons between…

  • index and working tree
  • tree and index

…while also being able to check if the working tree is dirty, quickly, by instructing the operation to stop once the first change was found.

§Tree-Index Status

This status is not actually implemented here as it’s not implemented directly. Instead, one creates an Index from a tree and then diffs two indices with gix_diff::index(index_from_tree, usually_dot_git_index). This adds about 15% to the runtime and comes at the cost of another index in memory. Once there are generators implementing depth-first tree iteration should become trivial, but for now it’s very hard if one wants to return referenced state of the iterator (which is not possible).

§Difference to gix-diff

Technically, status is just another form of diff between different kind of sides, i.e. an index and a working tree. This is the difference to gix-diff, which compares only similar items.

§Feature Flags

  • worktree-rewrites — Add support for tracking rewrites along with checking for worktree modifications.

Modules§

Structs§

  • A stack that validates we are not going through a symlink in a way that is read-only.

Functions§

  • 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.
  • Similar to index_as_worktree(…), except that it will automatically track renames if enabled, while additionally providing information about untracked files (or more, depending on the configuration).