├── .gitignore ├── renovate.json ├── Cargo.toml ├── .github └── workflows │ └── test.yml ├── README.md ├── src ├── tests │ └── test_utils.rs └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "zeitgrep" 3 | version = "0.8.0" 4 | edition = "2024" 5 | license = "MIT" 6 | description = "Find frecent results in git repositories using regular expressions" 7 | repository = "https://github.com/kantord/zeitgrep" 8 | 9 | [[bin]] 10 | name = "zg" 11 | path = "src/main.rs" 12 | 13 | [dependencies] 14 | anyhow = "1.0.98" 15 | clap = { version = "4.5.37", features = ["derive"] } 16 | frecenfile = "0.4.0" 17 | git2 = "0.20.1" 18 | grep = "0.3.2" 19 | ignore = "0.4.23" 20 | termcolor = "1.4.1" 21 | 22 | [dev-dependencies] 23 | assert_cmd = "2" 24 | predicates = "3" 25 | tempfile = "3" 26 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Rust CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | 15 | - name: Cache Cargo dependencies 16 | uses: actions/cache@v4 17 | with: 18 | path: | 19 | ~/.cargo/registry 20 | ~/.cargo/git 21 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 22 | 23 | # Set a dummy author for any ad‑hoc commits your tests create 24 | - name: Configure Git identity for tests 25 | run: | 26 | git config --global user.name "CI" 27 | git config --global user.email "ci@example.com" 28 | 29 | - name: Build 30 | run: cargo build --verbose 31 | 32 | - name: Test 33 | run: cargo test --all-targets --verbose 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # zeitgrep 2 | 3 | Search **frecently‑edited** lines of code in your Git repository, ranked by how often **and** how recently a file has changed. 4 | 5 | **zeitgrep** is a grep-like command that allows you to search files in a Git repository. The results are sorted by a frecency 6 | score generate by [frecenfile](https://github.com/kantord/frecenfile). It uses [ripgrep](https://github.com/BurntSushi/ripgrep) as a search backend. 7 | 8 | ## Usage example 9 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
13 | Unsorted grep results ( 14 | rg def | head 15 | ) 16 |
24 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
28 | zeitgrep results ( 29 | zg def | head 30 | ) 31 |
39 | 40 | 41 | 42 | ## ✨ Features 43 | 44 | * **Ripgrep‑style regex search** over your Git repository 45 | * Results **ranked by frecency** using the [`frecenfile`](https://crates.io/crates/frecenfile) library. 46 | * Scalable to large repositories 47 | 48 | 49 | ## 📦 Installation 50 | 51 | ```bash 52 | cargo install zeitgrep 53 | ``` 54 | 55 | 56 | ## 🚀 Usage 57 | 58 | ```bash 59 | zg {regular expression} 60 | ``` 61 | 62 | ## 🧑‍🍳 Recipes 63 | 64 | ### Live grep in Neovim using `telescope.nvim` 65 | 66 | To configure *[telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)* to use `zeitgrep` for live grep, use the following: 67 | 68 | ```lua 69 | require("telescope").setup { 70 | defaults = { 71 | vimgrep_arguments = { 72 | "zg", 73 | "--column", 74 | "--color=never", 75 | }, 76 | }, 77 | } 78 | ``` 79 | 80 | ### Find stale TODO 81 | 82 | ```bash 83 | zg TODO --sort=asc 84 | ``` 85 | 86 | -------------------------------------------------------------------------------- /src/tests/test_utils.rs: -------------------------------------------------------------------------------- 1 | use assert_cmd::Command; 2 | use git2::Repository; 3 | use std::{fs::File, io::Write, path::Path}; 4 | use tempfile::TempDir; 5 | 6 | /// Create a temporary Git repo and make `commit_count` commits to each file in `spec`. 7 | pub fn create_mock_repo(spec: &[(&str, usize)]) -> TempDir { 8 | let dir = tempfile::tempdir().expect("failed to create tempdir"); 9 | let repo = Repository::init(dir.path()).expect("failed to init repo"); 10 | let sig = repo.signature().unwrap(); 11 | 12 | for (file_name, commit_count) in spec { 13 | let file_path = dir.path().join(file_name); 14 | 15 | for n in 0..*commit_count { 16 | // overwrite the file 17 | { 18 | let mut f = File::create(&file_path).unwrap(); 19 | writeln!(f, "fn f_{n}() {{ println!(\"{file_name} #{n}\"); }}").unwrap(); 20 | } 21 | 22 | // stage, write tree, and commit 23 | let mut idx = repo.index().unwrap(); 24 | idx.add_path(Path::new(file_name)).unwrap(); 25 | idx.write().unwrap(); 26 | let tree_id = idx.write_tree().unwrap(); 27 | let tree = repo.find_tree(tree_id).unwrap(); 28 | 29 | let parents = repo 30 | .head() 31 | .ok() 32 | .and_then(|h| { 33 | if h.is_branch() { 34 | Some(vec![repo.find_commit(h.target().unwrap()).unwrap()]) 35 | } else { 36 | None 37 | } 38 | }) 39 | .unwrap_or_default(); 40 | let parent_refs: Vec<&git2::Commit> = parents.iter().collect(); 41 | 42 | repo.commit( 43 | Some("HEAD"), 44 | &sig, 45 | &sig, 46 | &format!("commit {n} for {file_name}"), 47 | &tree, 48 | &parent_refs, 49 | ) 50 | .unwrap(); 51 | } 52 | } 53 | 54 | dir 55 | } 56 | 57 | pub fn run_zg(repo_dir: &TempDir, args: &[&str]) -> String { 58 | let assert = Command::cargo_bin("zg") 59 | .expect("binary `zg` not found") 60 | .current_dir(repo_dir.path()) 61 | .args(args) 62 | .assert() 63 | .success(); 64 | let out = assert.get_output().stdout.clone(); 65 | String::from_utf8_lossy(&out).into_owned() 66 | } 67 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::collections::{HashMap, HashSet}; 2 | use std::io; 3 | use std::io::ErrorKind; 4 | use std::io::Write; 5 | use std::path::{Path, PathBuf}; 6 | use std::sync::{Arc, Mutex}; 7 | 8 | use anyhow::{Error, Result}; 9 | use clap::{Parser, ValueEnum}; 10 | use frecenfile::analyze_repo; 11 | use grep::{ 12 | matcher::Matcher, 13 | regex::RegexMatcher, 14 | searcher::{BinaryDetection, MmapChoice, SearcherBuilder, sinks::UTF8}, 15 | }; 16 | use ignore::WalkBuilder; 17 | use termcolor::{ColorChoice, ColorSpec, StandardStream, WriteColor}; 18 | 19 | /// Search frecently edited code in a Git repository 20 | #[derive(Parser, Debug)] 21 | #[command(version, about, long_about = None)] 22 | struct Args { 23 | /// Regular Expression pattern 24 | #[arg()] 25 | pattern: String, 26 | 27 | /// Case-insensitive regex matching 28 | #[arg(short = 'i', long = "ignore-case")] 29 | ignore_case: bool, 30 | 31 | /// Case-insensitive unless the pattern has an uppercase letter 32 | #[arg(short = 'S', long = "smart-case")] 33 | smart_case: bool, 34 | 35 | /// Show frecency scores in output 36 | #[arg(long)] 37 | score: bool, 38 | 39 | /// Show column number of matches 40 | #[arg(long)] 41 | column: bool, 42 | 43 | /// Controls when to use color 44 | #[arg(long, value_enum, default_value = "auto")] 45 | color: Color, 46 | 47 | /// Sorting order for frecency score ("asc" or "desc") 48 | #[arg(long, value_enum, default_value = "desc")] 49 | sort: SortOrder, 50 | } 51 | 52 | #[derive(Copy, Clone, Debug, ValueEnum, PartialEq)] 53 | enum Color { 54 | Always, 55 | Auto, 56 | Never, 57 | } 58 | 59 | #[derive(Copy, Clone, Debug, ValueEnum, PartialEq)] 60 | enum SortOrder { 61 | Asc, 62 | Desc, 63 | } 64 | 65 | /// A single line‑match. 66 | #[derive(Debug, Clone)] 67 | struct MatchResult { 68 | path: PathBuf, 69 | line_number: u64, 70 | line_text: String, 71 | frecency_score: f32, 72 | } 73 | 74 | /// Remove a leading “./” component if present (cosmetic). 75 | fn normalize_repo_path(path: &Path) -> &Path { 76 | path.strip_prefix(".").unwrap_or(path) 77 | } 78 | 79 | /// Run ripgrep‑style search over the working tree. 80 | fn find_matches(pattern: &str) -> Vec { 81 | let matcher = RegexMatcher::new(pattern).expect("Invalid regular expression"); 82 | let root = Path::new("."); 83 | let matches = Arc::new(Mutex::new(Vec::::new())); 84 | 85 | WalkBuilder::new(root).build_parallel().run(|| { 86 | let matcher = matcher.clone(); 87 | let matches_outer = matches.clone(); 88 | 89 | Box::new(move |result| { 90 | let entry = match result { 91 | Ok(e) => e, 92 | Err(err) => { 93 | eprintln!("Walk error: {err}"); 94 | return ignore::WalkState::Continue; 95 | } 96 | }; 97 | 98 | if entry.file_type().map(|ft| ft.is_file()).unwrap_or(false) { 99 | let path_for_search = entry.path().to_path_buf(); 100 | let path_for_vec = entry.path().to_path_buf(); 101 | 102 | let matches_inner = matches_outer.clone(); 103 | 104 | let mut searcher = SearcherBuilder::new() 105 | .line_number(true) 106 | .memory_map(unsafe { MmapChoice::auto() }) 107 | .binary_detection(BinaryDetection::quit(b'\0')) 108 | .build(); 109 | 110 | let _ = searcher.search_path( 111 | &matcher, 112 | &path_for_search, 113 | UTF8(move |lnum, line| { 114 | let mut vec_guard = matches_inner.lock().unwrap(); 115 | vec_guard.push(MatchResult { 116 | path: path_for_vec.clone(), 117 | line_number: lnum, 118 | line_text: line.to_string(), 119 | frecency_score: 0.0, 120 | }); 121 | Ok(true) 122 | }), 123 | ); 124 | } 125 | 126 | ignore::WalkState::Continue 127 | }) 128 | }); 129 | 130 | Arc::try_unwrap(matches) 131 | .expect("Arc still has multiple owners") 132 | .into_inner() 133 | .expect("Mutex poisoned") 134 | } 135 | 136 | /// Annotate each match with a frecency score from `frecenfile`. 137 | /// Files not returned by the library receive score 0.0. 138 | fn calculate_frecencies(matches: &mut [MatchResult]) -> Result<(), Error> { 139 | let paths_of_interest: HashSet = matches 140 | .iter() 141 | .map(|m| normalize_repo_path(&m.path).to_path_buf()) 142 | .collect(); 143 | 144 | if paths_of_interest.is_empty() { 145 | return Ok(()); 146 | } 147 | 148 | let scores_vec = analyze_repo(Path::new("."), Some(paths_of_interest.clone()), Some(3000))?; 149 | 150 | let score_map: HashMap = 151 | scores_vec.into_iter().map(|(p, s)| (p, s as f32)).collect(); 152 | 153 | for m in matches.iter_mut() { 154 | let rel = normalize_repo_path(&m.path); 155 | m.frecency_score = *score_map.get(rel).unwrap_or(&0.0); 156 | } 157 | 158 | Ok(()) 159 | } 160 | 161 | /// Sort highest‑score first (ties keep original order). 162 | fn sort_matches(mut matches: Vec) -> Vec { 163 | matches.sort_by(|a, b| { 164 | b.frecency_score 165 | .partial_cmp(&a.frecency_score) 166 | .unwrap_or(std::cmp::Ordering::Equal) 167 | }); 168 | matches 169 | } 170 | 171 | fn print_matches(matches: Vec, pattern: &str, args: &Args) -> io::Result<()> { 172 | let matcher = RegexMatcher::new(pattern).expect("Invalid regular expression"); 173 | let color_choice = match args.color { 174 | Color::Always => ColorChoice::Always, 175 | Color::Never => ColorChoice::Never, 176 | Color::Auto => ColorChoice::Auto, 177 | }; 178 | let mut stdout = StandardStream::stdout(color_choice); 179 | 180 | let normal = ColorSpec::new(); 181 | let mut highlight = ColorSpec::new(); 182 | highlight.set_fg(Some(termcolor::Color::Red)).set_bold(true); 183 | 184 | for m in matches { 185 | if let Ok(Some(matched)) = matcher.find(m.line_text.as_bytes()) { 186 | let (start, end) = (matched.start(), matched.end()); 187 | let line = m.line_text.trim_end_matches(&['\r', '\n'][..]).as_bytes(); 188 | 189 | if args.score { 190 | write!(stdout, "{:.2}: ", m.frecency_score * 1e8)?; 191 | } 192 | write!(stdout, "{}:{}:", m.path.display(), m.line_number)?; 193 | if args.column { 194 | write!(stdout, "{}:", start + 1)?; 195 | } 196 | 197 | stdout.set_color(&normal)?; 198 | stdout.write_all(&line[..start])?; 199 | stdout.set_color(&highlight)?; 200 | stdout.write_all(&line[start..end])?; 201 | stdout.set_color(&normal)?; 202 | stdout.write_all(&line[end..])?; 203 | stdout.write_all(b"\n")?; 204 | } 205 | } 206 | 207 | Ok(()) 208 | } 209 | 210 | fn main() -> Result<()> { 211 | let args = Args::parse(); 212 | 213 | let case_insensitive = 214 | args.ignore_case || (args.smart_case && args.pattern.to_lowercase() == args.pattern); 215 | let pattern_str = if case_insensitive { 216 | format!("(?i){}", args.pattern) 217 | } else { 218 | args.pattern.clone() 219 | }; 220 | 221 | let mut matches = find_matches(&pattern_str); 222 | calculate_frecencies(&mut matches)?; 223 | let mut sorted_matches = sort_matches(matches); 224 | 225 | if args.sort == SortOrder::Asc { 226 | sorted_matches.reverse(); 227 | } 228 | 229 | match print_matches(sorted_matches, &pattern_str, &args) { 230 | Err(e) if e.kind() == ErrorKind::BrokenPipe => { 231 | // downstream closed early (e.g. `head`) → silent exit 232 | return Ok(()); 233 | } 234 | Err(e) => { 235 | // real I/O error 236 | eprintln!("I/O error: {}", e); 237 | std::process::exit(1); 238 | } 239 | Ok(()) => {} 240 | } 241 | 242 | Ok(()) 243 | } 244 | 245 | #[cfg(test)] 246 | mod tests { 247 | mod test_utils; 248 | use test_utils::{create_mock_repo, run_zg}; 249 | 250 | #[test] 251 | fn sorts_files_correctly_based_on_frecency() { 252 | let repo_dir = create_mock_repo(&[("alpha.rs", 5), ("beta.rs", 3), ("gamma.rs", 1)]); 253 | let stdout = run_zg(&repo_dir, &["println!"]); 254 | 255 | let pos = |needle: &str| stdout.find(needle).expect(needle); 256 | 257 | let p_alpha = pos("alpha.rs"); 258 | let p_beta = pos("beta.rs"); 259 | let p_gamma = pos("gamma.rs"); 260 | 261 | assert!( 262 | p_alpha < p_beta && p_beta < p_gamma, 263 | "order wrong:\n{stdout}" 264 | ); 265 | } 266 | 267 | #[test] 268 | fn sorts_files_correctly_ascending() { 269 | let repo_dir = create_mock_repo(&[("alpha.rs", 5), ("beta.rs", 3), ("gamma.rs", 1)]); 270 | let stdout = run_zg(&repo_dir, &["println!", "--sort=asc"]); 271 | 272 | let pos = |needle: &str| stdout.find(needle).expect(needle); 273 | 274 | let p_gamma = pos("gamma.rs"); 275 | let p_beta = pos("beta.rs"); 276 | let p_alpha = pos("alpha.rs"); 277 | 278 | assert!( 279 | p_gamma < p_beta && p_beta < p_alpha, 280 | "ascending order wrong:\n{stdout}" 281 | ); 282 | } 283 | 284 | #[test] 285 | fn placeholder_scores_match_stdout() { 286 | let dir = create_mock_repo(&[("alpha.rs", 5), ("beta.rs", 3), ("gamma.rs", 1)]); 287 | let stdout = run_zg(&dir, &["println!", "--score"]); 288 | 289 | let expected = [ 290 | ("alpha.rs", 419238720.0_f32), 291 | ("beta.rs", 252082560.0_f32), 292 | ("gamma.rs", 83847740.0_f32), 293 | ]; 294 | for (file, want) in expected { 295 | let line = stdout.lines().find(|l| l.contains(file)).expect(file); 296 | let score_str = line.split(':').next().unwrap(); 297 | let got: f32 = score_str.parse().unwrap(); 298 | assert!((got - want).abs() < 1e-3, "{file}: got {got}, want {want}"); 299 | } 300 | } 301 | 302 | #[test] 303 | fn column_flag_outputs_correct_columns() { 304 | let dir = create_mock_repo(&[("main.rs", 1), ("lib.rs", 1)]); 305 | 306 | std::fs::write( 307 | dir.path().join("main.rs"), 308 | "fn main() {\n println!(\"main\");\n}\n", 309 | ) 310 | .unwrap(); 311 | std::fs::write( 312 | dir.path().join("lib.rs"), 313 | "fn lib() {\nprintln!(\"lib\");\n}\n", 314 | ) 315 | .unwrap(); 316 | 317 | let stdout = run_zg(&dir, &["println!", "--column"]); 318 | let mut found_main = false; 319 | let mut found_lib = false; 320 | 321 | for line in stdout.lines() { 322 | let mut parts = line.splitn(4, ':'); 323 | let file = parts.next().unwrap_or(""); 324 | let line_no = parts.next().unwrap_or(""); 325 | let col_no = parts.next().unwrap_or(""); 326 | let _rest = parts.next().unwrap_or(""); 327 | 328 | if !line_no.is_empty() && !col_no.is_empty() { 329 | let col: usize = col_no.parse().expect("valid column number"); 330 | 331 | if file.contains("main.rs") { 332 | assert_eq!(col, 5, "wrong column number for main.rs"); 333 | found_main = true; 334 | } else if file.contains("lib.rs") { 335 | assert_eq!(col, 1, "wrong column number for lib.rs"); 336 | found_lib = true; 337 | } 338 | } 339 | } 340 | 341 | assert!(found_main, "no output for main.rs"); 342 | assert!(found_lib, "no output for lib.rs"); 343 | } 344 | 345 | #[test] 346 | fn color_never_disables_colored_output() { 347 | let dir = create_mock_repo(&[("main.rs", 1)]); 348 | std::fs::write( 349 | dir.path().join("main.rs"), 350 | "fn main() {\n println!(\"main\");\n}\n", 351 | ) 352 | .unwrap(); 353 | let stdout = run_zg(&dir, &["println!", "--color=never"]); 354 | 355 | // ANSI escape sequences for color usually start with \x1b (ESC) 356 | assert!( 357 | !stdout.contains('\x1b'), 358 | "Expected no ANSI escape codes in output, got:\n{stdout}" 359 | ); 360 | } 361 | 362 | #[test] 363 | fn color_always_shows_color_output() { 364 | let dir = create_mock_repo(&[("main.rs", 1)]); 365 | std::fs::write( 366 | dir.path().join("main.rs"), 367 | "fn main() {\n println!(\"main\");\n}\n", 368 | ) 369 | .unwrap(); 370 | let stdout = run_zg(&dir, &["println!", "--color=always"]); 371 | 372 | // ANSI escape sequences for color usually start with \x1b (ESC) 373 | assert!( 374 | stdout.contains('\x1b'), 375 | "Expected ANSI escape codes in output, none found" 376 | ); 377 | } 378 | 379 | #[test] 380 | fn default_search_is_case_sensitive() { 381 | let dir = create_mock_repo(&[("case.rs", 1)]); 382 | let file_path = dir.path().join("case.rs"); 383 | std::fs::write(&file_path, "Hello\nhello\nHELLO\n").unwrap(); 384 | 385 | let stdout = run_zg(&dir, &["hello"]); 386 | 387 | assert!( 388 | stdout.contains("case.rs:2"), 389 | "Expected match for lowercase 'hello', got:\n{}", 390 | stdout 391 | ); 392 | assert!( 393 | !stdout.contains("case.rs:1"), 394 | "Unexpected match for 'Hello'" 395 | ); 396 | assert!( 397 | !stdout.contains("case.rs:3"), 398 | "Unexpected match for 'HELLO'" 399 | ); 400 | } 401 | 402 | #[test] 403 | fn ignore_case_short_flag_matches_all_cases() { 404 | let dir = create_mock_repo(&[("case.rs", 1)]); 405 | let file_path = dir.path().join("case.rs"); 406 | std::fs::write(&file_path, "Hello\nhello\nHELLO\n").unwrap(); 407 | 408 | let stdout = run_zg(&dir, &["-i", "hello"]); 409 | 410 | assert!(stdout.contains("case.rs:1"), "Expected match for 'Hello'"); 411 | assert!(stdout.contains("case.rs:2"), "Expected match for 'hello'"); 412 | assert!(stdout.contains("case.rs:3"), "Expected match for 'HELLO'"); 413 | } 414 | 415 | #[test] 416 | fn smart_case_no_uppercase_letters() { 417 | let dir = create_mock_repo(&[("case.rs", 1)]); 418 | let file_path = dir.path().join("case.rs"); 419 | std::fs::write(&file_path, "Hello\nhello\nHELLO\n").unwrap(); 420 | 421 | let stdout = run_zg(&dir, &["-S", "hello"]); 422 | 423 | assert!(stdout.contains("case.rs:1"), "Expected match for 'Hello'"); 424 | assert!(stdout.contains("case.rs:2"), "Expected match for 'hello'"); 425 | assert!(stdout.contains("case.rs:3"), "Expected match for 'HELLO'"); 426 | } 427 | 428 | #[test] 429 | fn smart_case_has_uppercase_letters() { 430 | let dir = create_mock_repo(&[("case.rs", 1)]); 431 | let file_path = dir.path().join("case.rs"); 432 | std::fs::write(&file_path, "Hello\nhello\nHELLO\n").unwrap(); 433 | 434 | let stdout = run_zg(&dir, &["--smart-case", "Hello"]); 435 | 436 | assert!(stdout.contains("case.rs:1"), "Expected match for 'Hello'"); 437 | assert!( 438 | !stdout.contains("case.rs:2"), 439 | "Unexpected match for 'hello'" 440 | ); 441 | assert!( 442 | !stdout.contains("case.rs:3"), 443 | "Unexpected match for 'HELLO'" 444 | ); 445 | } 446 | 447 | #[test] 448 | fn ignore_case_long_flag_matches_all_cases() { 449 | let dir = create_mock_repo(&[("case.rs", 1)]); 450 | let file_path = dir.path().join("case.rs"); 451 | std::fs::write(&file_path, "Hello\nhello\nHELLO\n").unwrap(); 452 | 453 | let stdout = run_zg(&dir, &["--ignore-case", "HelLo"]); 454 | 455 | assert!(stdout.contains("case.rs:1"), "Expected match for 'Hello'"); 456 | assert!(stdout.contains("case.rs:2"), "Expected match for 'hello'"); 457 | assert!(stdout.contains("case.rs:3"), "Expected match for 'HELLO'"); 458 | } 459 | } 460 | 461 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "1.1.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "android-tzdata" 16 | version = "0.1.1" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 19 | 20 | [[package]] 21 | name = "android_system_properties" 22 | version = "0.1.5" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 25 | dependencies = [ 26 | "libc", 27 | ] 28 | 29 | [[package]] 30 | name = "anstream" 31 | version = "0.6.18" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 34 | dependencies = [ 35 | "anstyle", 36 | "anstyle-parse", 37 | "anstyle-query", 38 | "anstyle-wincon", 39 | "colorchoice", 40 | "is_terminal_polyfill", 41 | "utf8parse", 42 | ] 43 | 44 | [[package]] 45 | name = "anstyle" 46 | version = "1.0.10" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 49 | 50 | [[package]] 51 | name = "anstyle-parse" 52 | version = "0.2.6" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 55 | dependencies = [ 56 | "utf8parse", 57 | ] 58 | 59 | [[package]] 60 | name = "anstyle-query" 61 | version = "1.1.2" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 64 | dependencies = [ 65 | "windows-sys", 66 | ] 67 | 68 | [[package]] 69 | name = "anstyle-wincon" 70 | version = "3.0.7" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 73 | dependencies = [ 74 | "anstyle", 75 | "once_cell", 76 | "windows-sys", 77 | ] 78 | 79 | [[package]] 80 | name = "anyhow" 81 | version = "1.0.98" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 84 | 85 | [[package]] 86 | name = "assert_cmd" 87 | version = "2.0.17" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "2bd389a4b2970a01282ee455294913c0a43724daedcd1a24c3eb0ec1c1320b66" 90 | dependencies = [ 91 | "anstyle", 92 | "bstr", 93 | "doc-comment", 94 | "libc", 95 | "predicates", 96 | "predicates-core", 97 | "predicates-tree", 98 | "wait-timeout", 99 | ] 100 | 101 | [[package]] 102 | name = "autocfg" 103 | version = "1.4.0" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 106 | 107 | [[package]] 108 | name = "bincode" 109 | version = "1.3.3" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 112 | dependencies = [ 113 | "serde", 114 | ] 115 | 116 | [[package]] 117 | name = "bitflags" 118 | version = "1.3.2" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 121 | 122 | [[package]] 123 | name = "bitflags" 124 | version = "2.9.0" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 127 | 128 | [[package]] 129 | name = "block-buffer" 130 | version = "0.10.4" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 133 | dependencies = [ 134 | "generic-array", 135 | ] 136 | 137 | [[package]] 138 | name = "bstr" 139 | version = "1.12.0" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" 142 | dependencies = [ 143 | "memchr", 144 | "regex-automata", 145 | "serde", 146 | ] 147 | 148 | [[package]] 149 | name = "bumpalo" 150 | version = "3.17.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 153 | 154 | [[package]] 155 | name = "byteorder" 156 | version = "1.5.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 159 | 160 | [[package]] 161 | name = "cc" 162 | version = "1.2.22" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" 165 | dependencies = [ 166 | "jobserver", 167 | "libc", 168 | "shlex", 169 | ] 170 | 171 | [[package]] 172 | name = "cfg-if" 173 | version = "1.0.0" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 176 | 177 | [[package]] 178 | name = "chrono" 179 | version = "0.4.41" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 182 | dependencies = [ 183 | "android-tzdata", 184 | "iana-time-zone", 185 | "js-sys", 186 | "num-traits", 187 | "wasm-bindgen", 188 | "windows-link", 189 | ] 190 | 191 | [[package]] 192 | name = "clap" 193 | version = "4.5.40" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" 196 | dependencies = [ 197 | "clap_builder", 198 | "clap_derive", 199 | ] 200 | 201 | [[package]] 202 | name = "clap_builder" 203 | version = "4.5.40" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" 206 | dependencies = [ 207 | "anstream", 208 | "anstyle", 209 | "clap_lex", 210 | "strsim", 211 | ] 212 | 213 | [[package]] 214 | name = "clap_derive" 215 | version = "4.5.40" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" 218 | dependencies = [ 219 | "heck", 220 | "proc-macro2", 221 | "quote", 222 | "syn", 223 | ] 224 | 225 | [[package]] 226 | name = "clap_lex" 227 | version = "0.7.4" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 230 | 231 | [[package]] 232 | name = "colorchoice" 233 | version = "1.0.3" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 236 | 237 | [[package]] 238 | name = "core-foundation-sys" 239 | version = "0.8.7" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 242 | 243 | [[package]] 244 | name = "cpufeatures" 245 | version = "0.2.17" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 248 | dependencies = [ 249 | "libc", 250 | ] 251 | 252 | [[package]] 253 | name = "crc32fast" 254 | version = "1.4.2" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 257 | dependencies = [ 258 | "cfg-if", 259 | ] 260 | 261 | [[package]] 262 | name = "crossbeam-deque" 263 | version = "0.8.6" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 266 | dependencies = [ 267 | "crossbeam-epoch", 268 | "crossbeam-utils", 269 | ] 270 | 271 | [[package]] 272 | name = "crossbeam-epoch" 273 | version = "0.9.18" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 276 | dependencies = [ 277 | "crossbeam-utils", 278 | ] 279 | 280 | [[package]] 281 | name = "crossbeam-utils" 282 | version = "0.8.21" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 285 | 286 | [[package]] 287 | name = "crypto-common" 288 | version = "0.1.6" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 291 | dependencies = [ 292 | "generic-array", 293 | "typenum", 294 | ] 295 | 296 | [[package]] 297 | name = "difflib" 298 | version = "0.4.0" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" 301 | 302 | [[package]] 303 | name = "digest" 304 | version = "0.10.7" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 307 | dependencies = [ 308 | "block-buffer", 309 | "crypto-common", 310 | ] 311 | 312 | [[package]] 313 | name = "directories" 314 | version = "6.0.0" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" 317 | dependencies = [ 318 | "dirs-sys", 319 | ] 320 | 321 | [[package]] 322 | name = "dirs-sys" 323 | version = "0.5.0" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 326 | dependencies = [ 327 | "libc", 328 | "option-ext", 329 | "redox_users", 330 | "windows-sys", 331 | ] 332 | 333 | [[package]] 334 | name = "displaydoc" 335 | version = "0.2.5" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 338 | dependencies = [ 339 | "proc-macro2", 340 | "quote", 341 | "syn", 342 | ] 343 | 344 | [[package]] 345 | name = "doc-comment" 346 | version = "0.3.3" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 349 | 350 | [[package]] 351 | name = "either" 352 | version = "1.15.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 355 | 356 | [[package]] 357 | name = "encoding_rs" 358 | version = "0.8.35" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 361 | dependencies = [ 362 | "cfg-if", 363 | ] 364 | 365 | [[package]] 366 | name = "encoding_rs_io" 367 | version = "0.1.7" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83" 370 | dependencies = [ 371 | "encoding_rs", 372 | ] 373 | 374 | [[package]] 375 | name = "errno" 376 | version = "0.3.11" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" 379 | dependencies = [ 380 | "libc", 381 | "windows-sys", 382 | ] 383 | 384 | [[package]] 385 | name = "fastrand" 386 | version = "2.3.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 389 | 390 | [[package]] 391 | name = "float-cmp" 392 | version = "0.10.0" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" 395 | dependencies = [ 396 | "num-traits", 397 | ] 398 | 399 | [[package]] 400 | name = "form_urlencoded" 401 | version = "1.2.1" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 404 | dependencies = [ 405 | "percent-encoding", 406 | ] 407 | 408 | [[package]] 409 | name = "frecenfile" 410 | version = "0.4.0" 411 | source = "registry+https://github.com/rust-lang/crates.io-index" 412 | checksum = "29d5545a101a90b6de8178f69dbb55ac0c0376577e533f34c81a1ce697efadac" 413 | dependencies = [ 414 | "anyhow", 415 | "bincode", 416 | "chrono", 417 | "clap", 418 | "directories", 419 | "git2", 420 | "hex", 421 | "rayon", 422 | "rustc-hash", 423 | "serde", 424 | "sha2", 425 | "sled", 426 | ] 427 | 428 | [[package]] 429 | name = "fs2" 430 | version = "0.4.3" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" 433 | dependencies = [ 434 | "libc", 435 | "winapi", 436 | ] 437 | 438 | [[package]] 439 | name = "fxhash" 440 | version = "0.2.1" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 443 | dependencies = [ 444 | "byteorder", 445 | ] 446 | 447 | [[package]] 448 | name = "generic-array" 449 | version = "0.14.7" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 452 | dependencies = [ 453 | "typenum", 454 | "version_check", 455 | ] 456 | 457 | [[package]] 458 | name = "getrandom" 459 | version = "0.2.16" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 462 | dependencies = [ 463 | "cfg-if", 464 | "libc", 465 | "wasi 0.11.0+wasi-snapshot-preview1", 466 | ] 467 | 468 | [[package]] 469 | name = "getrandom" 470 | version = "0.3.3" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 473 | dependencies = [ 474 | "cfg-if", 475 | "libc", 476 | "r-efi", 477 | "wasi 0.14.2+wasi-0.2.4", 478 | ] 479 | 480 | [[package]] 481 | name = "git2" 482 | version = "0.20.2" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" 485 | dependencies = [ 486 | "bitflags 2.9.0", 487 | "libc", 488 | "libgit2-sys", 489 | "log", 490 | "openssl-probe", 491 | "openssl-sys", 492 | "url", 493 | ] 494 | 495 | [[package]] 496 | name = "globset" 497 | version = "0.4.16" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" 500 | dependencies = [ 501 | "aho-corasick", 502 | "bstr", 503 | "log", 504 | "regex-automata", 505 | "regex-syntax", 506 | ] 507 | 508 | [[package]] 509 | name = "grep" 510 | version = "0.3.2" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "308ae749734e28d749a86f33212c7b756748568ce332f970ac1d9cd8531f32e6" 513 | dependencies = [ 514 | "grep-cli", 515 | "grep-matcher", 516 | "grep-printer", 517 | "grep-regex", 518 | "grep-searcher", 519 | ] 520 | 521 | [[package]] 522 | name = "grep-cli" 523 | version = "0.1.11" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "47f1288f0e06f279f84926fa4c17e3fcd2a22b357927a82f2777f7be26e4cec0" 526 | dependencies = [ 527 | "bstr", 528 | "globset", 529 | "libc", 530 | "log", 531 | "termcolor", 532 | "winapi-util", 533 | ] 534 | 535 | [[package]] 536 | name = "grep-matcher" 537 | version = "0.1.7" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "47a3141a10a43acfedc7c98a60a834d7ba00dfe7bec9071cbfc19b55b292ac02" 540 | dependencies = [ 541 | "memchr", 542 | ] 543 | 544 | [[package]] 545 | name = "grep-printer" 546 | version = "0.2.2" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "c112110ae4a891aa4d83ab82ecf734b307497d066f437686175e83fbd4e013fe" 549 | dependencies = [ 550 | "bstr", 551 | "grep-matcher", 552 | "grep-searcher", 553 | "log", 554 | "serde", 555 | "serde_json", 556 | "termcolor", 557 | ] 558 | 559 | [[package]] 560 | name = "grep-regex" 561 | version = "0.1.13" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "9edd147c7e3296e7a26bd3a81345ce849557d5a8e48ed88f736074e760f91f7e" 564 | dependencies = [ 565 | "bstr", 566 | "grep-matcher", 567 | "log", 568 | "regex-automata", 569 | "regex-syntax", 570 | ] 571 | 572 | [[package]] 573 | name = "grep-searcher" 574 | version = "0.1.14" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "b9b6c14b3fc2e0a107d6604d3231dec0509e691e62447104bc385a46a7892cda" 577 | dependencies = [ 578 | "bstr", 579 | "encoding_rs", 580 | "encoding_rs_io", 581 | "grep-matcher", 582 | "log", 583 | "memchr", 584 | "memmap2", 585 | ] 586 | 587 | [[package]] 588 | name = "heck" 589 | version = "0.5.0" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 592 | 593 | [[package]] 594 | name = "hex" 595 | version = "0.4.3" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 598 | 599 | [[package]] 600 | name = "iana-time-zone" 601 | version = "0.1.63" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 604 | dependencies = [ 605 | "android_system_properties", 606 | "core-foundation-sys", 607 | "iana-time-zone-haiku", 608 | "js-sys", 609 | "log", 610 | "wasm-bindgen", 611 | "windows-core", 612 | ] 613 | 614 | [[package]] 615 | name = "iana-time-zone-haiku" 616 | version = "0.1.2" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 619 | dependencies = [ 620 | "cc", 621 | ] 622 | 623 | [[package]] 624 | name = "icu_collections" 625 | version = "2.0.0" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 628 | dependencies = [ 629 | "displaydoc", 630 | "potential_utf", 631 | "yoke", 632 | "zerofrom", 633 | "zerovec", 634 | ] 635 | 636 | [[package]] 637 | name = "icu_locale_core" 638 | version = "2.0.0" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 641 | dependencies = [ 642 | "displaydoc", 643 | "litemap", 644 | "tinystr", 645 | "writeable", 646 | "zerovec", 647 | ] 648 | 649 | [[package]] 650 | name = "icu_normalizer" 651 | version = "2.0.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 654 | dependencies = [ 655 | "displaydoc", 656 | "icu_collections", 657 | "icu_normalizer_data", 658 | "icu_properties", 659 | "icu_provider", 660 | "smallvec", 661 | "zerovec", 662 | ] 663 | 664 | [[package]] 665 | name = "icu_normalizer_data" 666 | version = "2.0.0" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 669 | 670 | [[package]] 671 | name = "icu_properties" 672 | version = "2.0.0" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" 675 | dependencies = [ 676 | "displaydoc", 677 | "icu_collections", 678 | "icu_locale_core", 679 | "icu_properties_data", 680 | "icu_provider", 681 | "potential_utf", 682 | "zerotrie", 683 | "zerovec", 684 | ] 685 | 686 | [[package]] 687 | name = "icu_properties_data" 688 | version = "2.0.0" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" 691 | 692 | [[package]] 693 | name = "icu_provider" 694 | version = "2.0.0" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 697 | dependencies = [ 698 | "displaydoc", 699 | "icu_locale_core", 700 | "stable_deref_trait", 701 | "tinystr", 702 | "writeable", 703 | "yoke", 704 | "zerofrom", 705 | "zerotrie", 706 | "zerovec", 707 | ] 708 | 709 | [[package]] 710 | name = "idna" 711 | version = "1.0.3" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 714 | dependencies = [ 715 | "idna_adapter", 716 | "smallvec", 717 | "utf8_iter", 718 | ] 719 | 720 | [[package]] 721 | name = "idna_adapter" 722 | version = "1.2.1" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 725 | dependencies = [ 726 | "icu_normalizer", 727 | "icu_properties", 728 | ] 729 | 730 | [[package]] 731 | name = "ignore" 732 | version = "0.4.23" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" 735 | dependencies = [ 736 | "crossbeam-deque", 737 | "globset", 738 | "log", 739 | "memchr", 740 | "regex-automata", 741 | "same-file", 742 | "walkdir", 743 | "winapi-util", 744 | ] 745 | 746 | [[package]] 747 | name = "instant" 748 | version = "0.1.13" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 751 | dependencies = [ 752 | "cfg-if", 753 | ] 754 | 755 | [[package]] 756 | name = "is_terminal_polyfill" 757 | version = "1.70.1" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 760 | 761 | [[package]] 762 | name = "itoa" 763 | version = "1.0.15" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 766 | 767 | [[package]] 768 | name = "jobserver" 769 | version = "0.1.33" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 772 | dependencies = [ 773 | "getrandom 0.3.3", 774 | "libc", 775 | ] 776 | 777 | [[package]] 778 | name = "js-sys" 779 | version = "0.3.77" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 782 | dependencies = [ 783 | "once_cell", 784 | "wasm-bindgen", 785 | ] 786 | 787 | [[package]] 788 | name = "libc" 789 | version = "0.2.172" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 792 | 793 | [[package]] 794 | name = "libgit2-sys" 795 | version = "0.18.1+1.9.0" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "e1dcb20f84ffcdd825c7a311ae347cce604a6f084a767dec4a4929829645290e" 798 | dependencies = [ 799 | "cc", 800 | "libc", 801 | "libssh2-sys", 802 | "libz-sys", 803 | "openssl-sys", 804 | "pkg-config", 805 | ] 806 | 807 | [[package]] 808 | name = "libredox" 809 | version = "0.1.3" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 812 | dependencies = [ 813 | "bitflags 2.9.0", 814 | "libc", 815 | ] 816 | 817 | [[package]] 818 | name = "libssh2-sys" 819 | version = "0.3.1" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" 822 | dependencies = [ 823 | "cc", 824 | "libc", 825 | "libz-sys", 826 | "openssl-sys", 827 | "pkg-config", 828 | "vcpkg", 829 | ] 830 | 831 | [[package]] 832 | name = "libz-sys" 833 | version = "1.1.22" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" 836 | dependencies = [ 837 | "cc", 838 | "libc", 839 | "pkg-config", 840 | "vcpkg", 841 | ] 842 | 843 | [[package]] 844 | name = "linux-raw-sys" 845 | version = "0.9.4" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 848 | 849 | [[package]] 850 | name = "litemap" 851 | version = "0.8.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 854 | 855 | [[package]] 856 | name = "lock_api" 857 | version = "0.4.12" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 860 | dependencies = [ 861 | "autocfg", 862 | "scopeguard", 863 | ] 864 | 865 | [[package]] 866 | name = "log" 867 | version = "0.4.27" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 870 | 871 | [[package]] 872 | name = "memchr" 873 | version = "2.7.4" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 876 | 877 | [[package]] 878 | name = "memmap2" 879 | version = "0.9.5" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 882 | dependencies = [ 883 | "libc", 884 | ] 885 | 886 | [[package]] 887 | name = "normalize-line-endings" 888 | version = "0.3.0" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" 891 | 892 | [[package]] 893 | name = "num-traits" 894 | version = "0.2.19" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 897 | dependencies = [ 898 | "autocfg", 899 | ] 900 | 901 | [[package]] 902 | name = "once_cell" 903 | version = "1.21.3" 904 | source = "registry+https://github.com/rust-lang/crates.io-index" 905 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 906 | 907 | [[package]] 908 | name = "openssl-probe" 909 | version = "0.1.6" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 912 | 913 | [[package]] 914 | name = "openssl-sys" 915 | version = "0.9.108" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847" 918 | dependencies = [ 919 | "cc", 920 | "libc", 921 | "pkg-config", 922 | "vcpkg", 923 | ] 924 | 925 | [[package]] 926 | name = "option-ext" 927 | version = "0.2.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 930 | 931 | [[package]] 932 | name = "parking_lot" 933 | version = "0.11.2" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 936 | dependencies = [ 937 | "instant", 938 | "lock_api", 939 | "parking_lot_core", 940 | ] 941 | 942 | [[package]] 943 | name = "parking_lot_core" 944 | version = "0.8.6" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 947 | dependencies = [ 948 | "cfg-if", 949 | "instant", 950 | "libc", 951 | "redox_syscall", 952 | "smallvec", 953 | "winapi", 954 | ] 955 | 956 | [[package]] 957 | name = "percent-encoding" 958 | version = "2.3.1" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 961 | 962 | [[package]] 963 | name = "pkg-config" 964 | version = "0.3.32" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 967 | 968 | [[package]] 969 | name = "potential_utf" 970 | version = "0.1.2" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 973 | dependencies = [ 974 | "zerovec", 975 | ] 976 | 977 | [[package]] 978 | name = "predicates" 979 | version = "3.1.3" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" 982 | dependencies = [ 983 | "anstyle", 984 | "difflib", 985 | "float-cmp", 986 | "normalize-line-endings", 987 | "predicates-core", 988 | "regex", 989 | ] 990 | 991 | [[package]] 992 | name = "predicates-core" 993 | version = "1.0.9" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" 996 | 997 | [[package]] 998 | name = "predicates-tree" 999 | version = "1.0.12" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" 1002 | dependencies = [ 1003 | "predicates-core", 1004 | "termtree", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "proc-macro2" 1009 | version = "1.0.95" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 1012 | dependencies = [ 1013 | "unicode-ident", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "quote" 1018 | version = "1.0.40" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1021 | dependencies = [ 1022 | "proc-macro2", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "r-efi" 1027 | version = "5.2.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1030 | 1031 | [[package]] 1032 | name = "rayon" 1033 | version = "1.10.0" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1036 | dependencies = [ 1037 | "either", 1038 | "rayon-core", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "rayon-core" 1043 | version = "1.12.1" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1046 | dependencies = [ 1047 | "crossbeam-deque", 1048 | "crossbeam-utils", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "redox_syscall" 1053 | version = "0.2.16" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1056 | dependencies = [ 1057 | "bitflags 1.3.2", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "redox_users" 1062 | version = "0.5.0" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" 1065 | dependencies = [ 1066 | "getrandom 0.2.16", 1067 | "libredox", 1068 | "thiserror", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "regex" 1073 | version = "1.11.1" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1076 | dependencies = [ 1077 | "aho-corasick", 1078 | "memchr", 1079 | "regex-automata", 1080 | "regex-syntax", 1081 | ] 1082 | 1083 | [[package]] 1084 | name = "regex-automata" 1085 | version = "0.4.9" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1088 | dependencies = [ 1089 | "aho-corasick", 1090 | "memchr", 1091 | "regex-syntax", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "regex-syntax" 1096 | version = "0.8.5" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1099 | 1100 | [[package]] 1101 | name = "rustc-hash" 1102 | version = "2.1.1" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 1105 | 1106 | [[package]] 1107 | name = "rustix" 1108 | version = "1.0.7" 1109 | source = "registry+https://github.com/rust-lang/crates.io-index" 1110 | checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 1111 | dependencies = [ 1112 | "bitflags 2.9.0", 1113 | "errno", 1114 | "libc", 1115 | "linux-raw-sys", 1116 | "windows-sys", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "rustversion" 1121 | version = "1.0.20" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 1124 | 1125 | [[package]] 1126 | name = "ryu" 1127 | version = "1.0.20" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1130 | 1131 | [[package]] 1132 | name = "same-file" 1133 | version = "1.0.6" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1136 | dependencies = [ 1137 | "winapi-util", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "scopeguard" 1142 | version = "1.2.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1145 | 1146 | [[package]] 1147 | name = "serde" 1148 | version = "1.0.219" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1151 | dependencies = [ 1152 | "serde_derive", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "serde_derive" 1157 | version = "1.0.219" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1160 | dependencies = [ 1161 | "proc-macro2", 1162 | "quote", 1163 | "syn", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "serde_json" 1168 | version = "1.0.140" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1171 | dependencies = [ 1172 | "itoa", 1173 | "memchr", 1174 | "ryu", 1175 | "serde", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "sha2" 1180 | version = "0.10.9" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 1183 | dependencies = [ 1184 | "cfg-if", 1185 | "cpufeatures", 1186 | "digest", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "shlex" 1191 | version = "1.3.0" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1194 | 1195 | [[package]] 1196 | name = "sled" 1197 | version = "0.34.7" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" 1200 | dependencies = [ 1201 | "crc32fast", 1202 | "crossbeam-epoch", 1203 | "crossbeam-utils", 1204 | "fs2", 1205 | "fxhash", 1206 | "libc", 1207 | "log", 1208 | "parking_lot", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "smallvec" 1213 | version = "1.15.0" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 1216 | 1217 | [[package]] 1218 | name = "stable_deref_trait" 1219 | version = "1.2.0" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1222 | 1223 | [[package]] 1224 | name = "strsim" 1225 | version = "0.11.1" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1228 | 1229 | [[package]] 1230 | name = "syn" 1231 | version = "2.0.101" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 1234 | dependencies = [ 1235 | "proc-macro2", 1236 | "quote", 1237 | "unicode-ident", 1238 | ] 1239 | 1240 | [[package]] 1241 | name = "synstructure" 1242 | version = "0.13.2" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1245 | dependencies = [ 1246 | "proc-macro2", 1247 | "quote", 1248 | "syn", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "tempfile" 1253 | version = "3.20.0" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 1256 | dependencies = [ 1257 | "fastrand", 1258 | "getrandom 0.3.3", 1259 | "once_cell", 1260 | "rustix", 1261 | "windows-sys", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "termcolor" 1266 | version = "1.4.1" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 1269 | dependencies = [ 1270 | "winapi-util", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "termtree" 1275 | version = "0.5.1" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" 1278 | 1279 | [[package]] 1280 | name = "thiserror" 1281 | version = "2.0.12" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 1284 | dependencies = [ 1285 | "thiserror-impl", 1286 | ] 1287 | 1288 | [[package]] 1289 | name = "thiserror-impl" 1290 | version = "2.0.12" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 1293 | dependencies = [ 1294 | "proc-macro2", 1295 | "quote", 1296 | "syn", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "tinystr" 1301 | version = "0.8.1" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 1304 | dependencies = [ 1305 | "displaydoc", 1306 | "zerovec", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "typenum" 1311 | version = "1.18.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 1314 | 1315 | [[package]] 1316 | name = "unicode-ident" 1317 | version = "1.0.18" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1320 | 1321 | [[package]] 1322 | name = "url" 1323 | version = "2.5.4" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 1326 | dependencies = [ 1327 | "form_urlencoded", 1328 | "idna", 1329 | "percent-encoding", 1330 | ] 1331 | 1332 | [[package]] 1333 | name = "utf8_iter" 1334 | version = "1.0.4" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1337 | 1338 | [[package]] 1339 | name = "utf8parse" 1340 | version = "0.2.2" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1343 | 1344 | [[package]] 1345 | name = "vcpkg" 1346 | version = "0.2.15" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1349 | 1350 | [[package]] 1351 | name = "version_check" 1352 | version = "0.9.5" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1355 | 1356 | [[package]] 1357 | name = "wait-timeout" 1358 | version = "0.2.1" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" 1361 | dependencies = [ 1362 | "libc", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "walkdir" 1367 | version = "2.5.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1370 | dependencies = [ 1371 | "same-file", 1372 | "winapi-util", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "wasi" 1377 | version = "0.11.0+wasi-snapshot-preview1" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1380 | 1381 | [[package]] 1382 | name = "wasi" 1383 | version = "0.14.2+wasi-0.2.4" 1384 | source = "registry+https://github.com/rust-lang/crates.io-index" 1385 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 1386 | dependencies = [ 1387 | "wit-bindgen-rt", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "wasm-bindgen" 1392 | version = "0.2.100" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1395 | dependencies = [ 1396 | "cfg-if", 1397 | "once_cell", 1398 | "rustversion", 1399 | "wasm-bindgen-macro", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "wasm-bindgen-backend" 1404 | version = "0.2.100" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1407 | dependencies = [ 1408 | "bumpalo", 1409 | "log", 1410 | "proc-macro2", 1411 | "quote", 1412 | "syn", 1413 | "wasm-bindgen-shared", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "wasm-bindgen-macro" 1418 | version = "0.2.100" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1421 | dependencies = [ 1422 | "quote", 1423 | "wasm-bindgen-macro-support", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "wasm-bindgen-macro-support" 1428 | version = "0.2.100" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1431 | dependencies = [ 1432 | "proc-macro2", 1433 | "quote", 1434 | "syn", 1435 | "wasm-bindgen-backend", 1436 | "wasm-bindgen-shared", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "wasm-bindgen-shared" 1441 | version = "0.2.100" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 1444 | dependencies = [ 1445 | "unicode-ident", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "winapi" 1450 | version = "0.3.9" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1453 | dependencies = [ 1454 | "winapi-i686-pc-windows-gnu", 1455 | "winapi-x86_64-pc-windows-gnu", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "winapi-i686-pc-windows-gnu" 1460 | version = "0.4.0" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1463 | 1464 | [[package]] 1465 | name = "winapi-util" 1466 | version = "0.1.9" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 1469 | dependencies = [ 1470 | "windows-sys", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "winapi-x86_64-pc-windows-gnu" 1475 | version = "0.4.0" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1478 | 1479 | [[package]] 1480 | name = "windows-core" 1481 | version = "0.61.0" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" 1484 | dependencies = [ 1485 | "windows-implement", 1486 | "windows-interface", 1487 | "windows-link", 1488 | "windows-result", 1489 | "windows-strings", 1490 | ] 1491 | 1492 | [[package]] 1493 | name = "windows-implement" 1494 | version = "0.60.0" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 1497 | dependencies = [ 1498 | "proc-macro2", 1499 | "quote", 1500 | "syn", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "windows-interface" 1505 | version = "0.59.1" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 1508 | dependencies = [ 1509 | "proc-macro2", 1510 | "quote", 1511 | "syn", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "windows-link" 1516 | version = "0.1.1" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 1519 | 1520 | [[package]] 1521 | name = "windows-result" 1522 | version = "0.3.2" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" 1525 | dependencies = [ 1526 | "windows-link", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "windows-strings" 1531 | version = "0.4.0" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" 1534 | dependencies = [ 1535 | "windows-link", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "windows-sys" 1540 | version = "0.59.0" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1543 | dependencies = [ 1544 | "windows-targets", 1545 | ] 1546 | 1547 | [[package]] 1548 | name = "windows-targets" 1549 | version = "0.52.6" 1550 | source = "registry+https://github.com/rust-lang/crates.io-index" 1551 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1552 | dependencies = [ 1553 | "windows_aarch64_gnullvm", 1554 | "windows_aarch64_msvc", 1555 | "windows_i686_gnu", 1556 | "windows_i686_gnullvm", 1557 | "windows_i686_msvc", 1558 | "windows_x86_64_gnu", 1559 | "windows_x86_64_gnullvm", 1560 | "windows_x86_64_msvc", 1561 | ] 1562 | 1563 | [[package]] 1564 | name = "windows_aarch64_gnullvm" 1565 | version = "0.52.6" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1568 | 1569 | [[package]] 1570 | name = "windows_aarch64_msvc" 1571 | version = "0.52.6" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1574 | 1575 | [[package]] 1576 | name = "windows_i686_gnu" 1577 | version = "0.52.6" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1580 | 1581 | [[package]] 1582 | name = "windows_i686_gnullvm" 1583 | version = "0.52.6" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1586 | 1587 | [[package]] 1588 | name = "windows_i686_msvc" 1589 | version = "0.52.6" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1592 | 1593 | [[package]] 1594 | name = "windows_x86_64_gnu" 1595 | version = "0.52.6" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1598 | 1599 | [[package]] 1600 | name = "windows_x86_64_gnullvm" 1601 | version = "0.52.6" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1604 | 1605 | [[package]] 1606 | name = "windows_x86_64_msvc" 1607 | version = "0.52.6" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1610 | 1611 | [[package]] 1612 | name = "wit-bindgen-rt" 1613 | version = "0.39.0" 1614 | source = "registry+https://github.com/rust-lang/crates.io-index" 1615 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 1616 | dependencies = [ 1617 | "bitflags 2.9.0", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "writeable" 1622 | version = "0.6.1" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 1625 | 1626 | [[package]] 1627 | name = "yoke" 1628 | version = "0.8.0" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 1631 | dependencies = [ 1632 | "serde", 1633 | "stable_deref_trait", 1634 | "yoke-derive", 1635 | "zerofrom", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "yoke-derive" 1640 | version = "0.8.0" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 1643 | dependencies = [ 1644 | "proc-macro2", 1645 | "quote", 1646 | "syn", 1647 | "synstructure", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "zeitgrep" 1652 | version = "0.8.0" 1653 | dependencies = [ 1654 | "anyhow", 1655 | "assert_cmd", 1656 | "clap", 1657 | "frecenfile", 1658 | "git2", 1659 | "grep", 1660 | "ignore", 1661 | "predicates", 1662 | "tempfile", 1663 | "termcolor", 1664 | ] 1665 | 1666 | [[package]] 1667 | name = "zerofrom" 1668 | version = "0.1.6" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 1671 | dependencies = [ 1672 | "zerofrom-derive", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "zerofrom-derive" 1677 | version = "0.1.6" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 1680 | dependencies = [ 1681 | "proc-macro2", 1682 | "quote", 1683 | "syn", 1684 | "synstructure", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "zerotrie" 1689 | version = "0.2.2" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 1692 | dependencies = [ 1693 | "displaydoc", 1694 | "yoke", 1695 | "zerofrom", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "zerovec" 1700 | version = "0.11.2" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 1703 | dependencies = [ 1704 | "yoke", 1705 | "zerofrom", 1706 | "zerovec-derive", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "zerovec-derive" 1711 | version = "0.11.1" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 1714 | dependencies = [ 1715 | "proc-macro2", 1716 | "quote", 1717 | "syn", 1718 | ] 1719 | --------------------------------------------------------------------------------