Cargo features guide
Cargo uses feature toggles to control which dependencies are pulled in, allowing users to specialize crates to fit their usage. Ideally, these should be additive. This guide documents which features are available for each of the crates provided here and how they function.
gitoxide
The top-level command-line interface.
- fast
- Makes the crate execute as fast as possible by supporting parallel computation of otherwise long-running functions as well as fast, hardware accelerated hashing.
- If disabled, the binary will be visibly smaller.
- http
- support synchronous 'http' and 'https' transports (e.g. for clone, fetch and push) at the expense of compile times and binary size
- (mutually exclusive)
- pretty-cli
- Use
clap3.0 to build the prettiest, best documented and most user-friendly CLI at the expense of binary size. - provides a terminal user interface for detailed and exhaustive progress.
- provides a line renderer for leaner progress
- Use
- lean-cli
- Use
arghto produce a usable binary with decent documentation that is smallest in size, usually 300kb less thanpretty-cli. - If
pretty-cliis enabled as well,lean-cliwill take precedence, and you pay for building unnecessary dependencies. - provides a line renderer for lean but pretty progress
- Use
- pretty-cli
- prodash-render-line-crossterm or prodash-render-line-termion (mutually exclusive)
- The
--verboseflag will be powered by an interactive progress mechanism that doubles as log as well as interactive progress that appears after a short duration.
- The
- gitoxide-core-organize
- An alias for
gitoxide-core/organize.
- An alias for
There are convenience features, which combine common choices of the above into one name
- max = pretty-cli + fast + prodash-render-tui-crossterm + http + gitoxide-core-organize
- default, for unix and windows
- max-termion = pretty-cli + fast + prodash-render-tui-termion + http + gitoxide-core-organize
- for unix only, faster compile times, a little smaller
- lean = lean-cli + fast + prodash-render-line-crossterm + gitoxide-core-organize
- for unix and windows, significantly smaller than max, but without
--progressterminal user interface.
- for unix and windows, significantly smaller than max, but without
- lean-termion = lean-cli + fast + prodash-render-line-termion + gitoxide-core-organize
- for unix only, faster compile times, a little smaller
- light = lean-cli + fast + gitoxide-core-organize
- crossplatform by nature as this comes with simplified log based progress
- small = lean-cli
- As small as it can possibly be, no threading, no fast sha1, log based progress only, no cleanup of temporary files on interrupt
gitoxide-core
The library powering the command-line interface.
- organize
- provides the 'organize' subcommand
- Includes
jwalkto find repositories quickly in order to move into a directory structure automatically.
- Includes
- provides the 'find' subcommand
- discover all git repositories within a directory. Particularly useful with skim.
- provides the 'organize' subcommand
git-odb
- pack-cache-lru-static
- Provide a fixed-size allocation-free LRU cache for packs. It's useful if caching is desired while keeping the memory footprint for the LRU-cache itself low.
- pack-cache-lru-dynamic
- Provide a hash-map based LRU cache whose eviction is based a memory cap calculated from object data.
git-features
A crate to help controlling which capabilities are available from the top-level crate that uses gitoxide-core or any other
gitoxide crate that uses git-features.
All feature toggles are additive.
- parallel
- Use scoped threads and channels to parallelize common workloads on multiple objects. If enabled, it is used everywhere where it makes sense.
- As caches are likely to be used and instantiated per thread, more memory will be used on top of the costs for threads.
- fast-sha1
- a multi-crate implementation that can use hardware acceleration, thus bearing the potential for up to 2Gb/s throughput on CPUs that support it, like AMD Ryzen or Intel Core i3.
- mutually-exclusive
- interrupt-handler
- Listen to interrupts and termination requests and provide long-running operations tooling to allow aborting the input stream.
- Note that
git_features::interrupt::init_handler()must be called at the start of the application.
- Note that
- If the application already sets a handler, this handler will have no effect.
- If unset, these utilities can still be triggered programmatically. However, interrupting with Ctrl+C or SIGTERM may lead to leaking temporary files.
- Listen to interrupts and termination requests and provide long-running operations tooling to allow aborting the input stream.
- disable-interrupts (takes precedence if interrupt-handler is set as well)
- If set, interrupts cannot be triggered programmatically and it's up to the user to inject means of supporting interrupts.
- Useful if there is multiple interruptible operations at the same time that should be triggered independently. After all, this facility is a global one.
- Probably useful for server implementations.
- interrupt-handler
- io-pipe
- an in-memory unidirectional pipe using
bytesas efficient transfer mechanism
- an in-memory unidirectional pipe using
git-transport
Blocking clients
Using any of the feature toggles here will set the entire codebase to be synchronous and blocking. This has the advantage that less dependencies are compiled into a smaller binary.
- http-client-curl
- Adds support for the http and https transports using the Rust bindings for
libcurl
- Adds support for the http and https transports using the Rust bindings for
Blocking clients
- async-http-client-surf ** TBD
Serialization Support
What follows is feature toggles to control serialization of all public facing simple data types.
- serde1
- Data structures implement
serde::Serializeandserde::Deserialize
- Data structures implement
The feature above is provided by the crates:
- git-object
- git-url
- git-odb
- git-protocol
- gitoxide-core