GitoxideLabs/gitoxide · info · anyhow::Error

Only human format is supported right now

Error message

Only human format is supported right now

What it means

`gix status show` rejects any output format other than Human, bailing before computing status. JSON (serde) output for status is not implemented yet in gitoxide-core, so the flag is explicitly refused up front.

Solutions

  1. Use the default human output
  2. Parse the simplified human format in your tooling as a stopgap
  3. Use `git status --porcelain` if a stable machine format is required
  4. Track gitoxide releases for status JSON support

Example fix

// before
gix status show --format json
// after
gix status show
Defensive patterns

Strategy: validation

Validate before calling

[ "$fmt" = "human" ] || { echo "status show supports only human output" >&2; exit 2; }

Try / catch

if ! gix status show --format json 2>err.log; then
  grep -q 'Only human format' err.log && gix status show
fi

Prevention

When it happens

Trigger: Calling `gix status show --format json` (or any non-Human OutputFormat) — the first check in `show` (gitoxide-core/src/repository/status.rs) fails immediately.

Common situations: Automation expecting machine-readable status; users familiar with `git status --porcelain` looking for a JSON equivalent; mixed CLI habits from other gix subcommands that do support JSON.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of GitoxideLabs/gitoxide@e73179060b (2026-09-08). Data as JSON: /api/errors/0dde09b1526dc2f1. Report an issue: GitHub.

Appendix: source

Thrown at gitoxide-core/src/repository/status.rs:66

    repo: gix::Repository,
    pathspecs: Vec<BString>,
    mut out: impl std::io::Write,
    mut err: impl std::io::Write,
    mut progress: impl gix::NestedProgress + 'static,
    Options {
        ignored,
        format,
        output_format,
        submodules,
        thread_limit,
        allow_write,
        statistics,
        index_worktree_renames,
        untracked,
    }: Options,
) -> anyhow::Result<()> {
    if output_format != OutputFormat::Human {
        bail!("Only human format is supported right now");
    }
    if !matches!(format, Format::Simplified) {
        bail!("Only the simplified format is currently implemented");
    }

    let start = std::time::Instant::now();
    let prefix = repo.prefix()?.unwrap_or(Path::new(""));
    let index_progress = progress.add_child("traverse index");
    let mut status = repo
        .status(index_progress)?
        .should_interrupt_shared(&gix::interrupt::IS_INTERRUPTED);
    if let Some(untracked) = untracked {
        status = status.untracked_files(untracked);
    }
    let mut iter = status
        .index_worktree_options_mut(|opts| {
            if let Some((opts, ignored)) = opts.dirwalk_options.as_mut().zip(ignored) {
                opts.set_emit_ignored(Some(match ignored {

View on GitHub (pinned to e73179060b)