gitj 0.3.0

A gitk-style, Windows 3.1-flavored git repository browser and commit helper built on the Saudade toolkit
Documentation
[package]
name = "gitj"
version = "0.3.0"
edition = "2024"
rust-version = "1.88"
description = "A gitk-style, Windows 3.1-flavored git repository browser and commit helper built on the Saudade toolkit"
authors = ["Robert Lillack <rob@lillack.net>"]
repository = "https://github.com/roblillack/gitj"
homepage = "https://github.com/roblillack/gitj"
license = "MIT"
readme = "README.md"
keywords = ["git", "gitk", "git-gui", "retro", "gui"]
categories = ["gui", "development-tools"]

# Ship only what's needed to build and use the crate. A whitelist (rather than a
# growing `exclude`) guarantees we never accidentally publish test baselines,
# fonts, the screenshots example, the ~1 MB docs/ PNGs, or CI config. crates.io
# renders the README's relative images from the `repository`, so dropping docs/
# from the package doesn't affect the rendered crate page.
# `assets/status/*.svg` are baked by `include_svg!` at *build* time, including
# the downstream build of the published crate, so they must travel in the
# package or a fresh `cargo install gitj` would fail to compile.
include = ["src/**/*.rs", "assets/status/*.svg", "Cargo.toml", "README.md", "CHANGELOG.md", "LICENSE"]

# cargo-release settings. Single crate, no workspace, so everything lives here
# (unlike saudade, which splits the workspace-wide defaults into release.toml).
[package.metadata.release]
# Only ever cut a release from `main`.
allow-branch = ["main"]
pre-release-replacements = [
    # Roll CHANGELOG's [Unreleased] over to the new version and re-seed a fresh
    # [Unreleased] above it (the Keep a Changelog + cargo-release marker idiom).
    # Order matters: the version/date/compare substitutions run first, *then*
    # the markers re-insert the literal "Unreleased"/"ReleaseDate" tokens so the
    # next release finds them again.
    { file = "CHANGELOG.md", search = "Unreleased", replace = "{{version}}" },
    { file = "CHANGELOG.md", search = '\.\.\.HEAD', replace = "...{{tag_name}}", exactly = 1 },
    { file = "CHANGELOG.md", search = "ReleaseDate", replace = "{{date}}" },
    { file = "CHANGELOG.md", search = "<!-- next-header -->", replace = "<!-- next-header -->\n\n## [Unreleased] - ReleaseDate", exactly = 1 },
    { file = "CHANGELOG.md", search = "<!-- next-url -->", replace = "<!-- next-url -->\n[Unreleased]: https://github.com/roblillack/gitj/compare/{{tag_name}}...HEAD", exactly = 1 },
]

[dependencies]
saudade = "0.5"
git2 = { version = "0.18", default-features = false }
# Decodes the image blobs the graphical diff compares. A trimmed feature set
# (the raster formats people actually commit) keeps the build light; SVG stays a
# text diff, so no vector backend is needed here.
image = { version = "0.25", default-features = false, features = ["bmp", "gif", "ico", "jpeg", "png", "pnm", "qoi", "tga", "tiff", "webp"] }

[dev-dependencies]
insta = "1"
# Snapshot tests encode small PNGs to feed the graphical image diff.
image = { version = "0.25", default-features = false, features = ["png"] }

# The library half (backend + widgets + ui) is what the snapshot tests in
# tests/ link against; main.rs is the thin binary on top of it.
[lib]
name = "journey"
path = "src/lib.rs"

[[bin]]
name = "gitj"
path = "src/main.rs"