cli: fix ambiguity between mutually exclusive args

There are some cases where it is just safe to skip the `--x` flag
because it is already set to true by default, and other cases where we
need to use an option value.

Also, I may miss some team code conventions regarding the PartialEq and
Eq macros to enable the quality on the `Comment` type!

Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
This commit is contained in:
Vincenzo Palazzo 2022-12-01 01:11:01 +01:00 committed by Alexis Sellier
parent 1b00e8a413
commit c7d5ffe51b
No known key found for this signature in database
4 changed files with 23 additions and 12 deletions

View File

@ -98,20 +98,25 @@ impl Args for Options {
// Options.
Long("message") | Short('m') => {
let txt: String = parser.value()?.to_string_lossy().into();
message.append(&txt);
if message != Comment::Blank {
// We skip this code when `no-message` is specified.
let txt: String = parser.value()?.to_string_lossy().into();
message.append(&txt);
}
}
Long("no-message") => {
message = Comment::Blank;
}
Long("sync") => {
sync = true;
// By default it is already true, so
// the only case where this is false,
// is the case where `no-sync` is specified.
}
Long("no-sync") => {
sync = false;
}
Long("push") => {
push = true;
// Skip for the same reason as `sync`.
}
Long("no-push") => {
push = false;

View File

@ -51,7 +51,7 @@ impl Args for Options {
let mut verbose = false;
let mut force = false;
let mut all = false;
let mut sync = false;
let mut sync = None;
let mut set_upstream = false;
while let Some(arg) = parser.next()? {
@ -69,10 +69,14 @@ impl Args for Options {
set_upstream = true;
}
Long("sync") => {
sync = true;
// Falls back to `--no-sync` in case of ambiguity.
// eg. `rad push --no-sync --sync`
if sync.is_none() {
sync = Some(true);
}
}
Long("no-sync") => {
sync = false;
sync = Some(false);
}
Long("force") | Short('f') => {
force = true;
@ -88,7 +92,7 @@ impl Args for Options {
force,
all,
set_upstream,
sync,
sync: sync.unwrap_or_default(),
verbose,
},
vec![],

View File

@ -80,14 +80,16 @@ impl Args for Options {
revision = Some(id);
}
Long("sync") => {
sync = true;
// Skipping due the `no-sync` flag precedence.
}
Long("no-sync") => {
sync = false;
}
Long("message") | Short('m') => {
let txt: String = parser.value()?.to_string_lossy().into();
message.append(&txt);
if message != Comment::Blank {
let txt: String = parser.value()?.to_string_lossy().into();
message.append(&txt);
}
}
Long("no-message") => {
message = Comment::Blank;

View File

@ -3,7 +3,7 @@ use radicle::git;
use crate::terminal as term;
/// How a comment is to be supplied by the user for a patch or issue on the terminal.
#[derive(Clone, Debug)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Comment {
/// Prompt user to write comment in editor.
Edit,