Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package FreeFileSync for openSUSE:Factory checked in at 2026-09-01 15:47:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/FreeFileSync (Old) and /work/SRC/openSUSE:Factory/.FreeFileSync.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "FreeFileSync" Tue Sep 1 15:47:34 2026 rev:33 rq:1374888 version:14.11 Changes: -------- --- /work/SRC/openSUSE:Factory/FreeFileSync/FreeFileSync.changes 2026-06-02 16:10:08.869374876 +0200 +++ /work/SRC/openSUSE:Factory/.FreeFileSync.new.1265/FreeFileSync.changes 2026-09-01 15:48:54.720918951 +0200 @@ -1,0 +2,24 @@ +Sun Aug 30 10:05:37 UTC 2026 - [email protected] + +- Update to 14.11: + * Fixed "TLS session resumption required" FTP error + * Log file time errors as "info" after comparing by file content + * Fixed tooltip not being updated during mouse scrolling (macOS, Linux) + * Fixed sluggy mouse scrolling during mouse movement (Linux) + * Skip ADS when failing to copy to ReFS (Windows) + * Updated translation files + +- Add wxwidgets-no-wx3.3.1-WxLogCollector.patch + * WxLogCollector appeared is wxWidgets 3.3.1 & FreeFileSync 14.10 + This reverts to the way it worked in FreeFileSync 14.9 + +------------------------------------------------------------------- +Thu Jul 9 06:44:13 UTC 2026 - Paolo Stivanin <[email protected]> + +- Update to 14.10: + * Added CRC32 verification for application resource files + * Improved error reporting when application files become corrupted + * Fixed access denied error for Windows SFTP server + * Updated toolchain and library dependencies to latest versions + +------------------------------------------------------------------- Old: ---- FreeFileSync_14.9_Source.zip New: ---- FreeFileSync_14.11_Source.zip wxwidgets-no-wx3.3.1-WxLogCollector.patch ----------(New B)---------- New: - Add wxwidgets-no-wx3.3.1-WxLogCollector.patch * WxLogCollector appeared is wxWidgets 3.3.1 & FreeFileSync 14.10 ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ FreeFileSync.spec ++++++ --- /var/tmp/diff_new_pack.7PF2Yv/_old 2026-09-01 15:48:55.817957224 +0200 +++ /var/tmp/diff_new_pack.7PF2Yv/_new 2026-09-01 15:48:55.819957293 +0200 @@ -21,7 +21,7 @@ %endif Name: FreeFileSync -Version: 14.9 +Version: 14.11 Release: 0 Summary: Backup software to synchronize files and folders License: GPL-3.0-or-later @@ -39,6 +39,8 @@ Patch3: FreeFileSync-gui.patch # PATCH-FIX-UPSTREAM glib2-2.78-free_size-Fix-build-when-g_free-macro-is-defined.patch -- based on https://freefilesync.org/forum/viewtopic.php?t=13050#p50762 Patch4: glib2-2.78-free_size-Fix-build-when-g_free-macro-is-defined.patch +# https://salsa.debian.org/bastif/freefilesync/-/blob/debian/latest/debian/patches/03-deps/wxwidgets-no-wx3.3.1-WxLogCollector.patch +Patch5: wxwidgets-no-wx3.3.1-WxLogCollector.patch BuildRequires: boost-devel >= 1.54 BuildRequires: gcc%{?force_gcc_version}-c++ >= 15 BuildRequires: libcurl-devel ++++++ FreeFileSync_14.9_Source.zip -> FreeFileSync_14.11_Source.zip ++++++ ++++ 1854 lines of diff (skipped) ++++++ glib2-2.78-free_size-Fix-build-when-g_free-macro-is-defined.patch ++++++ --- /var/tmp/diff_new_pack.7PF2Yv/_old 2026-09-01 15:48:56.654986425 +0200 +++ /var/tmp/diff_new_pack.7PF2Yv/_new 2026-09-01 15:48:56.671987018 +0200 @@ -33,11 +33,11 @@ zen/zstring.cpp | 4 ++++ 3 files changed, 16 insertions(+) -diff --git a/FreeFileSync/Source/afs/ftp.cpp b/FreeFileSync/Source/afs/ftp.cpp -index 5bfbc11..28c848d 100644 ---- a/FreeFileSync/Source/afs/ftp.cpp -+++ b/FreeFileSync/Source/afs/ftp.cpp -@@ -121,7 +121,11 @@ Zstring ansiToUtfEncoding(const std::string_view& str) //throw SysError +Index: FreeFileSync-14.10/FreeFileSync/Source/afs/ftp.cpp +=================================================================== +--- FreeFileSync-14.10.orig/FreeFileSync/Source/afs/ftp.cpp ++++ FreeFileSync-14.10/FreeFileSync/Source/afs/ftp.cpp +@@ -116,7 +116,11 @@ Zstring ansiToUtfEncoding(const std::str &error); //GError** error if (!utfStr) throw SysError(formatGlibError("g_convert(" + std::string(str) + ", LATIN1 -> UTF-8)", error)); @@ -49,7 +49,7 @@ return {utfStr, bytesWritten}; -@@ -150,7 +154,11 @@ std::string utfToAnsiEncoding(const Zstring& str) //throw SysError +@@ -145,7 +149,11 @@ std::string utfToAnsiEncoding(const Zstr &error); //GError** error if (!ansiStr) throw SysError(formatGlibError("g_convert(" + utfTo<std::string>(strNorm) + ", UTF-8 -> LATIN1)", error)); @@ -61,11 +61,11 @@ return {ansiStr, bytesWritten}; -diff --git a/FreeFileSync/Source/base/icon_loader.cpp b/FreeFileSync/Source/base/icon_loader.cpp -index e8f813d..abf09fc 100644 ---- a/FreeFileSync/Source/base/icon_loader.cpp -+++ b/FreeFileSync/Source/base/icon_loader.cpp -@@ -164,7 +164,11 @@ FileIconHolder fff::getIconByTemplatePath(const Zstring& templatePath, int maxSi +Index: FreeFileSync-14.10/FreeFileSync/Source/base/icon_loader.cpp +=================================================================== +--- FreeFileSync-14.10.orig/FreeFileSync/Source/base/icon_loader.cpp ++++ FreeFileSync-14.10/FreeFileSync/Source/base/icon_loader.cpp +@@ -164,7 +164,11 @@ FileIconHolder fff::getIconByTemplatePat nullptr); //gboolean* result_uncertain if (!contentType) throw SysError(formatSystemError("g_content_type_guess(" + copyStringTo<std::string>(templatePath) + ')', L"", L"Unknown content type.")); @@ -77,11 +77,11 @@ GIcon* const fileIcon = ::g_content_type_get_icon(contentType); if (!fileIcon) -diff --git a/zen/zstring.cpp b/zen/zstring.cpp -index 488fd44..529f823 100644 ---- a/zen/zstring.cpp -+++ b/zen/zstring.cpp -@@ -25,7 +25,11 @@ Zstring getUnicodeNormalForm_NonAsciiValidUtf(const Zstring& str, UnicodeNormalF +Index: FreeFileSync-14.10/zen/zstring.cpp +=================================================================== +--- FreeFileSync-14.10.orig/zen/zstring.cpp ++++ FreeFileSync-14.10/zen/zstring.cpp +@@ -25,7 +25,11 @@ Zstring getUnicodeNormalForm_NonAsciiVal gchar* strNorm = ::g_utf8_normalize(str.c_str(), str.length(), form == UnicodeNormalForm::nfc ? G_NORMALIZE_NFC : G_NORMALIZE_NFD); if (!strNorm) throw SysError(formatSystemError("g_utf8_normalize", L"", L"Conversion failed.")); ++++++ wxwidgets-no-wx3.3.1-WxLogCollector.patch ++++++ From: Fab Stz <[email protected]> Date: Wed, 1 Jul 2026 10:26:39 +0200 Subject: Revert to WxLog instead of WxLogCollector WxLogCollector appeared is wxWidgets 3.3.1 & FreeFileSync 14.10 This reverts to the way it worked in FreeFileSync 14.9 --- FreeFileSync/Source/localization.cpp | 8 +------- FreeFileSync/Source/ui/batch_status_handler.cpp | 6 +++--- FreeFileSync/Source/ui/gui_status_handler.cpp | 7 +++---- FreeFileSync/Source/ui/main_dlg.cpp | 7 +++---- wx+/image_resources.cpp | 8 +------- 5 files changed, 11 insertions(+), 25 deletions(-) diff --git a/FreeFileSync/Source/localization.cpp b/FreeFileSync/Source/localization.cpp index 31379c5..5d8dac6 100644 --- a/FreeFileSync/Source/localization.cpp +++ b/FreeFileSync/Source/localization.cpp @@ -8,7 +8,6 @@ #include <clocale> //setlocale #include <zen/file_traverser.h> #include <zen/file_io.h> -#include <wx/log.h> #include <wx/zipstrm.h> #include <wx/mstream.h> #include <wx/uilocale.h> @@ -129,8 +128,6 @@ std::vector<TranslationInfo> loadTranslations(const Zstring& zipPath) //throw Fi } //------------------------------------------------------------- - wxLogCollector zipLog; //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" - wxMemoryInputStream byteStream(rawStream.c_str(), rawStream.size()); //does not take ownership wxZipInputStream zipStream(byteStream, wxConvUTF8); @@ -151,11 +148,8 @@ std::vector<TranslationInfo> loadTranslations(const Zstring& zipPath) //throw Fi streams.emplace_back(zipPath + Zstr(':') + utfTo<Zstring>(entry->GetName()), std::move(stream)); } else - break; //error + assert(false); } - - if (zipStream.GetLastError() != wxSTREAM_EOF || !zipLog.GetMessages().empty()) - throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtPath(zipPath)), utfTo<std::wstring>(zipLog.GetMessages())); }(); //-------------------------------------------------------------------- diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp index 88f722b..b065b3b 100644 --- a/FreeFileSync/Source/ui/batch_status_handler.cpp +++ b/FreeFileSync/Source/ui/batch_status_handler.cpp @@ -190,12 +190,12 @@ BatchStatusHandler::DlgOptions BatchStatusHandler::showResult() else if (!suspend && !autoClose && //only play when actually showing results dialog !soundFileSyncComplete_.empty()) { - wxLogCollector soundLog; //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + wxLog* oldLogTarget = wxLog::SetActiveTarget(new wxLogStderr); //transfer and receive ownership! + ZEN_ON_SCOPE_EXIT(delete wxLog::SetActiveTarget(oldLogTarget)); wxSound::Play(utfTo<wxString>(soundFileSyncComplete_), wxSOUND_ASYNC); - if (!soundLog.GetMessages().empty()) - logMsg(errorLog_.ref(), utfTo<std::wstring>(soundLog.GetMessages()), MSG_TYPE_INFO); } //if (::GetForegroundWindow() != GetHWND()) // RequestUserAttention(); -> probably too much since task bar is already colorized with Taskbar::Status::error or Status::normal diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp index 15fed1f..3dce443 100644 --- a/FreeFileSync/Source/ui/gui_status_handler.cpp +++ b/FreeFileSync/Source/ui/gui_status_handler.cpp @@ -515,12 +515,11 @@ StatusHandlerFloatingDialog::DlgOptions StatusHandlerFloatingDialog::showResult( if (!taskCancelled() && !suspend && !autoClose && //only play when actually showing results dialog !soundFileSyncComplete_.empty()) { - wxLogCollector soundLog; //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + wxLog* oldLogTarget = wxLog::SetActiveTarget(new wxLogStderr); //transfer and receive ownership! + ZEN_ON_SCOPE_EXIT(delete wxLog::SetActiveTarget(oldLogTarget)); wxSound::Play(utfTo<wxString>(soundFileSyncComplete_), wxSOUND_ASYNC); - - if (!soundLog.GetMessages().empty()) - logMsg(errorLog_.ref(), utfTo<std::wstring>(soundLog.GetMessages()), MSG_TYPE_INFO); } //if (::GetForegroundWindow() != GetHWND()) // RequestUserAttention(); -> probably too much since task bar is already colorized with Taskbar::Status::error or Status::normal diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp index 9300767..bc3e88d 100644 --- a/FreeFileSync/Source/ui/main_dlg.cpp +++ b/FreeFileSync/Source/ui/main_dlg.cpp @@ -4622,12 +4622,11 @@ void MainDialog::onCompare(wxCommandEvent& event) //play (optional) sound notification if (!globalCfg_.soundFileCompareFinished.empty()) { - wxLogCollector soundLog; //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" + wxLog* oldLogTarget = wxLog::SetActiveTarget(new wxLogStderr); //transfer and receive ownership! + ZEN_ON_SCOPE_EXIT(delete wxLog::SetActiveTarget(oldLogTarget)); wxSound::Play(utfTo<wxString>(globalCfg_.soundFileCompareFinished), wxSOUND_ASYNC); - - if (!soundLog.GetMessages().empty()) - statusHandler.logMessage(utfTo<std::wstring>(soundLog.GetMessages()), PhaseCallback::MsgType::info); } } catch (CancelProcess&) {} diff --git a/wx+/image_resources.cpp b/wx+/image_resources.cpp index 2df8282..e672d05 100644 --- a/wx+/image_resources.cpp +++ b/wx+/image_resources.cpp @@ -9,7 +9,6 @@ #include <zen/thread.h> #include <zen/file_io.h> #include <zen/file_traverser.h> -#include <wx/log.h> #include <wx/mstream.h> #include <wx/zipstrm.h> #include <xBRZ/src/xbrz.h> @@ -202,8 +201,6 @@ ImageBuffer::ImageBuffer(const Zstring& zipPath) //throw FileError } //-------------------------------------------------------------------- - wxLogCollector zipLog; //wxWidgets shows modal error dialog by default => "no, wxWidgets, NO!" - //wxFFileInputStream/wxZipInputStream loads in junks of 512 bytes => WTF!!! => implement sane file loading: wxMemoryInputStream memStream(rawStream.c_str(), rawStream.size()); //does not take ownership wxZipInputStream zipStream(memStream, wxConvUTF8); @@ -220,10 +217,7 @@ ImageBuffer::ImageBuffer(const Zstring& zipPath) //throw FileError streams.emplace_back(utfTo<Zstring>(entry->GetName()), std::move(stream)); } else - break; //error - - if (zipStream.GetLastError() != wxSTREAM_EOF || !zipLog.GetMessages().empty()) - throw FileError(replaceCpy(_("Cannot read file %x."), L"%x", fmtPath(zipPath)), utfTo<std::wstring>(zipLog.GetMessages())); + assert(false); }(); //--------------------------------------------------------------------
