GitoxideLabs/gitoxide · error

One or more errors occurred - checkout is incomplete

Error message

One or more errors occurred - checkout is incomplete: {}

What it means

Thrown at the end of an exclusive index checkout when one or more errors occurred during the checkout process. The individual error `messages` were accumulated during the operation and are joined into this final bail, signalling that the checkout is incomplete and should not be treated as successful.

Solutions

  1. Read the joined `messages` in the error to identify which paths failed and why
  2. Fix the underlying cause (permissions, disk space, failing filters) and re-run the checkout into a clean destination
  3. Disable or fix problematic content filters/drivers that delay path processing
  4. Retry the checkout after resolving; verify completeness afterwards

Example fix

// before
gix repo checkout-exclusive --destination ./wt   # fails with checkout incomplete
// after
# fix the reported path issue, then:
rm -rf ./wt
gix repo checkout-exclusive --destination ./wt
Defensive patterns

Strategy: try-catch

Try / catch

if let Err(e) = checkout_exclusive(/* args */) {
    // aggregated messages are in the Display of the error
    for msg in e.to_string().split(", ") {
        eprintln!("failed: {msg}");
    }
}

Prevention

When it happens

Trigger: Running `checkout_exclusive` when the underlying checkout encounters per-path errors (e.g. delayed filter/checkout paths that were unprocessed, IO problems writing files) which are collected into `messages`.

Common situations: Checkout interrupted by IO errors; git-filter (clean/smudge) or driver processes failing or being delayed and not completing; filesystem issues like permissions or full disks during worktree materialization.

Understand the failure class

Background: "git command failed": what it means when a tool shells out to git and git exits non-zero — this error's family across 21 libraries.

Related errors


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

Appendix: source

Thrown at gitoxide-core/src/index/checkout.rs:167

        messages.push(format!(
            "A delayed process provided us with {} paths we never sent to it",
            delayed_paths_unknown.len()
        ));
        for unknown in delayed_paths_unknown {
            writeln!(err, "{unknown}: unknown").ok();
        }
    }
    if !delayed_paths_unprocessed.is_empty() {
        messages.push(format!(
            "A delayed process forgot to process {} paths",
            delayed_paths_unprocessed.len()
        ));
        for unprocessed in delayed_paths_unprocessed {
            writeln!(err, "{unprocessed}: unprocessed and forgotten").ok();
        }
    }
    if !messages.is_empty() {
        bail!(
            "One or more errors occurred - checkout is incomplete: {}",
            messages.join(", ")
        );
    }
    Ok(())
}

#[derive(Clone)]
struct EmptyOrDb<Find> {
    empty_files: bool,
    db: Find,
}

impl<Find> gix::objs::Find for EmptyOrDb<Find>
where
    Find: gix::objs::Find,
{
    fn try_find<'a>(&self, id: &gix::oid, buf: &'a mut Vec<u8>) -> Result<Option<gix::objs::Data<'a>>, Error> {

View on GitHub (pinned to e73179060b)