Skip to content

Latest commit

 

History

History
363 lines (243 loc) · 13.1 KB

File metadata and controls

363 lines (243 loc) · 13.1 KB

📋 Changelog

📖 Back to README

All notable changes to the rbackup project will be documented in this file.

[0.7.1] - 2026-04-27

🐛 Fixed

  • Fixed packaging error during cargo package / cargo publish caused by missing embedded asset:
    • assets/translations.json is now correctly included in the crate
    • Resolved runtime failure in include_str!("../assets/translations.json")

📦 Packaging

  • Added assets/** to package.include in Cargo.toml
  • Ensured all required runtime assets are bundled in the published crate

🔄 Dependencies

  • Updated several dependencies to newer compatible versions

🧠 Notes

  • No functional changes to application behavior
  • No breaking changes
  • This is a maintenance release focused on packaging correctness and dependency updates

[0.7.0] - 2026-02-23

✨ Added

  • -d, --delta flag for delta-only copy mode.
  • Byte-based progress bar (replaces file-count progress).
  • Advanced --show-skipped option with explicit precedence over --delta.

🔄 Changed

  • Default copy now shows both copied and skipped items.
  • In --delta mode, 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:
    • --delta sets implicit show-skipped=never
    • --show-skipped explicitly overrides --delta

🛠 Refactored

  • Two-phase copy architecture (plan → execute).
  • Logging context now implements Default.
  • ShowSkipped now derives Default with #[default] variant (clippy-clean).

🧪 Fixed

  • Doctest updated for new copy_incremental signature.
  • Resolved LogContext missing field errors in tests.
  • Removed duplicate delta field 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 winresource build dependency.
    • Provides a consistent visual identity in Windows Explorer and the taskbar.

Changed

  • Build process updated to include the new embedded icon during cargo build --release.

Notes

  • The .ico file resides under the assets/ 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.md titled “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 --exclude behavior and documentation (see README) with clearer examples, zsh/bsh quoting tips and use-cases.
  • Improved translations workflow and added scripts/translations_tool features: template generation, apply with backup and consistency checks.
  • CI/workflows improvements and permissions fixes; ensured rustfmt and clippy are run in the lint job and release workflow extracts version from Cargo.toml.

🧾 Logging & UX

  • Ensured skipped files are reported both to console (UI) and to the log file when --log is 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.0 and 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.md describing translation keys, placeholder usage, and how to add new languages.
  • Added a translations consistency test: tests/translations_consistency.rs to 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 check and cargo test locally; 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-exclude option to match patterns against absolute source paths.
    • --ignore-case option 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-run behavior 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 LogContext carries 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 a Result<Option<Logger>> instead of panicking on errors; logging file creation failures is handled gracefully.
  • copy_incremental() now streams WalkDir results (no longer builds an in-memory Vec of all files), reducing memory usage for large trees.
  • Centralized and simplified CLI parsing via a shared cli module (src/cli.rs) so the binary and tests reuse the same definitions.
  • Split test code out of src/ into tests/ integration tests and added tests for is_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_newer logic 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-exclude option to match patterns against absolute source paths.
    • --ignore-case option 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-run behavior 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 LogContext carries 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 a Result<Option<Logger>> instead of panicking on errors; logging file creation failures is handled gracefully.
  • copy_incremental() now streams WalkDir results (no longer builds an in-memory Vec of all files), reducing memory usage for large trees.
  • Centralized and simplified CLI parsing via a shared cli module (src/cli.rs) so the binary and tests reuse the same definitions.
  • Split test code out of src/ into tests/ integration tests and added tests for is_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_newer logic 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. or Copied. 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.rs was 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 --timestamp options.

[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_ui flag 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_ui parameter (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 clippy and CI build checks across:
    • macOS (Intel & Apple Silicon)
    • Ubuntu Linux
    • Windows (MSVC)

Notes

  • This version introduces no functional changes for end users.
  • The --test_ui option 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: --graph option to display progress visually
  • Logging: --log <file> option to write output to a log file
  • Quiet mode: --quiet to suppress all console messages
  • Timestamping: --timestamp to 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.rs and utils.rs
  • Uses clap, indicatif, rayon, walkdir, crossterm
  • Embeds translations.json at compile time
  • Windows: The elevation to Administrator privileges is now managed dynamically at runtime using the windows crate, 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 rBackup for one-way incremental backup
  • Inspired by robocopy and rsync
  • Command line arguments for source and destination
  • First working build for Windows only

🔗 Back to the project: GitHub - umpire274/rbackup