diff --git a/changelog.md b/changelog.md index 0c7a88c1..b92eed73 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,55 @@ 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). +## 2.5.10 - 2026-01-30 + +### Added +* Implement Feature Request: Add configuration option 'disable_version_check' (#3530) +* Implement Feature Request: Add automatic debug logging output redaction (#3549) + +### Changed +* Improve --resync warning prompt for clarity and safer operation (#3562) +* Updated Dockerfiles to support newer distributions and associated components (#3565) +* FreeBSD: Select inotify type (libc or libnotify) based on FreeBSD version (#3579) +* Update that --force and --force-sync cannot be used with --resync (#3593) + +### Fixed +* Fix Bug: Fix timestamp and hash evaluation to avoid unnecessary file version creation online (#3526) +* Fix Bug: Fix that websocket do not work with Sharepoint libraries (#3533) +* Fix Bug: Fix that large files fail to download due operational timeout being exceeded (#3541) +* Fix Bug: Fix hash functions read efficiency to support 'on-demand' development work (#3544) +* Fix Bug: Fix that safeBackup crashes when attempting backing up a non-existent local path (#3545) +* Fix Bug: Fix to that the application only performs safeBackup() on deleted items only when a hash change is detected (#3546) +* Fix Bug: Prevent mis-configuration where 'recycle_bin_path' is inside 'sync_dir' (#3552) +* Fix Bug: Harden logging initialisation: fall back to home directory when log_dir is not writeable (#3555) +* Fix Bug: Ensure mkdirRecurse() is correctly wrapped in try block (#3566) +* Fix Bug: Fix that 'remove_source_files' does not remove the source file when the file already exists in OneDrive (#3572) +* Fix Bug: Enhance displayFileSystemErrorMessage() to include details of the actual path (#3574) +* Fix Bug: Enhance downloadFileItem() to ensure greater clarity on download failures (#3575) +* Fix Bug: Prevent malformed 'skip_dir' / 'skip_file' rules when using multiple config entries (#3576) +* Fix Bug: Detect and prevent 'skip_dir' / 'skip_file' rules shadowing 'sync_list' inclusions (#3577) +* Fix Bug: Fix 'skip_dir' and 'skip_file' shadow detection for rooted 'sync_list' paths (#3578) +* Fix Bug: Fix 'skip_dir' directory exclusion by normalising input paths before matching (#3580) +* Fix Bug: Fix testInternetReachability() function to ensure same curl options used in a consistent manner (#3581) +* Fix Bug: Fix performPermanentDelete() to ensure zero content length is set (#3585) +* Fix Bug: Fix safeRemove() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3586) +* Fix Bug: Fix safeRename() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3587) +* Fix Bug: Fix safeBackup() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3589) +* Fix Bug: Fix WebSocket reconnect cleanup to prevent GC finalisation crash (#3582) +* Fix Bug: Fix setLocalPathTimestamp() to retry on EINTR / EBUSY filesystem responses to support 'on-demand' development work (#3591) +* Fix Bug: Fix incorrect handling of failed safeRename() operations to support 'on-demand' development work (#3592) +* Fix Bug: Fix Docker entrypoint handling for non-root --user execution (#3602) +* Fix Bug: Fix getRemainingFreeSpaceOnline() and correctly handle zero data traversal events for quota tracking (#3618) +* Fix Bug: Fix getRemainingFreeSpaceOnline() for Business and SharePoint Accounts (#3621) +* Fix Bug: Fix OAuth authorisation code parsing and encoding during token redemption (#3625) +* Fix Bug: Fix Graph search(q=…) escaping for apostrophes (#3624) +* Fix Bug: Fix handling of 204 No Content responses for Microsoft Graph PATCH requests (#3620) + +### Updated +* Updated completion files to align to application functionality +* Updated documentation + + ## 2.5.9 - 2025-11-06 ### Fixed diff --git a/configure b/configure index 64270dc8..f7c1551d 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for onedrive v2.5.9. +# Generated by GNU Autoconf 2.69 for onedrive v2.5.10. # # Report bugs to . # @@ -579,8 +579,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='onedrive' PACKAGE_TARNAME='onedrive' -PACKAGE_VERSION='v2.5.9' -PACKAGE_STRING='onedrive v2.5.9' +PACKAGE_VERSION='v2.5.10' +PACKAGE_STRING='onedrive v2.5.10' PACKAGE_BUGREPORT='https://github.com/abraunegg/onedrive' PACKAGE_URL='' @@ -1231,7 +1231,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures onedrive v2.5.9 to adapt to many kinds of systems. +\`configure' configures onedrive v2.5.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1292,7 +1292,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of onedrive v2.5.9:";; + short | recursive ) echo "Configuration of onedrive v2.5.10:";; esac cat <<\_ACEOF @@ -1407,7 +1407,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -onedrive configure v2.5.9 +onedrive configure v2.5.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1424,7 +1424,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by onedrive $as_me v2.5.9, which was +It was created by onedrive $as_me v2.5.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2021,7 +2021,7 @@ $as_echo "no" >&6; } fi fi -PACKAGE_DATE="November 2025" +PACKAGE_DATE="January 2026" for ac_prog in dmd ldmd2 ldc2 gdmd gdc @@ -2673,7 +2673,12 @@ case "$(uname -s)" in bsd_inotify_LIBS="" ;; FreeBSD) - bsd_inotify_LIBS="-L/usr/local/lib -linotify" + if test "$(uname -U)" -gt 1500060; then : + bsd_inotify_LIBS="" +else + bsd_inotify_LIBS="-L/usr/local/lib -linotify" + +fi ;; OpenBSD) bsd_inotify_LIBS="-L/usr/local/lib/inotify -linotify" @@ -3348,7 +3353,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by onedrive $as_me v2.5.9, which was +This file was extended by onedrive $as_me v2.5.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3401,7 +3406,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -onedrive config.status v2.5.9 +onedrive config.status v2.5.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index fc5303bb..6a04a1ce 100644 --- a/configure.ac +++ b/configure.ac @@ -10,7 +10,7 @@ dnl - commit the changed files (configure.ac, configure) dnl - tag the release AC_PREREQ([2.69]) -AC_INIT([onedrive],[v2.5.9], [https://github.com/abraunegg/onedrive], [onedrive]) +AC_INIT([onedrive],[v2.5.10], [https://github.com/abraunegg/onedrive], [onedrive]) AC_CONFIG_SRCDIR([src/main.d]) @@ -21,7 +21,7 @@ dnl necessary programs: install, pkg-config AC_PROG_INSTALL PKG_PROG_PKG_CONFIG -PACKAGE_DATE="November 2025" +PACKAGE_DATE="January 2026" AC_SUBST([PACKAGE_DATE]) dnl Determine D compiler diff --git a/contrib/completions/complete.bash b/contrib/completions/complete.bash index 6437f001..3ebfc942 100644 --- a/contrib/completions/complete.bash +++ b/contrib/completions/complete.bash @@ -10,8 +10,8 @@ _onedrive() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - options='--check-for-nomount --check-for-nosync --cleanup-local-files --debug-https --disable-notifications --display-config --display-quota --display-sync-status --disable-download-validation --disable-upload-validation --display-running-config --download-only --dry-run --enable-logging --force --force-http-11 --force-sync --list-shared-items --local-first --logout -m --monitor --no-remote-delete --print-access-token --reauth --remove-source-files --resync --resync-auth --skip-dir-strict-match --skip-dot-files --skip-symlinks -s --sync --sync-root-files --sync-shared-files --upload-only -v+ --verbose --version -h --help --with-editing-perms' - argopts='--auth-files --auth-response --classify-as-big-delete --confdir --create-directory --create-share-link --destination-directory --get-O365-drive-id --get-file-link --get-sharepoint-drive-id --log-dir --modified-by --monitor-fullscan-frequency --monitor-interval --monitor-log-frequency --remove-directory --share-password --single-directory --skip-dir --skip-file --skip-size --source-directory --space-reservation --syncdir' + options='--check-for-nomount --check-for-nosync --cleanup-local-files --debug-https --disable-notifications --display-config --display-quota --display-sync-status --disable-download-validation --disable-upload-validation --display-running-config --download-only --dry-run --enable-logging --force --force-http-11 --force-sync --list-shared-items --local-first --logout -m --monitor --no-remote-delete --print-access-token --reauth --remove-source-files --remove-source-folders --resync --resync-auth --skip-dir-strict-match --skip-dot-files --skip-symlinks -s --sync --sync-root-files --sync-shared-files --upload-only -v+ --verbose --version -h --help --with-editing-perms' + argopts='--auth-files --auth-response --classify-as-big-delete --confdir --create-directory --create-share-link --destination-directory --download-file --file-fragment-size --get-O365-drive-id --get-file-link --get-sharepoint-drive-id --log-dir --modified-by --monitor-fullscan-frequency --monitor-interval --monitor-log-frequency --remove-directory --share-password --single-directory --skip-dir --skip-file --skip-size --source-directory --space-reservation --syncdir --threads' # Loop on the arguments to manage conflicting options for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do diff --git a/contrib/completions/complete.fish b/contrib/completions/complete.fish index e2e39bc6..b9eff57d 100644 --- a/contrib/completions/complete.fish +++ b/contrib/completions/complete.fish @@ -21,14 +21,16 @@ complete -c onedrive -l display-config -d "Display current config" complete -c onedrive -l display-quota -d "Display OneDrive quota" complete -c onedrive -l display-running-config -d "Display config used at startup" complete -c onedrive -l display-sync-status -d "Show current sync status" +complete -c onedrive -l download-file -d "Download a single file from Microsoft OneDrive" complete -c onedrive -l download-only -d "Only download remote changes" complete -c onedrive -l dry-run -d "Simulate sync without making changes" complete -c onedrive -l enable-logging -d "Enable logging to a file" +complete -c onedrive -l file-fragment-size -d "Specify the file fragment size for large file uploads (in MB)" complete -c onedrive -l force -d "Force delete on big delete detection" complete -c onedrive -l force-http-11 -d "Force HTTP 1.1 usage" complete -c onedrive -l force-sync -d "Force sync of specified folder" -complete -c onedrive -l get-O365-drive-id -d "Get Drive ID for O365 SharePoint (deprecated)" complete -c onedrive -l get-file-link -d "Get shareable link for a file" +complete -c onedrive -l get-O365-drive-id -d "Get Drive ID for O365 SharePoint (deprecated)" complete -c onedrive -l get-sharepoint-drive-id -d "Get Drive ID for SharePoint" complete -c onedrive -l help -d "Show help message" complete -c onedrive -l list-shared-items -d "List shared OneDrive items" @@ -45,6 +47,7 @@ complete -c onedrive -l print-access-token -d "Show access token" complete -c onedrive -l reauth -d "Reauthenticate client" complete -c onedrive -l remove-directory -d "Delete remote directory" complete -c onedrive -l remove-source-files -d "Remove uploaded local files" +complete -c onedrive -l remove-source-folders -d "Remove the local directory structure post successful file transfer" complete -c onedrive -l resync -d "Perform full resync" complete -c onedrive -l resync-auth -d "Confirm resync action" complete -c onedrive -l share-password -d "Password-protect shared link" @@ -58,12 +61,12 @@ complete -c onedrive -l skip-symlinks -d "Ignore symlinks" complete -c onedrive -l source-directory -d "Source path for move/rename" complete -c onedrive -l space-reservation -d "Reserve disk space (MB)" complete -c onedrive -l sync -d "Start sync operation" -complete -c onedrive -l sync-root-files -d "Sync root files with sync_list" -complete -c onedrive -l sync-shared-files -d "Sync shared business files" complete -c onedrive -l syncdir -d "Local sync directory" complete -c onedrive -l synchronize -d "Deprecated alias for --sync" +complete -c onedrive -l sync-root-files -d "Sync root files with sync_list" +complete -c onedrive -l sync-shared-files -d "Sync shared business files" +complete -c onedrive -l threads -d "Specify a value for the number of worker threads used for parallel upload and download operations" complete -c onedrive -l upload-only -d "Only upload local changes" complete -c onedrive -l verbose -d "Increase verbosity" complete -c onedrive -l version -d "Show version" complete -c onedrive -l with-editing-perms -d "Create read-write shared link" - diff --git a/contrib/completions/complete.zsh b/contrib/completions/complete.zsh index c74cfcd9..faf03d34 100644 --- a/contrib/completions/complete.zsh +++ b/contrib/completions/complete.zsh @@ -24,15 +24,18 @@ all_opts=( '--display-quota[Display the quota status of the client - no sync will be performed.]' '--display-running-config[Display options configured on application startup.]' '--display-sync-status[Display the sync status of the client - no sync will be performed.]' + '--download-file[Download a single file from Microsoft OneDrive]:file name:' '--download-only[Only download remote changes]' '--dry-run[Perform a trial sync with no changes made]' '--enable-logging[Enable client activity to a separate log file]' + '--file-fragment-size[Specify the file fragment size for large file uploads (in MB)]:MB:' '--force[Force the deletion of data when a '\''big delete'\'' is detected]' '--force-http-11[Force the use of HTTP 1.1 for all operations]' '--force-sync[Force a synchronization of a specific folder]' '--get-O365-drive-id[Query and return the Office 365 Drive ID for a given Office 365 SharePoint Shared Library]:site URL:' '--get-file-link[Display the file link of a synced file]:file name:' '--get-sharepoint-drive-id[Query and return the SharePoint Drive ID]:site URL:' + '--help[Show this help screen]' '--list-shared-items[List OneDrive Business Shared Items]' '--local-first[Synchronize from the local directory source first, before downloading changes from OneDrive.]' '--log-dir[Directory where logging output is saved]:log directory:_files -/' @@ -47,6 +50,7 @@ all_opts=( '--reauth[Reauthenticate the client with OneDrive]' '--remove-directory[Remove a directory on OneDrive - no sync will be performed.]:directory name:' '--remove-source-files[Remove source file after upload when using --upload-only]' + '--remove-source-folders[Remove the local directory structure post successful file transfer when using --upload-only --remove-source-files]' '--resync[Forget the last saved state, perform a full sync]' '--resync-auth[Approve the use of performing a --resync action]' '--share-password[Password to protect share link]:password:' @@ -64,12 +68,11 @@ all_opts=( '--sync-shared-files[Sync OneDrive Business Shared Files to the local filesystem]' '--syncdir[Specify the local directory used for synchronisation to OneDrive]:sync directory:_files -/' '--synchronize[Perform a synchronisation (deprecated)]' + '--threads[Number of threads to use for multi-threaded transfers]:N:' '--upload-only[Only upload to OneDrive, do not sync changes from OneDrive locally]' '--verbose[Print more details, useful for debugging (repeat for extra debugging)]' '--version[Print the version and exit]' '--with-editing-perms[Create a read-write shareable link for a file]' ) - _arguments -S "$all_opts[@]" && return 0 - diff --git a/contrib/spec/onedrive.spec.in b/contrib/spec/onedrive.spec.in index 606caf6a..1948ed19 100644 --- a/contrib/spec/onedrive.spec.in +++ b/contrib/spec/onedrive.spec.in @@ -37,7 +37,7 @@ BuildRequires: ldc >= %{ldc_minver} %endif Name: onedrive -Version: 2.5.9 +Version: 2.5.10 Release: 1%{?dist} Summary: OneDrive Client for Linux Group: System Environment/Network @@ -111,8 +111,20 @@ install -D -m 0644 contrib/systemd/onedrive.service %{buildroot}%{_userunitdir}/ /etc/init.d/onedrive %endif + %changelog -%changelog +* Fri Jan 20 2026 - 2.5.10-1 +- Release v2.5.10 with new features, bug fixes, and enhancements + +* Thu Nov 06 2025 - 2.5.9-1 +- Release v2.5.9 with new features, bug fixes, and enhancements + +* Wed Nov 05 2025 - 2.5.8-1 +- Release v2.5.8 with new features, bug fixes, and enhancements + +* Tue Sep 23 2025 - 2.5.7-1 +- Release v2.5.7 with new features, bug fixes, and enhancements + * Thu Jun 05 2025 - 2.5.6-1 - Release v2.5.6 with new features, bug fixes, and enhancements diff --git a/onedrive.1.in b/onedrive.1.in index a463a639..b4fdcf80 100644 --- a/onedrive.1.in +++ b/onedrive.1.in @@ -26,43 +26,54 @@ Designed for maximum flexibility and reliability, this powerful and highly confi .SH FEATURES .br -* Compatible with OneDrive Personal and OneDrive for Business, including access to Microsoft SharePoint Libraries +* Compatible with OneDrive Personal, OneDrive for Business, and Microsoft SharePoint Libraries .br -* Supports seamless access to shared folders and files across both OneDrive Personal and OneDrive for Business accounts +* Provides full support for shared folders and files across both Personal and Business accounts .br -* Supports near real-time processing of online changes via either WebSockets (native support) or webhooks (manual configuration required) -.br -* Supports single-tenant and multi-tenant applications -.br -* Supports Intune Single Sign-On (SSO) authentication via the Microsoft Identity Device Broker (D-Bus interface) -.br -* Supports OAuth2 Device Authorisation Flow for Microsoft Entra ID accounts -.br -* Supports the FreeDesktop.org Trash specification, allowing locally deleted files to be safely recoverable in case of accidental online deletion +* Supports single-tenant and multi-tenant Microsoft Entra ID environments .br * Supports national cloud deployments including Microsoft Cloud for US Government, Microsoft Cloud Germany, and Azure/Office 365 operated by VNET in China .br -* Provides rules for client-side filtering to select data for syncing with Microsoft OneDrive accounts +* Supports bi-directional synchronisation (default) to keep local and remote data fully aligned .br -* Protects against significant data loss on OneDrive after configuration changes +* Supports upload-only mode to upload local changes without downloading remote changes .br -* Supports a dry-run option for safe configuration testing +* Supports download-only mode to download remote changes without uploading local changes .br -* Supports interruption-tolerant uploads and downloads by resuming file transfers from the point of failure, ensuring data integrity and efficiency +* Supports a dry-run mode for safely testing configuration changes without modifying data +.br +* Implements safe conflict handling to minimise data loss by creating local backups when this is determined to be the safest resolution strategy +.br +* Provides comprehensive rules-based client-side filtering with inclusions, exclusions, wildcard matching (*), and recursive globbing (**) +.br +* Allows selective synchronisation of specific files, directories, or patterns +.br +* Caches synchronisation state for efficient processing and improved performance on large or complex sync sets +.br +* Supports near real-time processing of cloud-side changes using native WebSocket support +.br +* Supports webhook-based online change notifications where WebSockets are unsuitable (manual configuration required) +.br +* Monitors local file system changes in real-time using inotify +.br +* Implements the FreeDesktop.org Trash specification, enabling recovery of files deleted locally due to remote deletions +.br +* Protects against accidental data loss following configuration changes +.br +* Supports interruption-tolerant uploads and downloads with automatic transfer resumption .br * Validates file transfers to ensure data integrity .br -* Caches sync state for efficiency +* Enhances synchronisation performance through multi-threaded file transfers .br -* Monitors local files in real-time using inotify +* Manages network usage through configurable bandwidth rate limiting .br -* Enhanced synchronisation speed with multi-threaded file transfers -.br -* Manages traffic bandwidth use with rate limiting -.br -* Supports sending desktop alerts using libnotify +* Supports desktop notifications for synchronisation events, warnings, and errors using libnotify .br * Provides desktop file-manager integration by registering the OneDrive folder as a sidebar location with a distinctive icon +.br +* Operates fully in both graphical and headless/server environments, with a graphical environment required only for Intune SSO, desktop notifications, and sidebar integration + .SH CONFIGURATION By default, the OneDrive Client for Linux uses a sensible set of built-in defaults to interact with the Microsoft OneDrive service. diff --git a/readme.md b/readme.md index 5b4df0eb..ea6dc3e7 100644 --- a/readme.md +++ b/readme.md @@ -149,9 +149,12 @@ If you encounter any issues running the application, please follow these steps * Run `onedrive --version` to confirm which version you are using. - Ensure you are running the latest [release](https://github.com/abraunegg/onedrive/releases). - If you are already on the latest release but still experiencing issues, manually build the client from the `master` branch to test against the very latest code. This includes fixes for bugs discovered since the last tagged release. + - If you are using Docker or Podman, ensure you are using the 'edge' Docker Tag. Do not use the 'latest' Docker Tag. 2. **Run in verbose mode** Use the `--verbose` option to provide greater clarity and detailed logging about the issue you are facing. + + If you are using Docker or Podman, use the ONEDRIVE_VERBOSE environment variable to increase logging verbosity. 3. **Test with IPv4 only** Configure the application to use **IPv4 network connectivity only**, then retest. See the `'ip_protocol_version'` option [documentation](https://github.com/abraunegg/onedrive/blob/master/docs/application-config-options.md#ip_protocol_version) for assistance.