cli: Split rev and oid parsing functions
* `args::rev` now parses things like `master`, `HEAD`, `3f25ea5`. * `args::oid` is for parsing full or short oids, like `3f25ea5`. Both return a `Rev`, since short oids can't be properly represented with the `git2::Oid` type.
This commit is contained in:
parent
90fe50c152
commit
5442e6699d
|
|
@ -229,7 +229,7 @@ impl Args for Options {
|
|||
}
|
||||
Long("reply-to") if op == Some(OperationName::Comment) => {
|
||||
let val = parser.value()?;
|
||||
let rev = term::args::rev(&val)?;
|
||||
let rev = term::args::oid(&val)?;
|
||||
|
||||
reply_to = Some(rev);
|
||||
}
|
||||
|
|
@ -252,7 +252,7 @@ impl Args for Options {
|
|||
unknown => anyhow::bail!("unknown operation '{}'", unknown),
|
||||
},
|
||||
Value(val) if op.is_some() => {
|
||||
let val = term::args::rev(&val)?;
|
||||
let val = term::args::oid(&val)?;
|
||||
id = Some(val);
|
||||
}
|
||||
_ => {
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ impl Args for Options {
|
|||
// Update options.
|
||||
Long("revision") if op == Some(OperationName::Update) => {
|
||||
let val = parser.value()?;
|
||||
let rev = term::args::rev(&val)?;
|
||||
let rev = term::args::oid(&val)?;
|
||||
|
||||
revision_id = Some(rev);
|
||||
}
|
||||
|
|
@ -246,7 +246,7 @@ impl Args for Options {
|
|||
// Comment options.
|
||||
Long("reply-to") if op == Some(OperationName::Comment) => {
|
||||
let val = parser.value()?;
|
||||
let rev = term::args::rev(&val)?;
|
||||
let rev = term::args::oid(&val)?;
|
||||
|
||||
reply_to = Some(rev);
|
||||
}
|
||||
|
|
@ -297,8 +297,8 @@ impl Args for Options {
|
|||
unknown => anyhow::bail!("unknown operation '{}'", unknown),
|
||||
},
|
||||
Value(val) if op == Some(OperationName::Redact) => {
|
||||
let val = string(&val);
|
||||
revision_id = Some(Rev::from(val));
|
||||
let rev = term::args::oid(&val)?;
|
||||
revision_id = Some(rev);
|
||||
}
|
||||
Value(val)
|
||||
if patch_id.is_none()
|
||||
|
|
|
|||
|
|
@ -150,8 +150,13 @@ pub fn string(val: &OsString) -> String {
|
|||
}
|
||||
|
||||
pub fn rev(val: &OsString) -> anyhow::Result<Rev> {
|
||||
let s = val.to_str().ok_or(anyhow!("invalid git rev {val:?}"))?;
|
||||
Ok(Rev::from(s.to_owned()))
|
||||
}
|
||||
|
||||
pub fn oid(val: &OsString) -> anyhow::Result<Rev> {
|
||||
let s = string(val);
|
||||
let _ = radicle::git::Oid::from_str(&s).map_err(|_| anyhow!("invalid git rev '{s}'"))?;
|
||||
let _ = radicle::git::Oid::from_str(&s).map_err(|_| anyhow!("invalid git oid '{s}'"))?;
|
||||
|
||||
Ok(Rev::from(s))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue