├── .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 |
13 | Unsorted grep results (
14 | rg def | head
15 | )
16 | |
17 |
18 |
19 |
20 |  |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | zeitgrep results (
29 | zg def | head
30 | )
31 | |
32 |
33 |
34 |
35 |  |
36 |
37 |
38 |
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 |
--------------------------------------------------------------------------------