diff --git a/git-revision/src/spec.rs b/git-revision/src/spec.rs index 1bea872b44..a7e34af495 100644 --- a/git-revision/src/spec.rs +++ b/git-revision/src/spec.rs @@ -51,9 +51,19 @@ pub mod parse { pub(crate) mod function { use crate::spec::parse::{Delegate, Error}; - use bstr::BStr; + use bstr::{BStr, ByteSlice}; + + fn next(i: &BStr) -> (u8, &BStr) { + let b = i[0]; + (b, i[1..].as_bstr()).into() + } + + pub fn parse(mut input: &BStr, delegate: &mut impl Delegate) -> Result<(), Error> { + if let Some(b'^') = input.get(0) { + input = next(input).1; + delegate.kind(crate::spec::Kind::Range); + } - pub fn parse(input: &BStr, delegate: &mut impl Delegate) -> Result<(), Error> { if input == "@" || input == "HEAD" { return delegate.resolve_ref("HEAD".into()).ok_or(Error::Delegate); } diff --git a/git-revision/tests/spec/mod.rs b/git-revision/tests/spec/mod.rs index d01f307641..cf130ff8c9 100644 --- a/git-revision/tests/spec/mod.rs +++ b/git-revision/tests/spec/mod.rs @@ -65,7 +65,6 @@ mod parse { } #[test] - #[ignore] fn leading_caret_is_range_kind() { let rec = parse("^HEAD"); assert_eq!(rec.kind.unwrap(), spec::Kind::Range);