Skip to content

Commit

Permalink
Issues 839,840 (#842)
Browse files Browse the repository at this point in the history
* fix: fixes a critical bug where subcommand settings were being propogated too far

Closes #832

* imp: adds ArgGroup::multiple to the supported YAML fields for building ArgGroups from YAML

Closes #840

* chore: increase version
  • Loading branch information
kbknapp authored Feb 3, 2017
1 parent 75e815a commit 07d985d
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 27 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
<a name="v2.20.2"></a>
### v2.20.2 (2017-02-03)

#### Bug Fixes

* fixes a critical bug where subcommand settings were being propogated too far ([74648c94](https://github.com/kbknapp/clap-rs/commit/74648c94b893df542bfa5bb595e68c7bb8167e36), closes [#832](https://github.com/kbknapp/clap-rs/issues/832))


#### Improvements

* adds ArgGroup::multiple to the supported YAML fields for building ArgGroups from YAML ([d8590037](https://github.com/kbknapp/clap-rs/commit/d8590037ce07dafd8cd5b26928aa4a9fd3018288), closes [#840](https://github.com/kbknapp/clap-rs/issues/840))

<a name="v2.20.1"></a>
### v2.20.1 (2017-01-31)

Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]

name = "clap"
version = "2.20.1"
version = "2.20.2"
authors = ["Kevin K. <[email protected]>"]
exclude = ["examples/*", "clap-test/*", "tests/*", "benches/*", "*.png", "clap-perf/*", "*.dot"]
repository = "https://github.com/kbknapp/clap-rs.git"
Expand Down
13 changes: 6 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,16 @@ Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)

## What's New

Here's the highlights for v2.20.1
Here's the highlights for v2.20.2

* Fixes a bug where the final word wasn't wrapped in help messages
* Updates `libc` and `term_size` deps for the `libc` version conflict
* Fixes finding required arguments in group arguments
* Fixes broken link from `app_from_crate!` to `crate_authors!`
* Fixes some docs spelling mistakes
* fixes a critical bug where subcommand settings were being propogated too far
* adds ArgGroup::multiple to the supported YAML fields for building ArgGroups from YAML


Here's the highlights from v2.0.0 to v2.20.0
Here's the highlights from v2.0.0 to v2.20.1

* Fixes a bug where the final word wasn't wrapped in help messages
* Fixes finding required arguments in group arguments
* **ArgsNegateSubcommands:** disables args being allowed between subcommands
* **DontCollapseArgsInUsage:** disables the collapsing of positional args into `[ARGS]` in the usage string
* **DisableHelpSubcommand:** disables building the `help` subcommand
Expand Down
24 changes: 10 additions & 14 deletions src/app/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -236,35 +236,28 @@ impl<'a, 'b> Parser<'a, 'b>
}

pub fn add_subcommand(&mut self, mut subcmd: App<'a, 'b>) {
debugln!("Parser::add_subcommand;");
debugln!("Parser::add_subcommand: Term width...{:?}",
self.meta.term_w);
debugln!("Parser::add_subcommand: term_w={:?}, name={}",
self.meta.term_w, subcmd.p.meta.name);
subcmd.p.meta.term_w = self.meta.term_w;
debug!("Parser::add_subcommand: Is help...");
if subcmd.p.meta.name == "help" {
sdebugln!("Yes");
self.settings.unset(AppSettings::NeedsSubcommandHelp);
} else {
sdebugln!("No");
}

self.subcommands.push(subcmd);
}

pub fn propogate_settings(&mut self) {
debugln!("Parser::propogate_settings;");
debugln!("Parser::propogate_settings: self={}, g_settings={:#?}",
self.meta.name, self.g_settings);
for sc in &mut self.subcommands {
debugln!("Parser::propogate_settings: sc={}, settings={:#?}, g_settings={:#?}",
sc.p.meta.name, sc.p.settings, sc.p.g_settings);
// We have to create a new scope in order to tell rustc the borrow of `sc` is
// done and to recursively call this method
{
let vsc = self.settings.is_set(AppSettings::VersionlessSubcommands);
let gv = self.settings.is_set(AppSettings::GlobalVersion);

debugln!("Parser::propogate_settings:iter: VersionlessSubcommands set...{:?}",
vsc);
debugln!("Parser::propogate_settings:iter: GlobalVersion set...{:?}",
gv);

if vsc {
sc.p.settings.set(AppSettings::DisableVersion);
}
Expand All @@ -273,7 +266,7 @@ impl<'a, 'b> Parser<'a, 'b>
sc.p.meta.version = Some(self.meta.version.unwrap());
}
sc.p.settings = sc.p.settings | self.g_settings;
sc.p.g_settings = sc.p.settings | self.g_settings;
sc.p.g_settings = sc.p.g_settings | self.g_settings;
}
sc.p.propogate_settings();
}
Expand Down Expand Up @@ -982,6 +975,7 @@ impl<'a, 'b> Parser<'a, 'b>
&self.create_current_usage(matcher),
self.color()));
} else if self.is_set(AppSettings::SubcommandRequiredElseHelp) {
debugln!("parser::get_matches_with: SubcommandRequiredElseHelp=true");
let mut out = vec![];
try!(self.write_help_err(&mut out));
return Err(Error {
Expand Down Expand Up @@ -1124,6 +1118,8 @@ impl<'a, 'b> Parser<'a, 'b>
""
},
&*sc.p.meta.name));
println!("Parser::parse_subcommand: About to parse sc={}", sc.p.meta.name);
println!("Parser::parse_subcommand: sc settings={:#?}", sc.p.settings);

This comment has been minimized.

Copy link
@uberjay

uberjay Feb 3, 2017

Oops, I think these ought to be debugln!, or removed altogether?

This comment has been minimized.

Copy link
@kbknapp

kbknapp Feb 3, 2017

Author Member

Yikes! Thanks!

This comment has been minimized.

Copy link
@kbknapp

kbknapp Feb 3, 2017

Author Member

v2.20.3 is up and it's fixed. Thanks again for pointing this out!

This comment has been minimized.

Copy link
@uberjay

uberjay Feb 3, 2017

Wow, that was fast! Thanks! I'm glad you were able to roll it up into the Raid PR :)

try!(sc.p.get_matches_with(&mut sc_matcher, it));
matcher.subcommand(SubCommand {
name: sc.p.meta.name.clone(),
Expand Down
6 changes: 1 addition & 5 deletions src/app/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,9 @@ bitflags! {
}

#[doc(hidden)]
#[derive(Debug, Copy, Clone)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct AppFlags(Flags);

// impl Clone for AppFlags {
// fn clone(&self) -> Self { AppFlags(self.0) }
// }

impl BitOr for AppFlags {
type Output = Self;
fn bitor(self, rhs: Self) -> Self {
Expand Down
1 change: 1 addition & 0 deletions src/args/group.rs
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ impl<'a> From<&'a BTreeMap<Yaml, Yaml>> for ArgGroup<'a> {
for (k, v) in group_settings.iter() {
a = match k.as_str().unwrap() {
"required" => a.required(v.as_bool().unwrap()),
"multiple" => a.multiple(v.as_bool().unwrap()),
"args" => yaml_vec_or_str!(v, a, arg),
"arg" => {
if let Some(ys) = v.as_str() {
Expand Down

0 comments on commit 07d985d

Please sign in to comment.