Skip to content

Commit 1a888bf

Browse files
committed
chore: development v0.2.141 - comprehensive testing complete [auto-commit]
1 parent 3d70713 commit 1a888bf

File tree

17 files changed

+923
-132
lines changed

17 files changed

+923
-132
lines changed

CHANGELOG.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
- Cleaned up all TTAPI references from justfile and build scripts
2424
- Updated justfile header and recipes for UFFS
2525

26-
## [0.2.140] - 2026-01-27
26+
## [0.2.141] - 2026-01-27
2727

2828
### Added
2929
- Baseline CI validation for modernization effort
@@ -46,7 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4646
### Fixed
4747
- Various MFT parsing edge cases
4848

49-
[Unreleased]: https://github.com/githubrobbi/UltraFastFileSearch/compare/v0.2.140...HEAD
50-
[0.2.140]: https://github.com/githubrobbi/UltraFastFileSearch/compare/v0.2.114...v0.2.140
49+
[Unreleased]: https://github.com/githubrobbi/UltraFastFileSearch/compare/v0.2.141...HEAD
50+
[0.2.141]: https://github.com/githubrobbi/UltraFastFileSearch/compare/v0.2.114...v0.2.141
5151
[0.2.114]: https://github.com/githubrobbi/UltraFastFileSearch/releases/tag/v0.2.114
5252

Cargo.lock

Lines changed: 29 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ exclude = [
3939
# Workspace Package Metadata (inherited by all crates)
4040
# ─────────────────────────────────────────────────────────────────────────────
4141
[workspace.package]
42-
version = "0.2.140"
42+
version = "0.2.141"
4343
edition = "2024"
4444
rust-version = "1.85"
4545
license = "MPL-2.0 OR LicenseRef-UFFS-Commercial"

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Traditional file search tools (including `os.walk`, `FindFirstFile`, etc.) work
2121

2222
**UFFS reads the MFT directly** - once - and queries it in memory using Polars DataFrames. This is like reading the entire phonebook once instead of looking up each name individually.
2323

24-
### Benchmark Results (v0.2.140)
24+
### Benchmark Results (v0.2.141)
2525

2626
| Drive Type | Records | Time | Throughput |
2727
|------------|---------|------|------------|
@@ -33,7 +33,7 @@ Traditional file search tools (including `os.walk`, `FindFirstFile`, etc.) work
3333

3434
| Comparison | Records | Time | Notes |
3535
|------------|---------|------|-------|
36-
| **UFFS v0.2.140** | **18.7 Million** | **~142 seconds** | All disks, fast mode |
36+
| **UFFS v0.2.141** | **18.7 Million** | **~142 seconds** | All disks, fast mode |
3737
| UFFS v0.1.30 | 18.7 Million | ~315 seconds | Baseline |
3838
| Everything | 19 Million | 178 seconds | All disks |
3939
| WizFile | 6.5 Million | 299 seconds | Single HDD |

crates/uffs-cli/src/commands.rs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -960,11 +960,9 @@ async fn load_and_filter_data_index(
960960
let load_ms = t_load.elapsed().as_millis();
961961

962962
// Execute query on index
963-
eprintln!("[DEBUG] search_single_drive: before execute_index_query");
964963
let t_query = std::time::Instant::now();
965964
let results = execute_index_query(&index, filters, needs_paths)?;
966965
let query_ms = t_query.elapsed().as_millis();
967-
eprintln!("[DEBUG] search_single_drive: after execute_index_query");
968966

969967
if profile {
970968
let total_ms = load_ms + query_ms;
@@ -1258,16 +1256,8 @@ fn execute_index_query(
12581256
query = query.with_resolve_paths(resolve_paths);
12591257

12601258
// Execute and convert to DataFrame
1261-
eprintln!("[DEBUG] execute_index_query: before query.collect()");
12621259
let results = query.collect();
1263-
eprintln!(
1264-
"[DEBUG] execute_index_query: after query.collect(), count={}",
1265-
results.len()
1266-
);
1267-
eprintln!("[DEBUG] execute_index_query: before results_to_dataframe");
1268-
let df = results_to_dataframe(index, &results, resolve_paths);
1269-
eprintln!("[DEBUG] execute_index_query: after results_to_dataframe");
1270-
df
1260+
results_to_dataframe(index, &results, resolve_paths)
12711261
}
12721262

12731263
/// Convert `IndexQuery` results to a `DataFrame` for output compatibility.
@@ -1477,10 +1467,8 @@ fn results_to_dataframe(
14771467
Series::new("tree_allocated".into(), tree_allocated_values).into_column(),
14781468
];
14791469

1480-
eprintln!("[DEBUG] results_to_dataframe: before DataFrame::new_infer_height");
14811470
let mut df = uffs_mft::DataFrame::new_infer_height(columns)
14821471
.map_err(|err| anyhow::anyhow!("Failed to create DataFrame: {err}"))?;
1483-
eprintln!("[DEBUG] results_to_dataframe: after DataFrame::new_infer_height");
14841472

14851473
// Tree metrics are already computed in MftIndex and included in the columns
14861474
// above! No need to recompute them here - this was the missed optimization.
@@ -1492,16 +1480,12 @@ fn results_to_dataframe(
14921480
// NOTE: apply_directory_treesize uses polars .lazy().collect() which with
14931481
// the new_streaming feature triggers tokio internally. We use block_in_place
14941482
// to allow this blocking operation within the async context.
1495-
eprintln!("[DEBUG] results_to_dataframe: before apply_directory_treesize");
14961483
df = tokio::task::block_in_place(|| uffs_core::apply_directory_treesize(&df))
14971484
.map_err(|err| anyhow::anyhow!("Failed to apply directory treesize: {err}"))?;
1498-
eprintln!("[DEBUG] results_to_dataframe: after apply_directory_treesize");
14991485

15001486
// Add path_only column (directory portion of path)
1501-
eprintln!("[DEBUG] results_to_dataframe: before add_path_only_column");
15021487
df = uffs_core::add_path_only_column(&df)
15031488
.map_err(|err| anyhow::anyhow!("Failed to add path_only column: {err}"))?;
1504-
eprintln!("[DEBUG] results_to_dataframe: after add_path_only_column");
15051489

15061490
Ok(df)
15071491
}

crates/uffs-core/src/index_search.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -802,9 +802,11 @@ impl<'a> IndexQuery<'a> {
802802
stream_idx: u16,
803803
cached_path: Option<String>,
804804
) -> SearchResult {
805-
let Some(stream) = index.get_stream_at(record, stream_idx) else {
806-
return result;
807-
};
805+
// Get stream info, falling back to first_stream if not found
806+
// This handles cases where stream_count is higher than actual stored streams
807+
let stream = index
808+
.get_stream_at(record, stream_idx)
809+
.unwrap_or(&record.first_stream);
808810

809811
// Use cached path for primary name (idx 0), build for hard links
810812
let mut base_path = if name_idx == 0 {

0 commit comments

Comments
 (0)