All notable changes to the rbackup project will be documented in this file.
- Fixed packaging error during
cargo package/cargo publishcaused by missing embedded asset:assets/translations.jsonis now correctly included in the crate- Resolved runtime failure in
include_str!("../assets/translations.json")
- Added
assets/**topackage.includeinCargo.toml - Ensured all required runtime assets are bundled in the published crate
- Updated several dependencies to newer compatible versions
- No functional changes to application behavior
- No breaking changes
- This is a maintenance release focused on packaging correctness and dependency updates
-d, --deltaflag for delta-only copy mode.- Byte-based progress bar (replaces file-count progress).
- Advanced
--show-skippedoption with explicit precedence over--delta.
- Default
copynow shows both copied and skipped items. - In
--deltamode, only copied items are shown by default. - Progress bar now reflects:
- Total bytes processed (full scan mode)
- Total bytes to copy (delta mode)
- Logging behavior refactored with clear precedence rules:
--deltasets implicitshow-skipped=never--show-skippedexplicitly overrides--delta
- Two-phase copy architecture (plan → execute).
- Logging context now implements
Default. ShowSkippednow derivesDefaultwith#[default]variant (clippy-clean).
- Doctest updated for new
copy_incrementalsignature. - Resolved
LogContextmissing field errors in tests. - Removed duplicate
deltafield in CLI definition.
- Introduced new application icon (
assets/rbackup.ico) for Windows builds.- The icon is now automatically embedded into the executable using the
winresourcebuild dependency. - Provides a consistent visual identity in Windows Explorer and the taskbar.
- The icon is now automatically embedded into the executable using the
- Build process updated to include the new embedded icon during
cargo build --release.
- The
.icofile resides under theassets/directory together with other project resources. - No functional or CLI changes — this release is a visual enhancement only.
- Added a new section in
README.mdtitled “Maintainers: Manual Release Trigger”, describing how to manually rebuild or recreate a release from GitHub Actions. Includes CLI usage (gh workflow run) and bilingual inline comments for maintainers.
- Added a dedicated Copilot onboarding file (
.github/copilot-instructions.md) to speed up automated code agents and reduce PR churn. - Further enhanced
--excludebehavior and documentation (see README) with clearer examples, zsh/bsh quoting tips and use-cases. - Improved translations workflow and added
scripts/translations_toolfeatures: template generation, apply with backup and consistency checks. - CI/workflows improvements and permissions fixes; ensured
rustfmtandclippyare run in the lint job and release workflow extracts version fromCargo.toml.
- Ensured skipped files are reported both to console (UI) and to the log file when
--logis used. Log lines include the exclude pattern that caused a skip when applicable. - UI output serialisation to avoid progress-bar overwrite; introduced a single-threaded UI writer and a scroll buffer for per-file messages.
- Bumped crate version to
0.6.0and cleaned up release packaging scripts. - Minor refactors for robustness around logger/mutex handling and improved tests coverage (moved tests into
tests/).
- Added comprehensive English API documentation across
src/(docstrings and translated comments), converting existing Italian comments to English. - Added usage examples / small usage cases for common functions (e.g.
copy_incremental,build_exclude_matcher). - Created
assets/TRANSLATIONS.mddescribing translation keys, placeholder usage, and how to add new languages. - Added a translations consistency test:
tests/translations_consistency.rsto ensure all language entries share the same set of keys. - Added concrete use-case examples to
README.md(CLI copy/config examples and translations tool workflow). - No functional changes: documentation and tests only.
- Validation: ran
cargo checkandcargo testlocally; all tests passed.
- Updated the end-of-copy message to include the total number of files processed (copied + skipped) in addition to the separate counts for copied and skipped files. This helps quickly see the overall scope of the operation.
This release closes GitHub issue #3 — fixes and improvements described below.
- Added enhanced exclude support for
copy:--exclude <PATTERN>accepts glob patterns applied by default to the path relative to the source directory.--absolute-excludeoption to match patterns against absolute source paths.--ignore-caseoption for case-insensitive exclude matching.- Exclude matching now also tests the file basename (filename only), solving cases like
$RECYCLE.BIN,Thumbs.db, etc.
- Added
--dry-runbehavior improvements: dry-run now simulates copies and reports counts without touching the destination.
- Files that are skipped (either excluded by a pattern or because destination is newer) are now logged both to stdout
and to the log file specified with
--log. - Logs include the exclude pattern that caused the skip (when applicable), making it easier to diagnose why files were skipped.
- Timestamps in logs are configurable and the
LogContextcarries the timestamp format.
Config::load_or_default()added to provide a safe fallback when the configuration file is missing or malformed.create_logger()now returns aResult<Option<Logger>>instead of panicking on errors; logging file creation failures is handled gracefully.copy_incremental()now streamsWalkDirresults (no longer builds an in-memory Vec of all files), reducing memory usage for large trees.- Centralized and simplified CLI parsing via a shared
climodule (src/cli.rs) so the binary and tests reuse the same definitions. - Split test code out of
src/intotests/integration tests and added tests foris_newer, exclude handling, and dry-run behavior. - Improved handling of mutex poisoning when writing to the log file; flusher calls added to ensure buffered logs are persisted.
- Fixed cases where some exclude patterns (basename patterns like
$RECYCLE.BIN) were not matched. - Fixed logging so skipped files are included in the log file output.
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
- Added enhanced exclude support for
copy:--exclude <PATTERN>accepts glob patterns applied by default to the path relative to the source directory.--absolute-excludeoption to match patterns against absolute source paths.--ignore-caseoption for case-insensitive exclude matching.- Exclude matching now also tests the file basename (filename only), solving cases like
$RECYCLE.BIN,Thumbs.db, etc.
- Added
--dry-runbehavior improvements: dry-run now simulates copies and reports counts without touching the destination.
- Files that are skipped (either excluded by a pattern or because destination is newer) are now logged both to stdout
and to the log file specified with
--log. - Logs include the exclude pattern that caused the skip (when applicable), making it easier to diagnose why files were skipped.
- Timestamps in logs are configurable and the
LogContextcarries the timestamp format.
Config::load_or_default()added to provide a safe fallback when the configuration file is missing or malformed.create_logger()now returns aResult<Option<Logger>>instead of panicking on errors; logging file creation failures is handled gracefully.copy_incremental()now streamsWalkDirresults (no longer builds an in-memory Vec of all files), reducing memory usage for large trees.- Centralized and simplified CLI parsing via a shared
climodule (src/cli.rs) so the binary and tests reuse the same definitions. - Split test code out of
src/intotests/integration tests and added tests foris_newer, exclude handling, and dry-run behavior. - Improved handling of mutex poisoning when writing to the log file; flusher calls added to ensure buffered logs are persisted.
- Fixed cases where some exclude patterns (basename patterns like
$RECYCLE.BIN) were not matched. - Fixed logging so skipped files are included in the log file output.
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
- Deleted delay between one copy and the next one
- Deleted unused create imports
- Added absolute path to name of copying file
- Added message
Skipped.orCopied.at the end of each file name
- Fixed bug that prevented skipping of already existing files in destination directory
- Fixed the process of copy/skip file graphically
- Deleted parameter
-g(no longer necessary)
- Modified format of starting and ending backup messages
- Commented out unused functions
- Fixes Issue #1: "This program must be run as administrator" – now the application runs on Windows without requiring elevated privileges.
- Code cleanup: removed Windows-specific elevation code (
elevator.rswas removed). - CI fixes: corrected GitHub Actions workflow for all platforms.
- Macro derive fix: added missing
use clap::Parser;and corrected all#[arg(...)]and#[command(...)]attributes.
- No functional changes for macOS and Linux users.
- Verified correct CLI behavior with combined
--graph,--log, and--timestampoptions.
- Improved the CLI test progress bar (
--test_ui) with better layout and live file display during test runs. - Centralized translation system now applied across all user-facing messages via
translations.json.
- The
--test_uiflag is still intended for internal testing only. - No functional changes for end users in normal usage.
- Introduced the
-T/--test_uiparameter (hidden from help) to preview progress bar behavior in CLI.
- Refactored code for improved structure and readability.
- Adjusted formatting and logic to satisfy
cargo clippyand CI build checks across:- macOS (Intel & Apple Silicon)
- Ubuntu Linux
- Windows (MSVC)
- This version introduces no functional changes for end users.
- The
--test_uioption is intended solely for internal development and will not appear in standard help.
- Multilanguage support: English and Italian (
--lang) - Progress bar:
--graphoption to display progress visually - Logging:
--log <file>option to write output to a log file - Quiet mode:
--quietto suppress all console messages - Timestamping:
--timestampto prefix messages with date and time - Final stats: number of files copied and skipped
- Error handling: log permission denied or locked file errors
- Localized messages via
translations.json - Cross-platform support: Windows, macOS, Linux
- Code split into
main.rsandutils.rs - Uses
clap,indicatif,rayon,walkdir,crossterm - Embeds
translations.jsonat compile time - Windows: The elevation to Administrator privileges is now managed dynamically at runtime using the
windowscrate, instead of relying on embedded manifest files. - The request for elevation now occurs only when required, after argument validation and outside help/version/test-only modes.
- This improves portability and avoids UAC prompts when not needed.
- Created initial project
rBackupfor one-way incremental backup - Inspired by
robocopyandrsync - Command line arguments for source and destination
- First working build for Windows only
🔗 Back to the project: GitHub - umpire274/rbackup