Repository navigation
Conversation
The audit now also returns the demos without copies and the folders it walked. Consolidate plans in native::demo_consolidate (clash names with _2/_3, flat or kept subfolders, game-folder demos stay unless ticked, free space for copies between drives), then moves each group's kept copy and every single, recycles the other copies, logs the moves for Undo, and moves each demo's analyzer cache entry with it. Moves between drives copy with byte progress and Cancel, keep the modified time, check the size, then delete the original. The open project's queue follows moved demos (project_demos.js relocateMovedDemos). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Needs the latest fix/auditor-table-style merged in: #871 gained several commits today (one folder list, Split Maps rework, keep-by-folder rename, footer per tab), so this branch now conflicts with its base. Left for after 0.2.0; resolve when picking it up. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Caught up with #871: merged The only conflict was Local results (stacked PR, so no CI until #871 merges):
🤖 Generated with Claude Code |
Release note: New: The Demo Auditor's Duplicates tab can move every demo it found into one folder, recycling the extra copies on the way, with Undo.
Closes #872
Stacked on #871 (
fix/auditor-table-style). CI doesn't run on a PR into a feature branch (ci.ymlonly runs for PRs intodev/main); it runs once #871 merges and GitHub retargets this todev. Local results are below.What it does
A Consolidate… button beside the duplicates results opens a small panel:
dodfolder (the audit'sInUse::GameFolder) stay where they are, and so do copies there.consolidate_plan), and the run plans again from the same request, so the preview is never trusted as the plan.native::sys::recycle_bin). Different demos with one name get_2,_3. A move never replaces a file.demo_consolidate_logs(likedemo_rename_logs), saved every 25 moves so a crash part-way still leaves an Undo.project_demos.jsrelocateMovedDemos, the samerelocateDemothe Locate flow uses, take index too), on the run and on Undo.move_analyzer_cache_entry, as Rename Demos does).Backend:
native/src/demo_consolidate.rs(plan, run, undo) andstudio/src-tauri/src/consolidate_manager.rs(async commands withspawn_blocking, one job at a time). The audit result now also lists the demos with no copies (singles) and the folders it walked (roots). Frontend:audit_consolidate.js(pure) andaudit_consolidate_ui.js(createAuditConsolidatefactory), with strings instrings.js.Decisions for the user
Where the issue left a choice open, I picked the simpler, safer option:
C:\Users\x\Demos\a.demgoes to<dest>\Users\x\Demos\a.dem. A demo under no audited folder goes straight into the destination.dodfolder stays put, but its copies elsewhere are still recycled. Copies inside adodfolder are never recycled unless ticked.Tests
demo_consolidatecovering the plan (clash names_2/_3against each other and against files on disk, flat vs kept subfolders under the deepest root, demos already there, which files move or get recycled, the game-folder rule both ways, free space for cross-drive bytes only, no destination), plus a real move, log and Undo, a copy that keeps mtime and refuses to overwrite, a cancelled copy leaving nothing, a cancelled Undo keeping its log. One more inaudit_managerforsingles_of.audit_consolidate.test.js(request building, preview and no-space text, progress lines, singles after a delete).duplicates.spec.jsadds three tests: preview, confirm, progress, queue update and Undo; Cancel; no space.Local results (Windows; not run in the game or the app):
cargo test --workspace --locked(debug off): all passrustup run 1.98.1 cargo fmt --all --check: cleanrustup run 1.98.1 cargo clippy --workspace --all-targets --locked -- -D warnings: cleannpm run test:unit: 595 passedduplicates,demo-rename,split-maps: 28 passedNot yet tried on real drives: a 100+ GB move between drives, or the Recycle Bin step on real copies.
🤖 Generated with Claude Code