Skip to content

Commit f440704

Browse files
committed
Refactored ugly rustflags lookup code into a separate function.
1 parent 4eda23f commit f440704

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

src/cargo/ops/cargo_rustc/context.rs

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -856,37 +856,17 @@ fn env_args(config: &Config,
856856
// Then the target.*.rustflags value
857857
let target = build_config.requested_target.as_ref().unwrap_or(&build_config.host_triple);
858858
let key = format!("target.{}.{}", target, name);
859-
let list = config.get_list(&key);
860-
if let Ok(Some(args)) = list {
861-
let args = args.val.into_iter().map(|a| a.0);
859+
if let Some(args) = config.get_list_or_split_string(&key)? {
860+
let args = args.val.into_iter();
862861
return Ok(args.collect());
863862
}
864-
let string = config.get_string(&key);
865-
if let Ok(Some(arg)) = string {
866-
return Ok(arg.val.split(' ').map(str::to_string).collect());
867-
}
868-
if list.is_err() && string.is_err() {
869-
if let Some(value) = config.values()?.get(&key) {
870-
return config.expected("list or string", &key, value.clone());
871-
}
872-
}
873863

874864
// Then the build.rustflags value
875865
let key = format!("build.{}", name);
876-
let list = config.get_list(&key);
877-
if let Ok(Some(args)) = list {
878-
let args = args.val.into_iter().map(|a| a.0);
866+
if let Some(args) = config.get_list_or_split_string(&key)? {
867+
let args = args.val.into_iter();
879868
return Ok(args.collect());
880869
}
881-
let string = config.get_string(&key);
882-
if let Ok(Some(arg)) = string {
883-
return Ok(arg.val.split(' ').map(str::to_string).collect());
884-
}
885-
if list.is_err() && string.is_err() {
886-
if let Some(value) = config.values()?.get(&key) {
887-
return config.expected("list or string", &key, value.clone());
888-
}
889-
}
890870

891871
Ok(Vec::new())
892872
}

src/cargo/util/config.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,36 @@ impl Config {
225225
}
226226
}
227227

228+
pub fn get_list_or_split_string(&self, key: &str)
229+
-> CargoResult<Option<Value<Vec<String>>>> {
230+
match self.get_env::<String>(key) {
231+
Ok(Some(value)) =>
232+
return Ok(Some(Value {
233+
val: value.val.split(' ').map(str::to_string).collect(),
234+
definition: value.definition
235+
})),
236+
Err(err) => return Err(err),
237+
Ok(None) => (),
238+
}
239+
240+
match self.get(key)? {
241+
Some(CV::List(i, path)) => {
242+
Ok(Some(Value {
243+
val: i.into_iter().map(|(s, _)| s).collect(),
244+
definition: Definition::Path(path),
245+
}))
246+
}
247+
Some(CV::String(i, path)) => {
248+
Ok(Some(Value {
249+
val: i.split(' ').map(str::to_string).collect(),
250+
definition: Definition::Path(path),
251+
}))
252+
}
253+
Some(val) => self.expected("list or string", key, val),
254+
None => Ok(None),
255+
}
256+
}
257+
228258
pub fn get_table(&self, key: &str)
229259
-> CargoResult<Option<Value<HashMap<String, CV>>>> {
230260
match self.get(key)? {

0 commit comments

Comments
 (0)