Releases: umpire274/rBackup
v0.7.0
📋 Changelog
All notable changes to the rbackup project will be documented in this file.
[0.7.0] - 2026-02-23
✨ Added
-d, --deltaflag for delta-only copy mode.- Byte-based progress bar (replaces file-count progress).
- Advanced
--show-skippedoption with explicit precedence over--delta.
🔄 Changed
- 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
🛠 Refactored
- Two-phase copy architecture (plan → execute).
- Logging context now implements
Default. ShowSkippednow derivesDefaultwith#[default]variant (clippy-clean).
🧪 Fixed
- Doctest updated for new
copy_incrementalsignature. - Resolved
LogContextmissing field errors in tests. - Removed duplicate
deltafield in CLI definition.
[0.6.1] - 2025-10-27
Added
- 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
Changed
- Build process updated to include the new embedded icon during
cargo build --release.
Notes
- The
.icofile resides under theassets/directory together with other project resources. - No functional or CLI changes — this release is a visual enhancement only.
Documentation
- 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.
[v0.6.0] - 2025-10-11
🚀 Highlights
- 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.
🧾 Logging & UX
- 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.
🔧 Fixes & Maintenance
- 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/).
📝 Documentation
- 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.
[v0.5.1] - 2025-10-01
🔧 Change
- 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.
[v0.5.0] - 2025-10-01
This release closes GitHub issue #3 — fixes and improvements described below.
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.4.0] - 2025-10-01
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.3.1] - 2025-09-12
🚀 Improvements
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
🔧 Code Cleanup
- Deleted delay between one copy and the next one
- Deleted unused create imports
[v0.3.0] - 2025-09-10
🚀 Features
- Added absolute path to name of copying file
- Added message
Skipped.orCopied.at the end of each file name
🐛 Bug Fixes
- Fixed bug that prevented skipping of already existing files in destination directory
- Fixed the process of copy/skip file graphically
🔧 Code Cleanup
- Deleted parameter
-g(no longer necessary)
📦 Miscellaneous
- Modified format of starting and ending backup messages
- Commented out unused functions
[0.2.8] – 2025-07-23
✅ Fixed
- 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.
###...
v0.6.1
📋 Changelog
All notable changes to the rbackup project will be documented in this file.
[0.6.1] - 2025-10-27
Added
- 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
Changed
- Build process updated to include the new embedded icon during
cargo build --release.
Notes
- The
.icofile resides under theassets/directory together with other project resources. - No functional or CLI changes — this release is a visual enhancement only.
Documentation
- 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.
[v0.6.0] - 2025-10-11
🚀 Highlights
- 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.
🧾 Logging & UX
- 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.
🔧 Fixes & Maintenance
- 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/).
📝 Documentation
- 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.
[v0.5.1] - 2025-10-01
🔧 Change
- 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.
[v0.5.0] - 2025-10-01
This release closes GitHub issue #3 — fixes and improvements described below.
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.4.0] - 2025-10-01
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.3.1] - 2025-09-12
🚀 Improvements
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
🔧 Code Cleanup
- Deleted delay between one copy and the next one
- Deleted unused create imports
[v0.3.0] - 2025-09-10
🚀 Features
- Added absolute path to name of copying file
- Added message
Skipped.orCopied.at the end of each file name
🐛 Bug Fixes
- Fixed bug that prevented skipping of already existing files in destination directory
- Fixed the process of copy/skip file graphically
🔧 Code Cleanup
- Deleted parameter
-g(no longer necessary)
📦 Miscellaneous
- Modified format of starting and ending backup messages
- Commented out unused functions
[0.2.8] – 2025-07-23
✅ Fixed
- 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.
Notes
- No functional changes for macOS and Linux users.
- Verified correct CLI behavior with combined
--graph,--log, and--timestampoptions.
[0.2.7] – 2025-06-26
✨ Changed
- 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.
Notes
- The
--test_uiflag is still intended for internal testing only. - No functional changes for end users in normal usage.
[0.2.6] - 2025-06-24
Added
- Introduced the
-T/--test_uiparameter (hidden from help) to preview progress bar behavior in CLI.
Changed
- 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)
Notes
- This version introduces no functional changes for end users.
- Th...
v0.6.0
📋 Changelog
All notable changes to the rbackup project will be documented in this file.
[v0.6.0] - 2025-10-11
🚀 Highlights
- 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.
🧾 Logging & UX
- 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.
🔧 Fixes & Maintenance
- 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/).
📝 Documentation
- 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.
[v0.5.1] - 2025-10-01
🔧 Change
- 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.
[v0.5.0] - 2025-10-01
This release closes GitHub issue #3 — fixes and improvements described below.
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.4.0] - 2025-10-01
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.3.1] - 2025-09-12
🚀 Improvements
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
🔧 Code Cleanup
- Deleted delay between one copy and the next one
- Deleted unused create imports
[v0.3.0] - 2025-09-10
🚀 Features
- Added absolute path to name of copying file
- Added message
Skipped.orCopied.at the end of each file name
🐛 Bug Fixes
- Fixed bug that prevented skipping of already existing files in destination directory
- Fixed the process of copy/skip file graphically
🔧 Code Cleanup
- Deleted parameter
-g(no longer necessary)
📦 Miscellaneous
- Modified format of starting and ending backup messages
- Commented out unused functions
[0.2.8] – 2025-07-23
✅ Fixed
- 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.
Notes
- No functional changes for macOS and Linux users.
- Verified correct CLI behavior with combined
--graph,--log, and--timestampoptions.
[0.2.7] – 2025-06-26
✨ Changed
- 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.
Notes
- The
--test_uiflag is still intended for internal testing only. - No functional changes for end users in normal usage.
[0.2.6] - 2025-06-24
Added
- Introduced the
-T/--test_uiparameter (hidden from help) to preview progress bar behavior in CLI.
Changed
- 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)
Notes
- 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.
[0.2.5] – 2025-06-18
✨ Added
- 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
🛠️ Improvements
- Code split into
main.rsandutils.rs - Uses
clap,indicatif,rayon,walkdir,crossterm - Embeds
translations.jsonat compile time - Windows: The el...
v0.5.1
📋 Changelog
All notable changes to the rbackup project will be documented in this file.
[v0.5.1] - 2025-10-01
🔧 Change
- 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.
[v0.5.0] - 2025-10-01
This release closes GitHub issue #3 — fixes and improvements described below.
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.4.0] - 2025-10-01
🚀 New features
- 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.
🧾 Logging & UX
- 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.
🔧 Refactor & robustness
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.
✅ Fixes
- 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.
🧪 Tests
- Added integration tests under
tests/to exercise exclude matching,is_newerlogic and dry-run semantics.
[v0.3.1] - 2025-09-12
🚀 Improvements
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
🔧 Code Cleanup
- Deleted delay between one copy and the next one
- Deleted unused create imports
[v0.3.0] - 2025-09-10
🚀 Features
- Added absolute path to name of copying file
- Added message
Skipped.orCopied.at the end of each file name
🐛 Bug Fixes
- Fixed bug that prevented skipping of already existing files in destination directory
- Fixed the process of copy/skip file graphically
🔧 Code Cleanup
- Deleted parameter
-g(no longer necessary)
📦 Miscellaneous
- Modified format of starting and ending backup messages
- Commented out unused functions
[0.2.8] – 2025-07-23
✅ Fixed
- 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.
Notes
- No functional changes for macOS and Linux users.
- Verified correct CLI behavior with combined
--graph,--log, and--timestampoptions.
[0.2.7] – 2025-06-26
✨ Changed
- 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.
Notes
- The
--test_uiflag is still intended for internal testing only. - No functional changes for end users in normal usage.
[0.2.6] - 2025-06-24
Added
- Introduced the
-T/--test_uiparameter (hidden from help) to preview progress bar behavior in CLI.
Changed
- 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)
Notes
- 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.
[0.2.5] – 2025-06-18
✨ Added
- 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
🛠️ Improvements
- 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.
Notes
- This improves portability and avoids UAC prompts when not needed.
[0.1.0] - 2025-06-10
🧱 Initial release
- 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
rbackup v0.3.1
🚀 Improvements
- Cleaning the screen in case the copy message took more than one row in output
- Changed the output message when copying to correct punctuation
🔧 Code Cleanup
- Deleted delay between one copy and the next one
- Deleted unused create imports
rbackup v0.3.0
✅ Summary
This PR merges the v0.3.0 development branch into master.
✨ New Features
- Add dynamic progress bar with terminal position detection
- Show
CopiedandSkippedfile status with absolute paths - Ensure progress bar stays pinned to the bottom
- Auto-scroll file list when terminal is full
🐛 Fixes
- Fix
is_newer()logic for correct incremental copy - Fix terminal redraw issues and duplicated output
- Clean removal of unused
-gflag - CI fixes: Clippy compliance, cleanup of workflows
🔄 Other
- Removed requirement for administrator privileges on Windows
rbackup v0.2.8
🆕 Version 0.2.8 Highlights
- ✅ Fixed: The program no longer requires administrator privileges on Windows (previously caused a blocking error on launch).
- 🧹 Removed all Windows-specific elevation logic (
elevator.rs) for improved cross-platform compatibility. - 🔧 Fixed missing
clapderive macro and updated command-line argument definitions across all platforms. - 🛠️ Improved CI compatibility for Windows, Linux, and macOS builds.
This version is focused on improving user experience and compatibility, especially on Windows systems, while preserving CLI behavior across all environments.
rbackup v0.2.7
🛠 rbackup 0.2.7 – Internal Improvements
This release introduces internal improvements for development and localization, without functional changes to the end-user experience.
✨ Changes
- Enhanced the CLI test progress bar via
--test_ui, now showing file-by-file details and accurate global progress. - Centralized use of
translations.jsonfor all localized messages across the app.
This version is functionally identical to 0.2.6 from a user’s perspective. The
--test_uiflag remains hidden and is intended only for development.
rbackup v0.2.6
🔧 Maintenance Release – v0.2.6
This release introduces a hidden --test_ui flag intended for internal development and testing of the command-line progress interface.
✨ Highlights
- ➕ Added
--test_uioption (hidden from help, for developer use only) - 🧹 Codebase refactored and formatted (
cargo fmt) - ✅ All
cargo clippywarnings resolved - 🧪 Build successfully tested on:
- Windows
- macOS (Intel & Apple Silicon)
- Ubuntu Linux
Note: No functional changes for end users.
rbackup v0.2.5
📦 rbackup v0.2.5
🔄 What's Changed
- ✅ Windows elevation refactored:
rbackup now requests Administrator privileges at runtime using thewindowscrate, only when required.
No more manifest embedding, and no more unnecessary UAC prompts when using--helpor--version.
📌 Highlights
- ✅ Elevation deferred after argument parsing
- ✅ Portable binary with no
.rcor.manifestneeded - 🔐 Improved privilege management logic
🇮🇹 Novità in breve
- ✅ Su Windows, la richiesta di privilegi di amministratore avviene ora dopo la verifica dei parametri, ed è gestita a runtime tramite il crate
windows - 📦 Nessun manifest
.rcrichiesto: binario più portabile
🔐 Signature & Hash
All release archives are:
- 🧾 Signed with GPG (
.ascfiles) - 📑 Provided with SHA256 checksums
You can verify with:
gpg --verify rbackup-0.2.5-<target>.tar.gz.asc rbackup-0.2.5-<target>.tar.gz
sha256sum -c rbackup-0.2.5-<target>.sha256