{"record":{"id":"8f898393034d2a2f","repo":"rust-lang/cargo","slug":"package-pattern-s-not-found-in-workspace","errorCode":null,"errorMessage":"{}package pattern(s) `{}` not found in workspace `{}`","messagePattern":"(.+?)package pattern\\(s\\) `(.+?)` not found in workspace `(.+?)`","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ops/cargo_compile/packages.rs","lineNumber":206,"sourceCode":"            ws.root().display(),\n        )\n    }\n    Ok(())\n}\n\n/// Emits \"glob pattern not found\" error.\nfn emit_pattern_not_found(\n    ws: &Workspace<'_>,\n    opt_patterns: Vec<(glob::Pattern, bool)>,\n    opt_out: bool,\n) -> CargoResult<()> {\n    let not_matched = opt_patterns\n        .iter()\n        .filter(|(_, matched)| !*matched)\n        .map(|(pat, _)| pat.as_str())\n        .collect::<Vec<_>>();\n    if !not_matched.is_empty() {\n        anyhow::bail!(\n            \"{}package pattern(s) `{}` not found in workspace `{}`\",\n            if opt_out { \"excluded \" } else { \"\" },\n            not_matched.join(\", \"),\n            ws.root().display(),\n        )\n    }\n    Ok(())\n}\n\nfn emit_packages_not_found_within_workspace(\n    ws: &Workspace<'_>,\n    packages: &[String],\n) -> CargoResult<()> {\n    let (mut patterns, mut ids) = opt_patterns_and_ids(packages)?;\n    let _: Vec<_> = ws\n        .members()\n        .filter(|pkg| {\n            let id = ids.iter().find(|id| id.matches(pkg.package_id())).cloned();","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/rust-lang/cargo/blob/eb98b54bc9f3c74519f43d066cb3fd02ebc88df0/src/ops/cargo_compile/packages.rs#L188-L224","documentation":"Thrown by emit_pattern_not_found for glob patterns passed to -p / --exclude that matched no workspace member. Distinct from error 72: this covers glob::Pattern inputs (e.g. `crates-*`) rather than exact names or full specs.","triggerScenarios":"Running `cargo build -p 'deps-*'` when no member name starts with `deps-`; using a glob whose syntax matched nothing; --exclude with a wildcard that hits zero members.","commonSituations":"Wildcard patterns that no longer match after a reorganization; overly narrow patterns; copy-pasted globs from another workspace.","solutions":["List member names and adjust the glob to actually match: `cargo metadata --no-deps | jq '.packages[].name'`.","Replace the glob with explicit -p flags if only one or two members are intended.","Verify the glob syntax (cargo uses glob::Pattern semantics: `*`, `?`, `[...]`)."],"exampleFix":"# before\ncargo build -p 'deps-*'\n# after (matches real prefix)\ncargo build -p 'crates-*'","handlingStrategy":"validation","validationCode":"// Pre-match globs against member names.\nuse glob::Pattern;\nfn globs_match_any(members: &[String], pat: &str) -> bool {\n    Pattern::new(pat).map(|p| members.iter().any(|m| p.matches(m))).unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Test glob patterns against the actual member list before scripting them.","Fall back to explicit -p lists when globs are fragile.","Remember cargo uses glob::Pattern syntax (`*`, `?`, `[...]`)."],"tags":["cargo-compile","packages","workspace","glob-pattern","user-input"],"backgroundTag":null,"analyzedSha":"eb98b54bc9f3c74519f43d066cb3fd02ebc88df0","analyzedAt":"2026-08-11T17:42:36.556Z","contentChangedAt":"2026-08-11T17:42:36.556Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}