[package] name = "alkgit" version = "0.0.1" edition = "2021" rust-version = "1.88" license = "MIT OR Apache-2.0" repository = "https://git.alk.dev/alkdev/alkgit" description = "Git smart protocol for the alk family: pkt-line substrates, protocol V2 serving (upload-pack/receive-pack), producer/consumer halves on alkcall channels, and backend traits with a feature-gated gitoxide implementation" keywords = ["git", "protocol", "alkcall", "vcs", "network"] categories = ["network-programming", "asynchronous"] [lib] name = "alkgit" path = "src/lib.rs" [features] default = ["gix", "registry-file"] # gitoxide-backed engine implementations (refs, pack gen/ingest). The # `gix` facade crate is NOT a dependency (ADR-012 §4) — the impls drive # the component crates directly (POC-2's shape). Disable for a # wire/protocol-only embed or with your own object-storage backend. gix = [ "dep:gix-odb", "dep:gix-pack", "dep:gix-ref", "dep:gix-object", "dep:gix-fsck", ] # File-backed GitRegistry/GitRegistryStore default (per-repo record # files + in-memory index) + the `git/repo/*` op set (ADR-012 §2–3). # No gitoxide. Disable to bring your own registry backend. registry-file = [] # sha256 passthrough (untested end-to-end; sha1 is pinned by default — OQ-05). # gix-hash stays always-on with sha1: the wire layer needs it, and gix-hash # fails to compile with neither hash feature selected (compile-time-rejected # invariant, see docs/research/gitoxide.md). sha256 = ["gix-hash/sha256"] [dependencies] alkcall = "0.8" # Trait-family dyn-compatibility (ADR-012 §1: all backend traits are # #[async_trait] — bare `async fn` in a trait is not dyn-compatible, # review 001 A-2; the family-wide pattern: alktty TtyBackend, alkcall # ProtocolHandler). async-trait = "0.1" gix-odb = { version = "0.84", optional = true, default-features = false, features = ["sha1"] } gix-pack = { version = "0.74", optional = true, features = ["sha1"] } gix-ref = { version = "0.67", optional = true } gix-object = { version = "0.64", optional = true, features = ["sha1"] } gix-fsck = { version = "0.25", optional = true, features = ["sha1"] } gix-hash = { version = "0.26", features = ["sha1"] } gix-packetline = "0.22" # Consumer half (ADR-017): gix-protocol with its async client (handshake + # ls-refs + fetch machinery) driven by a custom alkcall Transport impl # (gix-transport's client::Transport is the transport-agnostic seam); # the push client is hand-rolled to ADR-013's shapes (gitoxide has no # send-pack client). gix-protocol = { version = "0.65", features = ["async-client"] } gix-transport = { version = "0.59", features = ["async-client"] } tokio = { version = "1", default-features = false, features = ["rt", "sync", "io-util", "macros", "time"] } tokio-util = { version = "0.7", features = ["compat"] } futures = "0.3" bytes = "1" thiserror = "2" tracing = "0.1" parking_lot = "0.12" [dev-dependencies] tokio = { version = "1", features = ["full", "test-util", "macros"] } [profile.release] lto = "thin"