vcs-git 0.5.0

Automate the Git CLI from Rust through process execution.
Documentation
[package]
name = "vcs-git"
version = "0.5.0"
description = "Automate the Git CLI from Rust through process execution."
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
readme = "README.md"

[dependencies]
# Runs `git` inside an OS job (Windows Job Object / Linux cgroup) so the process
# tree is killed on close — no orphaned subprocesses. Also the `ProcessRunner`
# seam, `CliClient` core, structured `Error`, and timeouts.
processkit.workspace = true
# Shared git-format unified-diff model + parser and the `Version` type (`git diff`
# and `jj diff --git` are byte-identical, so the parser is shared not duplicated).
vcs-diff = { path = "../diff", version = "0.1" }
# Shared processkit-coupled plumbing: the argv injection guard, fetch-retry
# policy, and the error classifiers (re-exported below).
vcs-cli-support = { path = "../cli-support", version = "0.1" }
# `async fn` in the object-safe `GitApi` trait (dyn + mockall friendly).
async-trait = "0.1"
# Auto-generated `MockGitApi` for consumers' tests. Test-only — enabled only via
# the `mock` feature, never compiled into production builds.
mockall = { version = "0.13", optional = true }

[features]
# Expose the `mockall`-generated `MockGitApi` (and pull in processkit's mocks).
mock = ["dep:mockall", "processkit/mock"]
# Emit a `tracing` event per command run (forwards to processkit's `tracing`).
tracing = ["processkit/tracing"]
# Off by default. Pulls in processkit's `cancellation` feature, which makes the
# `cli_client!` macro emit `Git::default_cancel_on(token)` — a consumer can build
# a cancellable client (every command it runs dies when the token fires) and pass
# it through `Repo::from_git`. No new vcs-* API; `CancellationToken` is re-exported
# from `processkit`.
cancellation = ["processkit/cancellation"]

[dev-dependencies]
# `#[tokio::test]` for the async unit/integration tests; `time` + `test-util`
# back the paused-clock cancellation test (`start_paused`, `time::timeout`).
tokio = { version = "1", features = ["macros", "rt-multi-thread", "time", "test-util"] }
# Throwaway git/jj repos for the ignored integration tests. Path-only: dev-deps
# are stripped on publish, so this adds no release coupling.
vcs-testkit = { path = "../testkit" }
# Property-based fuzzing of the pure parsers (panic-freedom on arbitrary input,
# byte-exact conflict roundtrip). Stable Rust, dev-only.
proptest = "1"

[package.metadata.docs.rs]
# Build docs.rs with every feature so the optional surfaces (mock / tracing /
# cancellation / serde / stream) are documented (defaults alone hide them), and pass
# `--cfg docsrs` so feature-gated items render an "Available on feature `x`" badge.
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints]
workspace = true