# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.0.0] - 2025-02-10 ### ⚠️ BREAKING CHANGES - **Recursion is now opt-in**: By default, `ntu` only processes the specified paths and their immediate children. Use `-r`/`--recursive` flag to enable recursive directory traversal. - Migration: Add `-r` to existing commands to preserve v0.x behavior ### Added - **`--conf ` option**: Specify a single configuration file, bypassing the default hierarchy (/etc → ~/.config → ./). Errors if file doesn't exist. - **`-r/--recursive` flag**: Enable recursive directory processing ### Changed - Default behavior is now non-recursive (use `-r` for recursive processing) - All integration tests updated to explicitly use `-r` flag ### Migration Guide ```bash # Old command (v0.x - always recursive): ntu /path/to/files # New equivalent (v1.x - explicit recursion): ntu -r /path/to/files ``` ## [0.3.0] - 2025-02-10 ### Added - **CI/CD Pipeline**: Automated testing and release builds via GitHub Actions - CI workflow: Tests on Rust stable and beta, Clippy, rustfmt checks - Release workflow: Multi-platform builds (Linux x86_64, Linux musl, macOS Intel, macOS ARM) - **Shell Completions**: Auto-completion support for all major shells - Bash completion (`completions/ntu.bash`) - Zsh completion (`completions/_ntu`) - Fish completion (`completions/ntu.fish`) - **Manpage**: Professional manual page (`man/ntu.1`) with full documentation - **Colored Output**: Terminal colors for better visual feedback - Green for successful renames - Yellow for dry-run mode - Red for errors - Cyan/bold for statistics - `--no-color` flag to disable colors - **Integration Tests**: 13 comprehensive integration tests using `assert_cmd` - **README**: Installation instructions for pre-built binaries, badges (CI, Release, Version, License) ### Changed - Improved `.gitignore` with better organization - Better error messages with colored output - Updated test framework to use modern `cargo_bin!` macro ### Fixed - Removed unused `warn` import ## [0.2.0] - 2025-02-10 ### Added - **CLI**: `--dry-run` as primary option (with `--no-changes` as deprecated alias for backward compatibility) - **CLI**: `--special` flag to process symlinks and special files (normally skipped) - **Smart Default Excludes**: Automatically ignore `.git`, `.svn`, `node_modules`, `.cache`, `__pycache__` - **Double Extensions**: Proper handling of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lz`, `.tar.Z` - **Parallel Processing**: Using `rayon` for parallel filename cleaning when processing ≥100 files - **Write Permission Checks**: Check write permissions before attempting rename operations - **Unit Tests**: 9 comprehensive tests for `clean_filename()` covering edge cases ### Fixed - **Critical Bug**: Hidden files (like `.gitignore`) are no longer incorrectly renamed to `unnamed.xxx` - Leading dot in hidden files is now correctly preserved - Fixed all clippy warnings ### Changed - Binary renamed from `NameToUnix` to `ntu` (shorter CLI usage) - Improved error messages for permission issues - Better handling of hidden files with spaces (`.my config` → `.my_config`) ### Performance - Parallel processing with rayon for large directory trees (threshold: 100 files) - Optimized regex patterns using `once_cell::Lazy` ## [0.1.0] - 2025-03-07 ### Added - Initial release - Basic filename sanitization - Configurable replacements via TOML - Recursive directory processing - Exclude patterns support - German umlaut conversion - Special identifier preservation (C++, C#)