libtest: JSON formatting is now only available in unstable builds
libtest: Added the -Z option for unstable options
This commit is contained in:
@@ -399,7 +399,9 @@ fn optgroups() -> getopts::Options {
|
|||||||
.optopt("", "format", "Configure formatting of output:
|
.optopt("", "format", "Configure formatting of output:
|
||||||
pretty = Print verbose output;
|
pretty = Print verbose output;
|
||||||
terse = Display one character per test;
|
terse = Display one character per test;
|
||||||
json = Output a json document", "pretty|terse|json");
|
json = Output a json document", "pretty|terse|json")
|
||||||
|
.optopt("Z", "", "Enable nightly-only flags:
|
||||||
|
unstable-options = Allow use of experimental features", "unstable-options");
|
||||||
return opts
|
return opts
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,8 +437,19 @@ Test Attributes:
|
|||||||
usage = options.usage(&message));
|
usage = options.usage(&message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: Copied from libsyntax until linkage errors are resolved.
|
||||||
|
fn is_nightly() -> bool {
|
||||||
|
// Whether this is a feature-staged build, i.e. on the beta or stable channel
|
||||||
|
let disable_unstable_features = option_env!("CFG_DISABLE_UNSTABLE_FEATURES").is_some();
|
||||||
|
// Whether we should enable unstable features for bootstrapping
|
||||||
|
let bootstrap = env::var("RUSTC_BOOTSTRAP").is_ok();
|
||||||
|
|
||||||
|
bootstrap || !disable_unstable_features
|
||||||
|
}
|
||||||
|
|
||||||
// Parses command line arguments into test options
|
// Parses command line arguments into test options
|
||||||
pub fn parse_opts(args: &[String]) -> Option<OptRes> {
|
pub fn parse_opts(args: &[String]) -> Option<OptRes> {
|
||||||
|
let mut allow_unstable = false;
|
||||||
let opts = optgroups();
|
let opts = optgroups();
|
||||||
let args = args.get(1..).unwrap_or(args);
|
let args = args.get(1..).unwrap_or(args);
|
||||||
let matches = match opts.parse(args) {
|
let matches = match opts.parse(args) {
|
||||||
@@ -444,6 +457,21 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
|
|||||||
Err(f) => return Some(Err(f.to_string())),
|
Err(f) => return Some(Err(f.to_string())),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if let Some(opt) = matches.opt_str("Z") {
|
||||||
|
if !is_nightly() {
|
||||||
|
return Some(Err("the option `Z` is only accepted on the nightly compiler".into()));
|
||||||
|
}
|
||||||
|
|
||||||
|
match &*opt {
|
||||||
|
"unstable-options" => {
|
||||||
|
allow_unstable = true;
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
return Some(Err("Unrecognized option to `Z`".into()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if matches.opt_present("h") {
|
if matches.opt_present("h") {
|
||||||
usage(&args[0], &opts);
|
usage(&args[0], &opts);
|
||||||
return None;
|
return None;
|
||||||
@@ -504,7 +532,13 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
|
|||||||
None if quiet => OutputFormat::Terse,
|
None if quiet => OutputFormat::Terse,
|
||||||
Some("pretty") | None => OutputFormat::Pretty,
|
Some("pretty") | None => OutputFormat::Pretty,
|
||||||
Some("terse") => OutputFormat::Terse,
|
Some("terse") => OutputFormat::Terse,
|
||||||
Some("json") => OutputFormat::Json,
|
Some("json") => {
|
||||||
|
if !allow_unstable {
|
||||||
|
return Some(
|
||||||
|
Err("The \"json\" format is only accepted on the nightly compiler".into()));
|
||||||
|
}
|
||||||
|
OutputFormat::Json
|
||||||
|
},
|
||||||
|
|
||||||
Some(v) => {
|
Some(v) => {
|
||||||
return Some(Err(format!("argument for --format must be pretty, terse, or json (was \
|
return Some(Err(format!("argument for --format must be pretty, terse, or json (was \
|
||||||
|
|||||||
Reference in New Issue
Block a user