{"record":{"id":"e720a8f063415aa9","repo":"GitoxideLabs/gitoxide","slug":"unknown-extension-ext-expecting-idx-or-pac","errorCode":null,"errorMessage":"Unknown extension {ext:?}, expecting 'idx' or 'pack'","messagePattern":"Unknown extension (.+?), expecting 'idx' or 'pack'","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gitoxide-core/src/pack/verify.rs","lineNumber":199,"sourceCode":"                        out,\n                        &multi_index\n                            .index_names()\n                            .iter()\n                            .zip(res.pack_traverse_statistics)\n                            .collect::<Vec<_>>(),\n                    )?,\n                    _ => {}\n                }\n                return Ok(());\n            }\n            _ => {\n                return Err(anyhow!(\n                    \"Cannot determine data type on path without extension '{}', expecting default extensions 'idx' and 'pack'\",\n                    path.display()\n                ));\n            }\n        },\n        ext => return Err(anyhow!(\"Unknown extension {ext:?}, expecting 'idx' or 'pack'\")),\n    };\n    if let Some(stats) = res.1.as_ref() {\n        #[cfg_attr(not(feature = \"serde\"), allow(clippy::single_match))]\n        match output_statistics {\n            Some(OutputFormat::Human) => drop(print_statistics(&mut out, stats)),\n            #[cfg(feature = \"serde\")]\n            Some(OutputFormat::Json) => serde_json::to_writer_pretty(out, stats)?,\n            _ => {}\n        }\n    }\n    Ok(())\n}\n\nfn print_statistics(out: &mut impl io::Write, stats: &index::traverse::Statistics) -> io::Result<()> {\n    writeln!(out, \"objects per delta chain length\")?;\n    let mut chain_length_to_object: Vec<_> = stats.objects_per_chain_length.iter().map(|(a, b)| (*a, *b)).collect();\n    chain_length_to_object.sort_by_key(|e| e.0);\n    let mut total_object_count = 0;","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gitoxide-core/src/pack/verify.rs#L181-L217","documentation":"Thrown by `pack_or_pack_index` in the pack verify path when the file extension exists but is neither `idx` nor `pack`. The verify command only understands those two pack-related formats and refuses any other extension explicitly.","triggerScenarios":"Running `gix pack verify file.midx`, `file.tar`, `file.keep`, or any file whose extension is not exactly `idx` or `pack`.","commonSituations":"Users try to verify multi-pack-index (`.midx`) or `.keep`/`.bitmap`/`.rev` companion files that git also stores in the pack directory, assuming they are verifiable packs.","solutions":["Verify the actual `.pack` or `.idx` file instead of companion files like `.midx`, `.bitmap`, `.keep`, or `.rev`","Check `ls .git/objects/pack/` and pick the `pack-*.pack` (or its `.idx`) file","Use `git multi-pack-index verify` for `.midx` files, which gix pack verify does not handle"],"exampleFix":"// before\ngix pack verify .git/objects/pack/multi-pack-index\n// after\ngix pack verify .git/objects/pack/pack-abc123.pack","handlingStrategy":"validation","validationCode":"match path.extension().and_then(|e| e.to_str()) {\n    Some(\"idx\") | Some(\"pack\") => Ok(()),\n    Some(ext) => Err(format!(\"unsupported companion file .{ext}; use the .pack/.idx instead\")),\n    None => Err(\"no extension\".into()),\n}?","typeGuard":"fn is_verifiable_pack(p: &std::path::Path) -> bool {\n    matches!(p.extension().and_then(|e| e.to_str()), Some(\"idx\") | Some(\"pack\"))\n}","tryCatchPattern":null,"preventionTips":["Only feed `.pack`/`.idx` files to pack verify; route `.midx` to `git multi-pack-index verify`","Filter out `.keep`, `.bitmap`, `.rev`, `.promisor` files when globbing the pack directory"],"tags":["cli","pack","verify","file-extension","gitoxide"],"backgroundTag":"unsupported-enum-value","analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}