diff options
-rw-r--r-- | Cargo.lock | 1 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/git.rs | 6 |
3 files changed, 6 insertions, 2 deletions
@@ -12,6 +12,7 @@ dependencies = [ name = "annotate-rust" version = "0.1.0" dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", @@ -9,3 +9,4 @@ regex = "1.1.9" syn = { version = "0.15.39", default-features = false, features = ["full", "parsing", "visit", "extra-traits"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +lazy_static = "1.3" @@ -32,13 +32,15 @@ pub fn crawl_git_tree<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> { } pub fn parse_ls_tree_output<'a>(output: &'a [u8]) -> Result<Vec<Blob<'a>>, Utf8Error> { - let re = Regex::new(r"^[^ ]+ [^ ]+ ([^\t]+)\t(.+)$").unwrap(); + lazy_static::lazy_static! { + static ref RE: Regex = Regex::new(r"^[^ ]+ [^ ]+ ([^\t]+)\t(.+)$").unwrap(); + } output.split(|byte| *byte == 0) .map(str::from_utf8) .filter_map(|r_l| match r_l { Err(e) => Some(Err(e)), - Ok(l) => re.captures(l).map(Ok), + Ok(l) => RE.captures(l).map(Ok), }) .map(|r_captures| r_captures.map(|captures| Blob { object: captures.get(1).unwrap().as_str(), |