{"record":{"id":"9bbf59112d178bc7","repo":"GitoxideLabs/gitoxide","slug":"could-not-persist-a-prepared-rebase-object-err","errorCode":null,"errorMessage":"could not persist a prepared rebase object: {err}","messagePattern":"could not persist a prepared rebase object: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"gix-tix/src/edit/rebase.rs","lineNumber":2158,"sourceCode":"    let selected = prepared.selected.context(\"an enriched edit must select its commit\")?;\n    let Some((object, data, enrichment)) = crate::enrich::prepare_headers(&prepared.repo, selected, headers)? else {\n        return Ok(None);\n    };\n    prepared.enrichment = Some((object, data));\n    Ok(Some(enrichment))\n}\n\nimpl Prepared {\n    fn persist_objects(&mut self) -> Result<()> {\n        let objects = self\n            .repo\n            .objects\n            .take_object_memory()\n            .context(\"candidate object memory was unavailable\")?;\n        for (id, (kind, data)) in objects.iter() {\n            self.repo\n                .write_buf_with_known_id(*kind, data, *id)\n                .map_err(|err| anyhow::anyhow!(\"could not persist a prepared rebase object: {err}\"))?;\n        }\n        self.repo.objects.set_object_memory(Default::default());\n        Ok(())\n    }\n\n    fn finish(&mut self) -> Result<Outcome> {\n        let mut resource_edits = super::stash::rewrite_edits(&self.repo, &self.stash_rewritten, &self.removed)?;\n        let note_edits = note_rewrite_edits(&self.repo, &self.note_rewrites, &self.committer)?;\n        let enrichment_edits = self\n            .enrichment\n            .take()\n            .map(|(object, data)| enrichment_edits(&self.repo, object, data, &self.committer))\n            .transpose()?\n            .unwrap_or_else(|| super::stash::RewriteEdits {\n                forward: Vec::new(),\n                rollback: Vec::new(),\n            });\n        resource_edits.forward.extend(note_edits.forward);","sourceCodeStart":2140,"sourceCodeEnd":2176,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-tix/src/edit/rebase.rs#L2140-L2176","documentation":"During a tix rebase, prepared objects are staged in memory and then flushed with `repo.write_buf_with_known_id`. If any write fails, the error is wrapped as \"could not persist a prepared rebase object: {err}\" and the rebase cannot continue. `write_buf_with_known_id` also validates the caller-supplied id, so a hash mismatch surfaces here.","triggerScenarios":"Rebase edit operations in gix-tix (`edit/rebase.rs` persist path) where the object database write fails — unwritable .git/objects, disk full, or object id/kind mismatch between computed and stored data.","commonSituations":"Disk-quota or permission problems mid-rebase; very large rebases exhausting space; mismatches after hash-algorithm or library version changes.","solutions":["Free disk space / fix .git/objects permissions and retry the rebase","Check the inner error for which object failed; verify it isn't an id mismatch","Abort and restart the rebase; in-memory objects are rebuilt deterministically"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"fn odb_writable(repo: &gix::Repository) -> bool {\n    repo.workdir()\n        .map(|d| d.join(\"objects\").metadata().map(|m| !m.permissions().readonly()).unwrap_or(false))\n        .unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":"if let Err(e) = rebase.persist_objects() {\n    anyhow::bail!(\"rebase aborted, prepared objects not persisted: {e:#}\");\n}","preventionTips":["Ensure adequate free space before large rebases","Verify hash algorithm consistency (sha1 vs sha256) across tooling versions","Abort and restart rebases cleanly instead of resuming after IO failures"],"tags":["git","rebase","object-database","io"],"backgroundTag":"file-write-failed","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"}