diff --git a/src/bin/repo.rs b/src/bin/repo.rs index 5962122c0..684c9deed 100644 --- a/src/bin/repo.rs +++ b/src/bin/repo.rs @@ -436,13 +436,8 @@ fn parse_args(args: Vec) -> anyhow::Result<(CliConfig, CliCommand, Vec {} - PackageConfig::Build(rule) if rule == "binary" || rule == "ignore" => { - return None; - } - _ if conf.general.repo_binary == Some(true) => { + PackageConfig::Build(rule) if rule == "ignore" => { return None; } _ => {} @@ -484,18 +479,25 @@ fn parse_args(args: Vec) -> anyhow::Result<(CliConfig, CliCommand, Vec {} // keep local changes PackageConfig::Build(rule) if rule == "local" => recipe.recipe.source = None, - // should not gone here, but if it does, then some deps need it - PackageConfig::Build(rule) if rule == "binary" || rule == "ignore" => { + // download from remote build + PackageConfig::Build(rule) if rule == "binary" => { recipe.recipe.source = None; recipe.recipe.build.set_as_remote(); } + // don't build this recipe (unlikely to go here unless some deps need it) + // TODO: Note that we're assuming this being ignored from e.g. metapackages + // TODO: Will totally broke build if this recipe needed as some other build dependencies + PackageConfig::Build(rule) if rule == "ignore" => { + recipe.recipe.source = None; + recipe.recipe.build.set_as_none(); + } PackageConfig::Build(rule) => { - return Err(anyhow!( + bail!( // Fail fast because we could risk losing local changes if "local" was typo'ed "Invalid pkg config {} = \"{}\"\nExpecting either 'source', 'local', 'binary' or 'ignore'", recipe.name.as_str(), rule - )); + ); } _ => { if conf.general.repo_binary == Some(true) { diff --git a/src/recipe.rs b/src/recipe.rs index 153be4076..96a83051a 100644 --- a/src/recipe.rs +++ b/src/recipe.rs @@ -176,6 +176,12 @@ impl BuildRecipe { self.kind = BuildKind::Remote; self.dev_dependencies = Vec::new(); } + + pub fn set_as_none(&mut self) { + self.kind = BuildKind::None; + self.dependencies = Vec::new(); + self.dev_dependencies = Vec::new(); + } } #[derive(Debug, Clone, PartialEq)]