Manifest-driven source dependencies with git-format patches. See docs/DESIGN.md.
cargo install --path .
# or
cargo build --release && cp target/release/quarry ~/.cargo/bin/quarry init --name my-app
quarry add libfoo --git https://github.com/example/libfoo.git --rev v1.0.0
quarry syncCommit Quarry.toml and patches/. .quarry/ is gitignored and can be deleted anytime:
rm -rf .quarry && quarry sync| Command | Description |
|---|---|
quarry init |
New project (Quarry.toml, patches/, .gitignore) |
quarry sync [name] |
Fetch, checkout, apply patches (recursive) |
quarry sync --continue-on-error |
Sync all; collect errors at end |
quarry add <name> --git <url> --rev <rev> |
Add git dependency |
quarry add <name> --url <url> --rev <ver> [--hash sha256:…] |
Add HTTP archive |
quarry remove <name> [--patches] |
Remove dependency |
quarry edit <name> |
Prepare for local edits |
quarry patch <name> |
Write git diff to patches/ |
quarry diff <name> |
Show local changes vs rev |
quarry pin <name> |
Pin current HEAD to manifest |
quarry pin <name> --manifest-rev |
Resolve tag/branch in rev to SHA |
quarry bump <name> --rev <rev> |
Bump version and re-apply patches |
quarry update <name> [--rev] |
Re-sync one dependency |
quarry status |
Dependency state |
quarry verify |
CI validation |
quarry clean [--cache] |
Remove .quarry (optionally keep cache) |
Nested dependencies use slash paths: quarry sync libfoo/baz, quarry patch libfoo/baz.
[project]
name = "my-app"
quarry-dir = ".quarry"
patches-dir = "patches"
[dependencies.libfoo]
source = "git+https://github.com/org/libfoo.git"
rev = "a1b2c3d4e5f6..."
[[dependencies.libfoo.patches]]
path = "libfoo/0001-fix.patch"MIT OR Apache-2.0