mirror of
https://github.com/rust-lang/cargo
synced 2024-10-14 19:52:45 +00:00
parent
fa56127586
commit
c35fe47b31
|
@ -4,7 +4,7 @@ use std::io::fs::PathExtensions;
|
|||
use std::io::{self, File, fs};
|
||||
|
||||
use core::{Package,Manifest,SourceId};
|
||||
use util::{self, CargoResult, human, Config};
|
||||
use util::{self, CargoResult, human, Config, ChainError};
|
||||
use util::important_paths::find_project_manifest_exact;
|
||||
use util::toml::{Layout, project_layout};
|
||||
|
||||
|
@ -12,9 +12,9 @@ pub fn read_manifest(contents: &[u8], layout: Layout, source_id: &SourceId,
|
|||
config: &Config)
|
||||
-> CargoResult<(Manifest, Vec<Path>)> {
|
||||
let root = layout.root.clone();
|
||||
util::toml::to_manifest(contents, source_id, layout, config).map_err(|e| {
|
||||
human(format!("failed to parse manifest at `{:?}`\n{}",
|
||||
root.join("Cargo.toml"), e))
|
||||
util::toml::to_manifest(contents, source_id, layout, config).chain_error(|| {
|
||||
human(format!("failed to parse manifest at `{:?}`",
|
||||
root.join("Cargo.toml")))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ use semver;
|
|||
use rustc_serialize::json;
|
||||
|
||||
use curl;
|
||||
use toml::Error as TomlError;
|
||||
use url;
|
||||
use git2;
|
||||
use toml;
|
||||
use url;
|
||||
|
||||
pub type CargoResult<T> = Result<T, Box<CargoError>>;
|
||||
|
||||
|
@ -228,8 +228,9 @@ from_error! {
|
|||
json::DecoderError,
|
||||
curl::ErrCode,
|
||||
CliError,
|
||||
TomlError,
|
||||
toml::Error,
|
||||
url::ParseError,
|
||||
toml::DecodeError,
|
||||
}
|
||||
|
||||
impl<E: Error> FromError<Human<E>> for Box<CargoError> {
|
||||
|
@ -243,7 +244,8 @@ impl CargoError for json::DecoderError {}
|
|||
impl CargoError for curl::ErrCode {}
|
||||
impl CargoError for ProcessError {}
|
||||
impl CargoError for CliError {}
|
||||
impl CargoError for TomlError {}
|
||||
impl CargoError for toml::Error {}
|
||||
impl CargoError for toml::DecodeError {}
|
||||
impl CargoError for url::ParseError {}
|
||||
|
||||
// =============================================================================
|
||||
|
|
|
@ -104,17 +104,9 @@ pub fn to_manifest(contents: &[u8],
|
|||
}));
|
||||
let root = try!(parse(contents, &manifest));
|
||||
let mut d = toml::Decoder::new(toml::Value::Table(root));
|
||||
let toml_manifest: TomlManifest = match Decodable::decode(&mut d) {
|
||||
Ok(t) => t,
|
||||
Err(e) => return Err(human(format!("{} is not a valid \
|
||||
manifest\n\n{}",
|
||||
manifest.display(), e)))
|
||||
};
|
||||
let toml_manifest: TomlManifest = try!(Decodable::decode(&mut d));
|
||||
|
||||
let pair = try!(toml_manifest.to_manifest(source_id, &layout, config).map_err(|err| {
|
||||
human(format!("{} is not a valid manifest\n\n{}",
|
||||
manifest.display(), err))
|
||||
}));
|
||||
let pair = try!(toml_manifest.to_manifest(source_id, &layout, config));
|
||||
let (mut manifest, paths) = pair;
|
||||
match d.toml {
|
||||
Some(ref toml) => add_unused_keys(&mut manifest, toml, "".to_string()),
|
||||
|
|
|
@ -141,3 +141,34 @@ test!(good_cargo_config_jobs {
|
|||
assert_that(foo.cargo_process("build").arg("-v"),
|
||||
execs().with_status(0));
|
||||
});
|
||||
|
||||
test!(invalid_global_config {
|
||||
let foo = project("foo")
|
||||
.file("Cargo.toml", r#"
|
||||
[package]
|
||||
name = "foo"
|
||||
version = "0.0.0"
|
||||
authors = []
|
||||
|
||||
[dependencies]
|
||||
foo = "0.1.0"
|
||||
"#)
|
||||
.file(".cargo/config", "4")
|
||||
.file("src/lib.rs", "");
|
||||
|
||||
assert_that(foo.cargo_process("build").arg("-v"),
|
||||
execs().with_status(101).with_stderr("\
|
||||
failed to parse manifest at `[..]Cargo.toml`
|
||||
|
||||
Caused by:
|
||||
Couldn't load Cargo configuration
|
||||
|
||||
Caused by:
|
||||
could not parse TOML configuration in `[..]config`
|
||||
|
||||
Caused by:
|
||||
could not parse input as TOML
|
||||
[..]config:2:1 expected `=`, but found eof
|
||||
|
||||
"));
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue