Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package FreeFileSync for openSUSE:Factory checked in at 2025-12-11 18:40:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/FreeFileSync (Old) and /work/SRC/openSUSE:Factory/.FreeFileSync.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "FreeFileSync" Thu Dec 11 18:40:21 2025 rev:29 rq:1322139 version:14.6 Changes: -------- --- /work/SRC/openSUSE:Factory/FreeFileSync/FreeFileSync.changes 2025-02-04 18:14:42.288913994 +0100 +++ /work/SRC/openSUSE:Factory/.FreeFileSync.new.1939/FreeFileSync.changes 2025-12-11 18:43:09.610058195 +0100 @@ -1,0 +2,31 @@ +Thu Dec 4 07:43:36 UTC 2025 - Paolo Stivanin <[email protected]> + +- Update to 14.6: + * Write sync statistics to stdout as JSON for .ffs_batch + * Removed precompiled 32-bit bundle (Linux) + * Avoid redundant window centering before finishing layout + * GTK3-based build (Linux) + * Dark mode support with GTK3 (Linux) + * Stream errors to stderr instead of stdout (Linux) + * Fixed FTP login error "dh key too small" + * Updated all 3rd party libraries to latest versions + * Quotation not needed anymore for external application macros + * Unambiguous license key file extension + * Fixed crash when resizing config panel during comparison + * Fixed log file viewing when config name contains special characters +- Drop FreeFileSync-icon-loader.patch +- Drop FreeFileSync-build.patch +- Added FreeFileSync-gui.patch + +------------------------------------------------------------------- +Mon Apr 7 08:04:45 UTC 2025 - Paolo Stivanin <[email protected]> + +- Update to 14.3: + * Support internationalized domain names (IDN) for (S)FTP and email + * Log performance statistics for file content comparison + * Support installation using Ptyxis terminal (Linux) + * Support pausing countdown towards system shutdown + * Support KDE Plasma 6 service menu (Linux) + * Fixed crash on app exit when called by Cron (Linux) + +------------------------------------------------------------------- Old: ---- FreeFileSync-build.patch FreeFileSync-icon-loader.patch FreeFileSync_13.8_Source.zip New: ---- FreeFileSync-gui.patch FreeFileSync_14.6_Source.zip ----------(Old B)---------- Old:- Drop FreeFileSync-icon-loader.patch - Drop FreeFileSync-build.patch - Added FreeFileSync-gui.patch Old: * Fixed log file viewing when config name contains special characters - Drop FreeFileSync-icon-loader.patch - Drop FreeFileSync-build.patch ----------(Old E)---------- ----------(New B)---------- New:- Drop FreeFileSync-build.patch - Added FreeFileSync-gui.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ FreeFileSync.spec ++++++ --- /var/tmp/diff_new_pack.E8EPXa/_old 2025-12-11 18:43:10.606100044 +0100 +++ /var/tmp/diff_new_pack.E8EPXa/_new 2025-12-11 18:43:10.610100212 +0100 @@ -1,7 +1,7 @@ # # spec file for package FreeFileSync # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ %endif Name: FreeFileSync -Version: 13.8 +Version: 14.6 Release: 0 Summary: Backup software to synchronize files and folders License: GPL-3.0-or-later @@ -33,11 +33,10 @@ Source3: RealTimeSync.desktop Source4: RealTimeSync.png Source5: Animal.dat -Patch0: FreeFileSync-build.patch -Patch1: FreeFileSync-resources.patch -Patch2: FreeFileSync-icon-loader.patch -Patch3: FreeFileSync-disable-in-app-updates.patch -Patch4: FreeFileSync-remove_ifdef_exceptions.patch +Patch0: FreeFileSync-resources.patch +Patch1: FreeFileSync-disable-in-app-updates.patch +Patch2: FreeFileSync-remove_ifdef_exceptions.patch +Patch3: FreeFileSync-gui.patch BuildRequires: boost-devel >= 1.54 BuildRequires: gcc%{?force_gcc_version}-c++ >= 12 BuildRequires: libcurl-devel @@ -47,7 +46,7 @@ BuildRequires: libstdc++6 >= 12 BuildRequires: unzip BuildRequires: update-desktop-files -BuildRequires: wxGTK3-3_2-devel >= 3.1.6 +BuildRequires: wxGTK3-3_2-devel >= 3.2.0 BuildRequires: zlib-devel # base/db_file.cpp does static_assert(std::endian::native == std::endian::little); - but s390x is big endian @@ -71,6 +70,9 @@ %prep %autosetup -p1 -c %{name}-%{version} +touch zen/warn_static.h +sed -i 's|-Wfatal-errors||' FreeFileSync/Source/Makefile FreeFileSync/Source/RealTimeSync/Makefile +sed -i 's|const override|const|' FreeFileSync/Source/ui/small_dlgs.cpp sed -i 's/\r$//' License.txt mkdir FreeFileSync/Build/Bin @@ -79,8 +81,9 @@ %if 0%{?force_gcc_version} export CXX="g++-%{?force_gcc_version}" %endif -export CFLAGS="%{optflags}" -export CXXFLAGS="%{optflags}" +export CFLAGS="%{optflags} -Wno-psabi -DMAX_SFTP_READ_SIZE=30000 -DMAX_SFTP_OUTGOING_SIZE=30000 -DwxInfoDC=wxClientDC -DwxReadOnlyDC=wxDC" +export CXXFLAGS="%{optflags} -Wno-psabi -DMAX_SFTP_READ_SIZE=30000 -DMAX_SFTP_OUTGOING_SIZE=30000 -DwxInfoDC=wxClientDC -DwxReadOnlyDC=wxDC" +export LDFLAGS="${LDFLAGS} `pkg-config --libs gtk+-3.0`" %make_build -C %{name}/Source exeName=FreeFileSync %make_build -C %{name}/Source/RealTimeSync exeName=RealTimeSync ++++++ FreeFileSync-disable-in-app-updates.patch ++++++ --- /var/tmp/diff_new_pack.E8EPXa/_old 2025-12-11 18:43:10.658102229 +0100 +++ /var/tmp/diff_new_pack.E8EPXa/_new 2025-12-11 18:43:10.662102397 +0100 @@ -1,7 +1,7 @@ -Index: FreeFileSync-13.8/FreeFileSync/Source/ui/gui_generated.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/ui/gui_generated.cpp =================================================================== ---- FreeFileSync-13.8.orig/FreeFileSync/Source/ui/gui_generated.cpp -+++ FreeFileSync-13.8/FreeFileSync/Source/ui/gui_generated.cpp +--- FreeFileSync-14.3.orig/FreeFileSync/Source/ui/gui_generated.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/ui/gui_generated.cpp @@ -108,10 +108,10 @@ MainDialogGenerated::MainDialogGenerated m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); m_menuHelp->Append( m_menuItemHelp ); @@ -15,10 +15,10 @@ m_menuHelp->AppendSeparator(); -Index: FreeFileSync-13.8/FreeFileSync/Source/ui/main_dlg.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/ui/main_dlg.cpp =================================================================== ---- FreeFileSync-13.8.orig/FreeFileSync/Source/ui/main_dlg.cpp -+++ FreeFileSync-13.8/FreeFileSync/Source/ui/main_dlg.cpp +--- FreeFileSync-14.3.orig/FreeFileSync/Source/ui/main_dlg.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/ui/main_dlg.cpp @@ -1092,7 +1092,7 @@ imgFileManagerSmall_([] updateGui(); @@ -28,11 +28,11 @@ //asynchronous call to wxWindow::Dimensions(): fix superfluous frame on right and bottom when FFS is started in fullscreen mode Bind(wxEVT_IDLE, &MainDialog::onLayoutWindowAsync, this); -Index: FreeFileSync-13.8/FreeFileSync/Source/ui/version_check.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/ui/version_check.cpp =================================================================== ---- FreeFileSync-13.8.orig/FreeFileSync/Source/ui/version_check.cpp -+++ FreeFileSync-13.8/FreeFileSync/Source/ui/version_check.cpp -@@ -48,7 +48,8 @@ void openBrowserForDownload(wxWindow* pa +--- FreeFileSync-14.3.orig/FreeFileSync/Source/ui/version_check.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/ui/version_check.cpp +@@ -49,7 +49,8 @@ void openBrowserForDownload(wxWindow* pa bool fff::automaticUpdateCheckDue(time_t lastUpdateCheck) { const time_t now = std::time(nullptr); ++++++ FreeFileSync-gui.patch ++++++ diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp --- a/FreeFileSync/Source/ui/gui_status_handler.cpp +++ b/FreeFileSync/Source/ui/gui_status_handler.cpp @@ -70,27 +70,33 @@ void StatusHandlerTemporaryPanel::showStatsPanel() //case wxAUI_DOCK_CENTRE: } + wxAuiPaneInfoArray& paneArray = mainDlg_.auiMgr_.GetAllPanes(); const bool statusRowTaken = [&] { - for (wxAuiPaneInfo& paneInfo : mainDlg_.auiMgr_.GetAllPanes()) + for (size_t i = 0; i < paneArray.size(); ++i) + { + const wxAuiPaneInfo& paneInfo = paneArray[i]; //doesn't matter if paneInfo.IsShown() or not! => move down in either case! if (&paneInfo != &statusPanel && paneInfo.dock_layer == statusPanel.dock_layer && paneInfo.dock_direction == statusPanel.dock_direction && paneInfo.dock_row == statusPanel.dock_row) return true; - + } return false; }(); //move all rows that are in the way one step further if (statusRowTaken) - for (wxAuiPaneInfo& paneInfo : mainDlg_.auiMgr_.GetAllPanes()) + for (size_t i = 0; i < paneArray.size(); ++i) + { + wxAuiPaneInfo& paneInfo = paneArray[i]; if (&paneInfo != &statusPanel && paneInfo.dock_layer == statusPanel.dock_layer && paneInfo.dock_direction == statusPanel.dock_direction && paneInfo.dock_row >= statusPanel.dock_row) ++paneInfo.dock_row; + } //------------------------------------------------------------------ statusPanel.Show(); --- a/wx+/darkmode.cpp +++ b/wx+/darkmode.cpp @@ -60,7 +60,7 @@ void zen::colorThemeInit(wxApp& app, Col { assert(!refGlobalColorHook()); - globalDefaultThemeIsDark = wxSystemSettings::GetAppearance().AreAppsDark(); + globalDefaultThemeIsDark = false; ZEN_ON_SCOPE_EXIT(if (!refGlobalColorHook()) refGlobalColorHook() = std::make_unique<SysColorsHook>()); //*after* SetAppearance() and despite errors //caveat: on macOS there are more themes than light/dark: https://developer.apple.com/documentation/appkit/nsappearance/name-swift.struct @@ -93,10 +93,6 @@ void zen::changeColorTheme(ColorTheme colTheme) //throw FileError try { ZEN_ON_SCOPE_SUCCESS(refGlobalColorHook() = std::make_unique<SysColorsHook>()); //*after* SetAppearance() - if (wxApp::AppearanceResult rv = wxTheApp->SetAppearance(colTheme); - rv != wxApp::AppearanceResult::Ok) - throw SysError(formatSystemError("wxApp::SetAppearance", - rv == wxApp::AppearanceResult::CannotChange ? L"CannotChange" : L"Failure", L"" /*errorMsg*/)); } catch (const SysError& e) { throw FileError(_("Failed to update the color theme."), e.toString()); } } --- a/wx+/darkmode.h +++ b/wx+/darkmode.h @@ -9,14 +9,16 @@ #include <zen/file_error.h> #include <wx/app.h> +#include <wx/settings.h> +enum class Appearance{System,Light,Dark}; namespace zen { bool darkModeAvailable(); //support not only "dark mode" but dark themes in general -using ColorTheme = wxApp::Appearance; //why reinvent the wheel? +using ColorTheme = Appearance; //why reinvent the wheel? void colorThemeInit(wxApp& app, ColorTheme colTheme); //throw FileError void colorThemeCleanup(); @@ -25,4 +27,28 @@ bool equalAppearance(ColorTheme colTheme1, ColorTheme colTheme2); void changeColorTheme(ColorTheme colTheme); //throw FileError } +struct wxColorHook +{ + virtual ~wxColorHook() {} + virtual wxColour getColor(wxSystemColour index) const = 0; +}; +WXDLLIMPEXP_CORE inline std::unique_ptr<wxColorHook>& refGlobalColorHook() +{ + static std::unique_ptr<wxColorHook> globalColorHook; + return globalColorHook; +} + + +class WXDLLIMPEXP_CORE wxSystemSettings2 : public wxSystemSettingsNative +{ +public: + static wxColour GetColour(wxSystemColour index) + { + if (refGlobalColorHook()) + return refGlobalColorHook()->getColor(index); + + return wxSystemSettingsNative::GetColour(index); + } +}; + #endif //DARKMODE_H_754298057018 --- a/FreeFilesync/Source/ui/main_dlg.cpp +++ b/FreeFileSync/Source/ui/main_dlg.cpp @@ -1279,11 +1279,11 @@ void MainDialog::setGlobalCfgOnInit(const GlobalConfig& globalCfg) //-------------------------------------------------------------------------------- m_checkBoxMatchCase->SetValue(globalCfg_.mainDlg.textSearchRespectCase); - + wxAuiPaneInfoArray& paneArray = auiMgr_.GetAllPanes(); //work around wxAuiManager::LoadPerspective overwriting pane captions with old values (might be different language!) std::vector<std::pair<wxAuiPaneInfo*, wxString>> paneCaptions; - for (wxAuiPaneInfo& paneInfo : auiMgr_.GetAllPanes()) - paneCaptions.emplace_back(&paneInfo, paneInfo.caption); + for (size_t i = 0; i < paneArray.size(); ++i) + paneCaptions.emplace_back(&paneArray[i], paneArray[i].caption); //compare progress dialog minimum sizes are layout-dependent + can't be changed by user => don't load stale values from config std::vector<std::tuple<wxAuiPaneInfo*, wxSize /*min size*/, wxSize /*best size*/>> paneConstraints; @@ -3147,8 +3147,8 @@ void MainDialog::onSetLayoutContext(wxMouseEvent& event) //---------------------------------------------------------------------------------------- bool addedSeparator = false; - - for (wxAuiPaneInfo& paneInfo : auiMgr_.GetAllPanes()) + const wxAuiPaneInfoArray& paneArray = auiMgr_.GetAllPanes(); + for (size_t i = 0; i < paneArray.size(); ++i){ wxAuiPaneInfo& paneInfo = paneArray[i]; if (!paneInfo.IsShown() && paneInfo.window != compareStatus_->getAsWindow() && paneInfo.window != m_panelLog && @@ -3166,7 +3166,7 @@ void MainDialog::onSetLayoutContext(wxMouseEvent& event) this->auiMgr_.Update(); }); } - + } menu.popup(*this); } ++++++ FreeFileSync-remove_ifdef_exceptions.patch ++++++ --- /var/tmp/diff_new_pack.E8EPXa/_old 2025-12-11 18:43:10.682103238 +0100 +++ /var/tmp/diff_new_pack.E8EPXa/_new 2025-12-11 18:43:10.686103405 +0100 @@ -1,8 +1,8 @@ -Index: FreeFileSync-13.3/FreeFileSync/Source/application.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/application.cpp =================================================================== ---- FreeFileSync-13.3.orig/FreeFileSync/Source/application.cpp -+++ FreeFileSync-13.3/FreeFileSync/Source/application.cpp -@@ -243,10 +243,6 @@ wxLayoutDirection Application::GetLayout +--- FreeFileSync-14.3.orig/FreeFileSync/Source/application.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/application.cpp +@@ -239,10 +239,6 @@ wxLayoutDirection Application::GetLayout int Application::OnRun() { @@ -13,11 +13,11 @@ //exception => Windows: let it crash and create mini dump!!! Linux/macOS: std::exception::what() logged to console [[maybe_unused]] const int rc = wxApp::OnRun(); return static_cast<int>(exitCode_); -Index: FreeFileSync-13.3/FreeFileSync/Source/RealTimeSync/application.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/RealTimeSync/application.cpp =================================================================== ---- FreeFileSync-13.3.orig/FreeFileSync/Source/RealTimeSync/application.cpp -+++ FreeFileSync-13.3/FreeFileSync/Source/RealTimeSync/application.cpp -@@ -209,10 +209,6 @@ wxLayoutDirection Application::GetLayout +--- FreeFileSync-14.3.orig/FreeFileSync/Source/RealTimeSync/application.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/RealTimeSync/application.cpp +@@ -213,10 +213,6 @@ wxLayoutDirection Application::GetLayout int Application::OnRun() { ++++++ FreeFileSync-resources.patch ++++++ --- /var/tmp/diff_new_pack.E8EPXa/_old 2025-12-11 18:43:10.702104078 +0100 +++ /var/tmp/diff_new_pack.E8EPXa/_new 2025-12-11 18:43:10.706104246 +0100 @@ -1,8 +1,8 @@ -Index: FreeFileSync-13.1/FreeFileSync/Source/ffs_paths.cpp +Index: FreeFileSync-14.3/FreeFileSync/Source/ffs_paths.cpp =================================================================== ---- FreeFileSync-13.1.orig/FreeFileSync/Source/ffs_paths.cpp -+++ FreeFileSync-13.1/FreeFileSync/Source/ffs_paths.cpp -@@ -54,7 +54,8 @@ Zstring fff::getInstallDirPath() +--- FreeFileSync-14.3.orig/FreeFileSync/Source/ffs_paths.cpp ++++ FreeFileSync-14.3/FreeFileSync/Source/ffs_paths.cpp +@@ -53,7 +53,8 @@ Zstring fff::getInstallDirPath() Zstring fff::getResourceDirPath() { ++++++ FreeFileSync_13.8_Source.zip -> FreeFileSync_14.6_Source.zip ++++++ ++++ 21354 lines of diff (skipped)
