{"record":{"id":"0acf67b5f5bed586","repo":"GitoxideLabs/gitoxide","slug":"err","errorCode":null,"errorMessage":"{err}","messagePattern":"\\{err\\}","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gitoxide-core/src/repository/merge/commit.rs","lineNumber":69,"sourceCode":"            .map_or(theirs_id_str.as_str().into(), |n| n.as_bstr())\n            .into(),\n    };\n    let res = repo\n        .merge_commits(ours_id, theirs_id, labels, options.into())?\n        .tree_merge;\n    let has_conflicts = res.conflicts.is_empty();\n    let has_unresolved_conflicts = res.has_unresolved_conflicts(TreatAsUnresolved::default());\n    {\n        let _span = gix::trace::detail!(\"Writing merged tree\");\n        let mut written = 0;\n        let tree_id = res\n            .tree\n            .detach()\n            .write(|tree| {\n                written += 1;\n                repo.write(tree)\n            })\n            .map_err(|err| anyhow!(\"{err}\"))?;\n        writeln!(out, \"{tree_id} (wrote {written} trees)\")?;\n    }\n\n    if debug {\n        writeln!(err, \"{:#?}\", res.conflicts)?;\n    }\n    if !has_conflicts {\n        writeln!(err, \"{} possibly resolved conflicts\", res.conflicts.len())?;\n    }\n    if has_unresolved_conflicts {\n        bail!(\"Tree conflicted\")\n    }\n    Ok(())\n}\n\nfn refname_and_commit(\n    repo: &gix::Repository,\n    revspec: BString,","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gitoxide-core/src/repository/merge/commit.rs#L51-L87","documentation":"In `merge commit`, tree objects produced by the merge are written with `repo.write(tree)`, and any error from the object write is mapped into a bare `anyhow!(\"{err}\")`. The message is simply the underlying error string — typically an object-database write failure (disk full, permission denied, corrupt odb) — re-raised without additional context.","triggerScenarios":"Calling `gix repo merge <tree-ish> --commit` (via `commit`) when writing a tree object to the object database fails, e.g. `.git/objects` is read-only or the disk is full.","commonSituations":"Read-only checkouts on CI, insufficient filesystem permissions, full disks, or corrupted loose-object directories during merge --commit.","solutions":["Inspect the inner error text for the real cause and fix it (permissions, disk space)","Verify `.git/objects` is writable: `ls -ld .git/objects` and `chmod -R u+w .git/objects` if needed","Free disk space or repair the object database (`git fsck`) before retrying the merge"],"exampleFix":"// before\n$ gix repo merge main --commit\nerror: permission denied\n// after\n$ chmod -R u+w .git/objects\n$ gix repo merge main --commit","handlingStrategy":"try-catch","validationCode":"// pre-flight: object db must be writable\nlet objects_dir = repo.path().join(\"objects\");\nlet probe = objects_dir.join(\".write_probe\");\nstd::fs::write(&probe, b\"\").map_err(|e| format!(\"object db not writable: {e}\"))?;\nstd::fs::remove_file(&probe)?;","typeGuard":null,"tryCatchPattern":"match merge_commit(...) {\n    Err(e) => {\n        // inner odb error is flattened into the message; check permissions/space\n        eprintln!(\"tree write failed: {e}; check .git/objects perms and disk space\");\n        std::process::exit(1);\n    }\n    Ok(v) => v,\n}","preventionTips":["Ensure `.git/objects` is writable by the running user before merge --commit","Monitor disk space on CI runners; loose-object writes fail on full disks","Run `git fsck` if object database corruption is suspected"],"tags":["merge","object-database","write","gitoxide"],"backgroundTag":"database-write-failed","analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}