GitoxideLabs/gitoxide · error · anyhow::Error

Only human output is supported right now

Error message

Only human output is supported right now

What it means

The `gix mailmap check` command only supports human-readable output; requesting any other `--format` (e.g. JSON) raises this message before any mailmap processing happens. It is an explicit capability gate on the output format.

Solutions

  1. Omit `--format` or use the default human output
  2. Parse the human output if machine consumption is needed temporarily
  3. Post-process the human output or request JSON support upstream

Example fix

// before
$ gix mailmap check --format json <contacts>
// after
$ gix mailmap check <contacts>
Defensive patterns

Strategy: validation

Validate before calling

let fmt: OutputFormat = parse_format(args.format);
if fmt != OutputFormat::Human {
    // switch to Human or use another tool
}

Try / catch

match result {
    Err(e) if e.to_string().contains("Only human output is supported") =>
        eprintln!("re-run without --format"),
    other => other?,
}

Prevention

When it happens

Trigger: Running `gix mailmap check --format json` (or any non-Human OutputFormat); the check function compares `format != OutputFormat::Human` and bails immediately.

Common situations: Scripting mailmap checks and expecting machine-readable output; piping results into a JSON consumer; assuming format options are shared across all gitoxide subcommands.

Related errors


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

Appendix: source

Thrown at gitoxide-core/src/repository/mailmap.rs:61

    if let Err(e) = repo.open_mailmap_into(&mut mailmap) {
        writeln!(err, "Error while loading mailmap, the first error is: {e}").ok();
    }

    #[cfg(feature = "serde")]
    serde_json::to_writer_pretty(out, &mailmap.iter().map(JsonEntry::from).collect::<Vec<_>>())?;

    Ok(())
}

pub fn check(
    repo: gix::Repository,
    format: OutputFormat,
    contacts: Vec<BString>,
    mut out: impl io::Write,
    mut err: impl io::Write,
) -> anyhow::Result<()> {
    if format != OutputFormat::Human {
        bail!("Only human output is supported right now");
    }
    if contacts.is_empty() {
        bail!("specify at least one contact to run through the mailmap")
    }

    let mut mailmap = gix::mailmap::Snapshot::default();
    if let Err(err) = repo.open_mailmap_into(&mut mailmap) {
        bail!(err);
    }

    let mut buf = Vec::new();
    for contact in contacts {
        let actor = match gix::actor::IdentityRef::from_bytes(&contact) {
            Ok(a) => a,
            Err(_) => {
                let Some(email) = contact
                    .trim_start()
                    .strip_prefix(b"<")

View on GitHub (pinned to e73179060b)