From 3fb50545f6cd1110ef9c2b80866b9b977f43d2e2 Mon Sep 17 00:00:00 2001 From: Anton Larin Date: Sat, 30 Jan 2016 12:47:25 +0300 Subject: [PATCH] Fix interception of subcommand --version flag Addresses #2286: when subcommand used execute_main_without_stdin and provided --version flag, cargo intercepted it and printed it's own version. --- src/bin/cargo.rs | 6 ++++++ src/cargo/lib.rs | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index ab2765da5..e37486d9b 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -17,6 +17,7 @@ use cargo::util::{self, CliResult, lev_distance, Config, human, CargoResult}; pub struct Flags { flag_list: bool, flag_verbose: bool, + flag_version: bool, flag_quiet: bool, flag_color: Option, arg_command: String, @@ -104,6 +105,11 @@ fn execute(flags: Flags, config: &Config) -> CliResult> { init_git_transports(config); + if flags.flag_version { + println!("{}", cargo::version()); + return Ok(None) + } + if flags.flag_list { println!("Installed Commands:"); for command in list_commands(config) { diff --git a/src/cargo/lib.rs b/src/cargo/lib.rs index 8a4b4338d..4590a9cd5 100644 --- a/src/cargo/lib.rs +++ b/src/cargo/lib.rs @@ -248,8 +248,7 @@ fn flags_from_args(usage: &str, args: &[String], let docopt = Docopt::new(usage).unwrap() .options_first(options_first) .argv(args.iter().map(|s| &s[..])) - .help(true) - .version(Some(version())); + .help(true); docopt.decode().map_err(|e| { let code = if e.fatal() {1} else {0}; CliError::from_error(human(e.to_string()), code) -- 2.39.5