NameLast commit messageLast commit date
..
.vscodeUse traits instead of shadowing from_str5 years ago
bencheschange!: rename `parse::event::List` to `parse::Events` (#331)4 years ago
fuzzfoundation for allocation free (and smallvec free) parsing (#331)4 years ago
srcfix: Properly handle boolean values such that `a` is true but `a=` is false. (#450)4 years ago
testsfix: Properly handle boolean values such that `a` is true but `a=` is false. (#450)4 years ago
.gitignore[git-config]: remove redundant lines from git-ignore file5 years ago
Cargo.tomlRelease git-attributes v0.3.3, git-ref v0.15.3, git-index v0.4.3, git-worktree v0.4.3, git-testtools v0.8.04 years ago
CHANGELOG.mdRelease git-date v0.0.5, git-hash v0.9.8, git-features v0.22.2, git-actor v0.11.3, git-glob v0.3.2, git-quote v0.2.1, git-attributes v0.3.2, git-tempfile v2.0.4, git-lock v2.1.1, git-validate v0.5.5, git-object v0.20.2, git-ref v0.15.2, git-sec v0.3.1, git-config v0.7.0, git-credentials v0.4.0, git-diff v0.17.2, git-discover v0.4.1, git-bitmap v0.1.2, git-index v0.4.2, git-mailmap v0.3.2, git-chunk v0.3.1, git-traverse v0.16.2, git-pack v0.21.2, git-odb v0.31.2, git-packetline v0.12.7, git-url v0.7.2, git-transport v0.19.2, git-protocol v0.19.0, git-revision v0.4.2, git-refspec v0.1.0, git-worktree v0.4.2, git-repository v0.22.0, safety bump 4 crates4 years ago
LICENSE-APACHEimplement case insensitivity for names5 years ago
LICENSE-MITimplement case insensitivity for names5 years ago
README.mdupdate fuzz instructions and make it work (#331)4 years ago
README.md

git-config

git-config is a library for interacting with git-config files.

This crate intents to be a performant Rust implementation for reading and writing git-config files. It exposes tiers of abstractions, from simple config value wrappers to a high level reader and writer.

The highlight of this crate is the zero-copy parser. We employ techniques to avoid copying where necessary, and reads that do not need normalization are guaranteed to be zero-copy. Higher level abstractions maintain this guarantee, and utilizes acceleration structures for increased performance.

Currently, this is not a binary. While we do intent to have a drop-in replacement for the git config sub-command, we're currently missing system-level abstractions to do so.

Contributing

Contributions are always welcome!

Code quality

This repository enables pedantic, cargo, and nursery clippy lints. Make sure to run cargo clean && cargo clippy (the clean stage is very important!) to ensure your code is linted.

Testing

Since this is a performance oriented crate, in addition to well tested code via cargo test, we also perform benchmarks to measure notable gains or losses in performance. We use criterion so benches can be run via cargo bench after installing it via cargo install cargo-criterion.

Changes to parsing code may include a request to fuzz to ensure that it cannot panic on inputs. This can be done by executing cargo +nightly fuzz run parse after installing the fuzz sub-command via cargo install cargo-fuzz.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in git-config by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.