{"record":{"id":"77fdd60a0f5916aa","repo":"jdx/mise","slug":"partial-pulls-are-not-supported-apply-the-complet","errorCode":null,"errorMessage":"partial pulls are not supported: apply the complete setup without PATH arguments","messagePattern":"partial pulls are not supported: apply the complete setup without PATH arguments","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/sync/apply.rs","lineNumber":96,"sourceCode":"struct Step {\n    pending: PendingApplication,\n    path: PathBuf,\n    group: String,\n    exists: bool,\n    /// The complete live object when planned, verified before each write.\n    before: Option<Object>,\n    permissions: Option<std::fs::Permissions>,\n    before_mode: Option<u32>,\n    desired_mode: Option<u32>,\n}\n\npub(crate) async fn apply(\n    store: &Store,\n    tracked: &TrackedSet,\n    req: &ApplyRequest,\n) -> Result<ApplyOutcome> {\n    if !req.paths.is_empty() {\n        bail!(\"partial pulls are not supported: apply the complete setup without PATH arguments\");\n    }\n    let _sync_lock = run::lock(store)?;\n    let repo = store\n        .repo()\n        .ok_or_else(|| eyre::eyre!(\"applying requires git\"))?;\n    let state_dir = store.state_dir();\n    let planned_head = repo.ref_oid(crate::system::history::shadow::HistoryRepo::HISTORY_REF)?;\n    let incoming = run::incoming_tracking(repo, tracked)?;\n    let tracked = &incoming;\n    // Metadata changes must advance the same complete Git tree after live\n    // application. They cannot be reduced to this machine's selected paths.\n    let mut inventory_tree = run::incoming_repository_tree(repo, tracked)?;\n    let mut status = run::read_status(state_dir)?;\n    if req.automatic && status.application_failure.is_some() {\n        return Ok(ApplyOutcome {\n            held: status.pending_applications.len().max(1),\n            ..Default::default()\n        });","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/history/sync/apply.rs#L78-L114","documentation":"The dotfile-sync `apply` operation is implemented as an all-or-nothing pull: it applies the complete tracked setup under a sync lock. Partial application (a subset of files selected via PATH arguments) is not supported by this code path, so any request carrying non-empty `paths` is rejected up front. This keeps apply/revert state consistent — reverting a partial pull would be ambiguous.","triggerScenarios":"Calling `apply` (the pull/sync apply path) with an `ApplyRequest` whose `paths` vector is non-empty, e.g. `mise dot pull path/to/file` style usage routed to this function.","commonSituations":"A user tries to pull just one changed dotfile to avoid touching the rest; a script passes path filters from a generic sync wrapper; muscle memory from `git checkout <path>` style partial operations.","solutions":["Run the pull without path arguments to apply the complete setup: `mise dot pull`.","If you only want one file updated, apply everything, then manually restore the other files if needed.","Use per-file diff/revert commands (`mise dot diff <path>`) to inspect individual files instead of partial apply.","Coordinate with teammates: pull fully, then commit only the desired changes if the setup is version-controlled."],"exampleFix":"// before: partial pull request\nApplyRequest { paths: vec![\"~/.zshrc\".into()], .. }\n// after: full apply\nApplyRequest { paths: vec![], .. }","handlingStrategy":"validation","validationCode":"if !req_paths.is_empty() {\n    eprintln!(\"partial pulls unsupported; drop path arguments to pull everything\");\n}","typeGuard":null,"tryCatchPattern":"match sync::apply(&store, &tracked, &req).await {\n    Ok(outcome) => report(outcome),\n    Err(e) if e.to_string().contains(\"partial pulls are not supported\") => {\n        eprintln!(\"rerun `mise dot pull` without path arguments\");\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Never pass path filters to dotfile pull/apply","Use `mise dot diff <path>` to inspect files instead of partial apply","Document in team scripts that pulls are all-or-nothing"],"tags":["dotfiles","sync","unsupported-operation","cli"],"backgroundTag":"unsupported-operation","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}