{"record":{"id":"fc352760974bb67e","repo":"jdx/mise","slug":"source-uses-the-using-download-strategy-w","errorCode":null,"errorMessage":"{}: source uses the {using:?} download strategy, which mise cannot build from (and no bottle exists for this machine)","messagePattern":"(.+?): source uses the (.+?) download strategy, which mise cannot build from \\(and no bottle exists for this machine\\)","errorType":"validation","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/system/packages/brew/source.rs","lineNumber":67,"sourceCode":"pub fn missing_bottle_reason(formula: &Formula) -> String {\n    match formula.bottle_files() {\n        Some(files) if !files.is_empty() => {\n            let mut tags: Vec<String> = files.keys().cloned().collect();\n            tags.sort();\n            format!(\"bottles exist only for: {}\", tags.join(\", \"))\n        }\n        _ => \"source-only formula, no bottles\".to_string(),\n    }\n}\n\n/// Reject early what the source builder cannot handle, with the reason —\n/// checked before any work happens so dry-run and real runs fail alike.\npub fn check_buildable(formula: &Formula) -> Result<()> {\n    let Some(src) = formula.stable_url() else {\n        bail!(\"{}: formula has no stable source URL\", formula.name);\n    };\n    if let Some(using) = &src.using {\n        bail!(\n            \"{}: source uses the {using:?} download strategy, which mise cannot build from \\\n             (and no bottle exists for this machine)\",\n            formula.name,\n        );\n    }\n    if src.checksum.is_none() {\n        bail!(\"{}: source archive has no sha256 in the API\", formula.name);\n    }\n    // the formula .rb must be pinned to the API snapshot's commit and\n    // verifiable — evaluating a newer/unverified formula against older\n    // source metadata would build the wrong thing\n    if formula.ruby_source_path.is_none() {\n        bail!(\"{}: API metadata has no ruby_source_path\", formula.name);\n    }\n    if formula.tap_git_head.is_none() {\n        bail!(\"{}: API metadata has no tap_git_head\", formula.name);\n    }\n    if formula","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/system/packages/brew/source.rs#L49-L85","documentation":"mise's source builder can only handle plain archive downloads. If the formula's stable source spec declares a custom download strategy via `using` (e.g. :git, :cvs, :bzr, :homebrew_curl), mise cannot fetch or build it, and since no bottle exists for the machine either, check_buildable rejects the build up front and names the strategy.","triggerScenarios":"A formula whose stable source uses `using:` reaches check_buildable because the host had no matching bottle tag; the `using` field is Some and the bail fires with the Debug-formatted strategy.","commonSituations":"Formulae built from git checkouts or other VCS strategies; platforms without bottles (unusual architectures, Linuxbrew edge cases) forcing source builds of such formulae.","solutions":["Install that formula with native Homebrew, which implements all download strategies","Choose a different formula/version that ships a plain tarball source or a bottle for your platform","Install the tool directly (clone and build) outside mise"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Recognize formulae whose sources use VCS strategies (:git, :cvs) — mise cannot build them","On bottle-less platforms, install such formulae with native Homebrew","Check `brew info <formula>` for download strategy before expecting mise to build from source"],"tags":["brew","source-build","download-strategy"],"backgroundTag":"unsupported-download-strategy","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}