summaryrefslogtreecommitdiff
path: root/freefilesync
diff options
context:
space:
mode:
authorB Stack <bgstack15@gmail.com>2020-06-26 20:05:53 +0000
committerB Stack <bgstack15@gmail.com>2020-06-26 20:05:53 +0000
commitadedcec62e0bb184930af3d812e78cfd279abcf3 (patch)
tree3dd5641a2a1b473d26e16f19eaefcc3144984fba /freefilesync
parentMerge branch 'irfanview-bump' into 'master' (diff)
parentffs dpkg gtk2 build (diff)
downloadstackrpms-adedcec62e0bb184930af3d812e78cfd279abcf3.tar.gz
stackrpms-adedcec62e0bb184930af3d812e78cfd279abcf3.tar.bz2
stackrpms-adedcec62e0bb184930af3d812e78cfd279abcf3.zip
Merge branch 'freefilesync-bump' into 'master'
Freefilesync 10.25 See merge request bgstack15/stackrpms!164
Diffstat (limited to 'freefilesync')
-rw-r--r--freefilesync/debian/README.Debian4
-rw-r--r--freefilesync/debian/changelog31
-rw-r--r--freefilesync/debian/control1
-rw-r--r--freefilesync/debian/freefilesync+devuan.dsc4
-rw-r--r--freefilesync/debian/patches/ffs_gcc.patch46
-rw-r--r--freefilesync/debian/patches/ffs_no_wx311.patch18
-rw-r--r--freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch181
-rw-r--r--freefilesync/debian/patches/series1
-rw-r--r--freefilesync/ffs_no_eraseif.patch52
-rw-r--r--freefilesync/ffs_no_wx311.patch18
-rw-r--r--freefilesync/freefilesync.spec2
-rw-r--r--freefilesync/revert_zenju_aggressive_upstreamisms.patch167
12 files changed, 142 insertions, 383 deletions
diff --git a/freefilesync/debian/README.Debian b/freefilesync/debian/README.Debian
index 588db96..a5a1f01 100644
--- a/freefilesync/debian/README.Debian
+++ b/freefilesync/debian/README.Debian
@@ -1,3 +1,7 @@
+freefilesync (10.25-1+devuan)
+
+Now requires g++-10. Previously, the maintainer was reverting the logic only available to gcc-10, but this is becoming unmaintainable.
+
freefilesync (10.21-2+devuan)
* gtk2 build for albion
diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog
index 0b9f910..2bd53b5 100644
--- a/freefilesync/debian/changelog
+++ b/freefilesync/debian/changelog
@@ -1,3 +1,34 @@
+freefilesync (10.25-2+devuan) obs; urgency=medium
+
+ * gtk2 build (stable)
+
+ -- Ben Stack <bgstack15@gmail.com> Sat, 20 Jun 2020 16:46:22 -0400
+
+freefilesync (10.25-1+devuan) obs; urgency=medium
+
+ * gtk3 build (unstable)
+ * New file tree layout for main grid
+ * Support Google Drive Shared Drives
+ * Support Google Drive Shortcuts
+ * Prioritize item name rendering if lacking horizontal space
+ * Report "out of memory" during startup instead of crashing
+ * Fixed excess memory consumption when loading variable-size data blocks
+ * Fixed VERSION_ID missing on Arch Linux
+ * Fixed IWbemServices::ConnectServer error during auto-update
+ * Fixed row being skipped during main grid page up/down
+ * Fixed MSSearch files not found when using Volume Shadow Copy
+ * Allow creating folder names with trailing dot
+ * Improved sort by full path speed and folder ordering
+ * Report detailed error when failing to parse FTP MLSD
+ * Sort by path component names instead of relative path
+ * Support access to MEGAcmd FTP server
+ * Fixed Google Drive error when removing last parent of shared item
+ * Fixed Google Drive owned+shared files being unlinked instead of deleted
+ * Fixed Google Drive change notificaton evaluation for item without parents
+ * Support double-click/"Browse directory" for (S)FTP/Google Drive (Linux)
+
+ -- Ben Stack <bgstack15@gmail.com> Fri, 19 Jun 2020 16:21:17 -0400
+
freefilesync (10.24-2+devuan) albion; urgency=medium
* gtk2 build (stable)
diff --git a/freefilesync/debian/control b/freefilesync/debian/control
index 00da1a0..92c55ca 100644
--- a/freefilesync/debian/control
+++ b/freefilesync/debian/control
@@ -4,6 +4,7 @@ Priority: optional
Maintainer: B Stack <bgstack15@gmail.com>
Build-Depends: debhelper (>=12~),
imagemagick,
+ g++-10,
libcurl4-openssl-dev (>=7.68.0),
libssh2-1-dev,
libssl-dev,
diff --git a/freefilesync/debian/freefilesync+devuan.dsc b/freefilesync/debian/freefilesync+devuan.dsc
index eb4e5b1..2da40e8 100644
--- a/freefilesync/debian/freefilesync+devuan.dsc
+++ b/freefilesync/debian/freefilesync+devuan.dsc
@@ -2,11 +2,11 @@ Format: 3.0 (quilt)
Source: freefilesync
Binary: freefilesync
Architecture: any
-Version: 10.24-1+devuan
+Version: 10.25-1+devuan
Maintainer: B Stack <bgstack15@gmail.com>
Homepage: https://freefilesync.org/
Standards-Version: 4.1.4
-Build-Depends: debhelper (>= 12~), imagemagick, libcurl4-openssl-dev, libssh2-1-dev, libssl-dev, wx3.0-headers, unzip, libgtk-3-dev, libwxgtk3.0-gtk3-dev, libfontconfig-dev
+Build-Depends: debhelper (>= 12~), g++-10, imagemagick, libcurl4-openssl-dev, libssh2-1-dev, libssl-dev, wx3.0-headers, unzip, libgtk-3-dev, libwxgtk3.0-gtk3-dev, libfontconfig-dev
Package-List:
freefilesync deb utils optional arch=any
Files:
diff --git a/freefilesync/debian/patches/ffs_gcc.patch b/freefilesync/debian/patches/ffs_gcc.patch
new file mode 100644
index 0000000..ed007b5
--- /dev/null
+++ b/freefilesync/debian/patches/ffs_gcc.patch
@@ -0,0 +1,46 @@
+diff -Naur 10.25-1/FreeFileSync/Source/Makefile 10.25-2/FreeFileSync/Source/Makefile
+--- 10.25-1/FreeFileSync/Source/Makefile 2020-06-20 13:36:08.495867672 -0400
++++ 10.25-2/FreeFileSync/Source/Makefile 2020-06-20 13:31:36.180419862 -0400
+@@ -1,4 +1,5 @@
+ exeName = FreeFileSync
++CXX=g++-10
+
+ cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \
+ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \
+@@ -114,11 +115,11 @@
+
+ ../Build/Bin/$(exeName): $(objFiles)
+ mkdir -p $(dir $@)
+- g++ -o $@ $^ $(linkFlags)
++ $(CXX) -o $@ $^ $(linkFlags)
+
+ $(tmpPath)/ffs/src/%.o : %
+ mkdir -p $(dir $@)
+- g++ $(cxxFlags) -c $< -o $@
++ $(CXX) $(cxxFlags) -c $< -o $@
+
+ clean:
+ rm -rf $(tmpPath)
+diff -Naur 10.25-1/FreeFileSync/Source/RealTimeSync/Makefile 10.25-2/FreeFileSync/Source/RealTimeSync/Makefile
+--- 10.25-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-06-20 13:36:08.499867723 -0400
++++ 10.25-2/FreeFileSync/Source/RealTimeSync/Makefile 2020-06-20 13:31:48.844580205 -0400
+@@ -1,4 +1,5 @@
+ exeName = RealTimeSync
++CXX=g++-10
+
+ cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \
+ -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \
+@@ -52,11 +53,11 @@
+
+ ../../Build/Bin/$(exeName): $(objFiles)
+ mkdir -p $(dir $@)
+- g++ -o $@ $^ $(linkFlags)
++ $(CXX) -o $@ $^ $(linkFlags)
+
+ $(tmpPath)/ffs/src/rts/%.o : %
+ mkdir -p $(dir $@)
+- g++ $(cxxFlags) -c $< -o $@
++ $(CXX) $(cxxFlags) -c $< -o $@
+
+ clean:
+ rm -rf $(tmpPath)
diff --git a/freefilesync/debian/patches/ffs_no_wx311.patch b/freefilesync/debian/patches/ffs_no_wx311.patch
index 932800d..926f7b8 100644
--- a/freefilesync/debian/patches/ffs_no_wx311.patch
+++ b/freefilesync/debian/patches/ffs_no_wx311.patch
@@ -1,8 +1,18 @@
2019-08-15 just compile.
-diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.24-1/FreeFileSync/Source/ui/small_dlgs.cpp
---- 10.3-0/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 07:56:06.714625467 -0500
-+++ 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 08:41:43.498308243 -0500
-@@ -1594,7 +1594,7 @@
+diff -Naur 10.25-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.25-1/FreeFileSync/Source/ui/small_dlgs.cpp
+--- 10.25-0/FreeFileSync/Source/ui/small_dlgs.cpp 2020-06-19 16:17:15.000000000 -0400
++++ 10.25-1/FreeFileSync/Source/ui/small_dlgs.cpp 2020-06-20 14:23:47.488836409 -0400
+@@ -293,7 +293,8 @@
+ {
+ showNotificationDialog(this, DialogInfoType::error, PopupDialogCfg().setDetailInstructions(e.toString()));
+ }
+- m_listBoxGdriveUsers->Append(gdriveAccounts);
++ for (const wxString& item : gdriveAccounts) // reverted to pre-wx 3.1.1 logic
++ m_listBoxGdriveUsers->Append(item);
+
+ //set default values for Google Drive: use first item of m_listBoxGdriveUsers
+ if (!gdriveAccounts.empty() && !acceptsItemPathPhraseGdrive(folderPathPhrase))
+@@ -1663,7 +1664,7 @@
//setMainInstructionFont(*m_staticTextMain);
m_bitmapActivation->SetBitmap(getResourceImage("internet"));
diff --git a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch
index 0da4e06..8ca60c2 100644
--- a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch
+++ b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch
@@ -1,184 +1,3 @@
-Author: Ben Stack <bgstack15@gmail.com>
-Date: 2020-05-17 14:11 -0400
-Message: Use the following command to get this old contents. Zenju must be using some newer definition of -std=c++2a than what Devuan Ceres provides as of 2020-05-17, and probably wxwidgets. This is the 10.23 code for these files.
-
- git checkout b4ecf755 zen/legacy_compiler.h zen/string_base.h wx+/choice_enum.h
-
-Unfortunately with the removal of the wxWidgets-gtk2 code from Debian, we are stuck using all available at approximately November 1, 2019 snapshot of Debian: https://snapshot.debian.org/archive/debian/20191101T211023Z/pool/main/w/wxwidgets3.0/
-libwxbase3.0-0v5_3.0.4+dfsg-14_amd64.deb
-libwxbase3.0-0v5_3.0.4+dfsg-14_i386.deb
-libwxbase3.0-dev_3.0.4+dfsg-14_amd64.deb
-libwxbase3.0-dev_3.0.4+dfsg-14_i386.deb
-libwxgtk3.0-0v5_3.0.4+dfsg-14_amd64.deb
-libwxgtk3.0-0v5_3.0.4+dfsg-14_i386.deb
-libwxgtk3.0-dev_3.0.4+dfsg-14_amd64.deb
-libwxgtk3.0-dev_3.0.4+dfsg-14_i386.deb
-wx3.0-headers_3.0.4+dfsg-14_all.deb
-wx-common_3.0.4+dfsg-14_amd64.deb
-wx-common_3.0.4+dfsg-14_i386.deb
-diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/legacy_compiler.h 10.24-1/zen/legacy_compiler.h
---- 10.24-0/zen/legacy_compiler.h 2020-05-17 13:44:27.542140458 -0400
-+++ 10.24-1/zen/legacy_compiler.h 2020-05-17 14:07:49.115166339 -0400
-@@ -7,9 +7,6 @@
- #ifndef LEGACY_COMPILER_H_839567308565656789
- #define LEGACY_COMPILER_H_839567308565656789
-
-- #include <numbers> //C++20
--
-- #include <span> //requires C++20
-
-
-
-@@ -21,8 +18,53 @@
-
- //---------------------------------------------------------------------------------
-
-+#if __cpp_lib_span
-+ #error get rid of workaround:
-+#endif
-+
-+template <class T>
-+class span
-+{
-+public:
-+ template <class Iterator>
-+ span(Iterator first, Iterator last) : size_(last - first), data_(first != last ? &*first : nullptr) {}
-+
-+ template <class Container>
-+ span(Container& cont) : span(cont.begin(), cont.end()) {}
-+
-+ using iterator = T*;
-+ using const_iterator = const T*;
-+
-+ iterator begin() { return data_; }
-+ iterator end () { return data_ + size_; }
-+
-+ const_iterator begin() const { return data_; }
-+ const_iterator end () const { return data_ + size_; }
-
-+ const_iterator cbegin() const { return begin(); }
-+ const_iterator cend () const { return end (); }
-
-+ T* data() const { return data_; }
-+ size_t size() const { return size_; }
-+ bool empty() const { return size_ == 0; }
-+
-+private:
-+ const size_t size_;
-+ T* const data_;
-+};
-+
-+
-+#if __cpp_lib_math_constants
-+ #error get rid of workaround:
-+#endif
-+
-+namespace numbers
-+{
-+const double pi = 3.14159265358979323846;
-+const double e = 2.71828182845904523536;
-+const double sqrt2 = 1.41421356237309504880;
-+const double ln2 = 0.693147180559945309417;
-+}
- }
-
-
-diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/string_base.h 10.24-1/zen/string_base.h
---- 10.24-0/zen/string_base.h 2020-05-17 13:44:27.554140569 -0400
-+++ 10.24-1/zen/string_base.h 2020-05-17 14:09:44.164244361 -0400
-@@ -12,7 +12,9 @@
- #include <cstdint>
- #include <atomic>
- #include "string_tools.h"
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- #include <compare>
-+#endif
-
-
- //Zbase - a policy based string class optimizing performance and flexibility
-@@ -293,15 +295,29 @@
- };
-
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
-+ #error implement!
-+#endif
-+
-
- template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
- template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Char* rhs);
- template <class Char, template <class> class SP> inline bool operator==(const Char* lhs, const Zbase<Char, SP>& rhs) { return operator==(rhs, lhs); }
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Char* rhs);
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs);
-
-+#else
-+template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); }
-+template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Char* rhs) { return !operator==(lhs, rhs); }
-+template <class Char, template <class> class SP> inline bool operator!=(const Char* lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); }
-+
-+template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
-+template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs);
-+template <class Char, template <class> class SP> bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs);
-+#endif
-
- template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return Zbase<Char, SP>(lhs) += rhs; }
- template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Char* rhs) { return Zbase<Char, SP>(lhs) += rhs; }
-@@ -482,11 +498,12 @@
- }
-
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- template <class Char, template <class> class SP> inline
- std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs)
- {
-- return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0
-- rhs.begin(), rhs.end()); //
-+ return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs.begin(), rhs.end());
- }
-
-
-@@ -501,11 +518,35 @@
- template <class Char, template <class> class SP> inline
- std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs)
- {
-- return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs),
-- rhs.begin(), rhs.end()); //respect embedded 0
-+ return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), //respect embedded 0
-+ rhs.begin(), rhs.end());
-+}
-+
-+#else
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs)
-+{
-+ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs.begin(), rhs.end());
- }
-
-
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs)
-+{
-+ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs, rhs + strLength(rhs));
-+}
-+
-+
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs)
-+{
-+ return std::lexicographical_compare(lhs, lhs + strLength(lhs), //respect embedded 0
-+ rhs.begin(), rhs.end());
-+}
-+#endif
-+
-
- template <class Char, template <class> class SP> inline
- size_t Zbase<Char, SP>::length() const
diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h
--- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400
+++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400
diff --git a/freefilesync/debian/patches/series b/freefilesync/debian/patches/series
index bd039a4..ba71e47 100644
--- a/freefilesync/debian/patches/series
+++ b/freefilesync/debian/patches/series
@@ -8,3 +8,4 @@ ffs_sftp.patch
ffs_libssh2.patch
ffs_curl.patch
revert_zenju_aggressive_upstreamisms.patch
+ffs_gcc.patch
diff --git a/freefilesync/ffs_no_eraseif.patch b/freefilesync/ffs_no_eraseif.patch
index f4a7b46..71239e4 100644
--- a/freefilesync/ffs_no_eraseif.patch
+++ b/freefilesync/ffs_no_eraseif.patch
@@ -11,28 +11,28 @@ diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source
//get or create mutex
std::weak_ptr<std::mutex>& weakPtr = pathLocks[nativePath];
-diff -x '*.swp' -x '*.git*' -x '*.orig' -x '*.rej' -Naur 10.24-0/FreeFileSync/Source/afs/gdrive.cpp 10.24-1/FreeFileSync/Source/afs/gdrive.cpp
---- 10.18-0/FreeFileSync/Source/afs/gdrive.cpp 2019-11-20 16:15:55.828668123 -0500
-+++ 10.24-1/FreeFileSync/Source/afs/gdrive.cpp 2020-05-18 10:30:32.420537123 -0400
-@@ -1578,7 +1578,7 @@
+diff -Naur 10.25-0/FreeFileSync/Source/afs/gdrive.cpp 10.25-1/FreeFileSync/Source/afs/gdrive.cpp
+--- 10.25-0/FreeFileSync/Source/afs/gdrive.cpp 2020-06-19 16:17:15.000000000 -0400
++++ 10.25-1/FreeFileSync/Source/afs/gdrive.cpp 2020-06-20 20:54:52.438669026 -0400
+@@ -1930,7 +1930,7 @@
if (auto it = itemDetails_.find(itemId); it != itemDetails_.end())
{
- GoogleItemDetails detailsNew = it->second;
+ GdriveItemDetails detailsNew = it->second;
- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; });
+ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdOld; });
- notifyItemUpdate(stateDelta, itemId, detailsNew);
+ notifyItemUpdated(stateDelta, itemId, &detailsNew);
}
else //conflict!!!
-@@ -1592,7 +1592,7 @@
- GoogleItemDetails detailsNew = it->second;
- detailsNew.itemName = utfTo<std::string>(newName);
+@@ -1944,7 +1944,7 @@
+ GdriveItemDetails detailsNew = it->second;
+ detailsNew.itemName = newName;
- std::erase_if(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); //
+ eraseIf(detailsNew.parentIds, [&](const std::string& id) { return id == parentIdFrom || id == parentIdTo; }); //
detailsNew.parentIds.push_back(parentIdTo); //not a duplicate
- notifyItemUpdate(stateDelta, itemId, detailsNew);
-@@ -1701,7 +1701,7 @@
+ notifyItemUpdated(stateDelta, itemId, &detailsNew);
+@@ -2095,7 +2095,7 @@
return; //=> avoid misleading changeLog_ entries after Google Drive sync!!!
//update change logs (and clean up obsolete entries)
@@ -41,7 +41,7 @@ diff -x '*.swp' -x '*.git*' -x '*.orig' -x '*.rej' -Naur 10.24-0/FreeFileSync/So
{
if (std::shared_ptr<ItemIdDelta> iid = weakPtr.lock())
{
-@@ -1722,15 +1722,15 @@
+@@ -2116,15 +2116,15 @@
std::vector<std::string> parentIdsNew = details->parentIds;
std::vector<std::string> parentIdsRemoved = it->second.parentIds;
@@ -58,9 +58,9 @@ diff -x '*.swp' -x '*.git*' -x '*.orig' -x '*.rej' -Naur 10.24-0/FreeFileSync/So
- std::erase_if(itP->second.childItems, [&](auto itChild) { return itChild == it; });
+ eraseIf(itP->second.childItems, [&](auto itChild) { return itChild == it; });
//if all parents are removed, Google Drive will (recursively) delete the item => don't prematurely do this now: wait for change notifications!
+ //OR: item without parents located in "Shared with me", but referenced via Shortcut => don't remove!!!
- it->second = *details;
-@@ -1749,7 +1749,7 @@
+@@ -2144,7 +2144,7 @@
{
for (const std::string& parentId : it->second.parentIds) //1. delete from parent folders
if (auto itP = folderContents_.find(parentId); itP != folderContents_.end())
@@ -69,8 +69,8 @@ diff -x '*.swp' -x '*.git*' -x '*.orig' -x '*.rej' -Naur 10.24-0/FreeFileSync/So
itemDetails_.erase(it);
}
-@@ -1757,7 +1757,7 @@
- if (auto itP = folderContents_.find(itemId); itP != folderContents_.end())
+@@ -2153,7 +2153,7 @@
+ itP != folderContents_.end())
{
for (auto itChild : itP->second.childItems) //2. delete as parent from child items (don't wait for change notifications of children)
- std::erase_if(itChild->second.parentIds, [&](const std::string& id) { return id == itemId; });
@@ -242,18 +242,18 @@ diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source
SetString(pos, wxString()); //in contrast to Delete(), this one does not kill the drop-down list and gives a nice visual feedback!
//Delete(pos);
-diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source/ui/file_view.cpp 10.18-2/FreeFileSync/Source/ui/file_view.cpp
---- 10.18-1/FreeFileSync/Source/ui/file_view.cpp 2019-11-20 16:15:55.849668360 -0500
-+++ 10.18-2/FreeFileSync/Source/ui/file_view.cpp 2019-11-20 17:57:30.562558429 -0500
-@@ -253,7 +253,7 @@
- rowPositionsFirstChild_.clear();
-
+diff -Naur 10.25-0/FreeFileSync/Source/ui/file_view.cpp 10.25-1/FreeFileSync/Source/ui/file_view.cpp
+--- 10.25-0/FreeFileSync/Source/ui/file_view.cpp 2020-06-19 16:17:15.000000000 -0400
++++ 10.25-1/FreeFileSync/Source/ui/file_view.cpp 2020-06-20 20:55:25.978009894 -0400
+@@ -321,7 +321,7 @@
+ void FileView::removeInvalidRows()
+ {
//remove rows that have been deleted meanwhile
-- std::erase_if(sortedRef_, [&](const RefIndex& refIdx) { return !FileSystemObject::retrieve(refIdx.objId); });
-+ eraseIf(sortedRef_, [&](const RefIndex& refIdx) { return !FileSystemObject::retrieve(refIdx.objId); });
- }
-
+- std::erase_if(sortedRef_, [&](const FileSystemObject::ObjectId& objId) { return !FileSystemObject::retrieve(objId); });
++ eraseIf(sortedRef_, [&](const FileSystemObject::ObjectId& objId) { return !FileSystemObject::retrieve(objId); });
+ viewRef_ .clear();
+ rowPositions_ .clear();
diff -x '*.swp' -x .git -x '*.orig' -x '*.rej' -Naur 10.18-1/FreeFileSync/Source/ui/folder_history_box.h 10.18-2/FreeFileSync/Source/ui/folder_history_box.h
--- 10.18-1/FreeFileSync/Source/ui/folder_history_box.h 2019-11-20 16:15:55.849668360 -0500
+++ 10.18-2/FreeFileSync/Source/ui/folder_history_box.h 2019-11-20 17:57:30.562558429 -0500
diff --git a/freefilesync/ffs_no_wx311.patch b/freefilesync/ffs_no_wx311.patch
index f617122..926f7b8 100644
--- a/freefilesync/ffs_no_wx311.patch
+++ b/freefilesync/ffs_no_wx311.patch
@@ -1,8 +1,18 @@
2019-08-15 just compile.
-diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp
---- 10.3-0/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 07:56:06.714625467 -0500
-+++ 10.19-1/FreeFileSync/Source/ui/small_dlgs.cpp 2019-12-27 08:41:43.498308243 -0500
-@@ -1546,7 +1546,7 @@
+diff -Naur 10.25-0/FreeFileSync/Source/ui/small_dlgs.cpp 10.25-1/FreeFileSync/Source/ui/small_dlgs.cpp
+--- 10.25-0/FreeFileSync/Source/ui/small_dlgs.cpp 2020-06-19 16:17:15.000000000 -0400
++++ 10.25-1/FreeFileSync/Source/ui/small_dlgs.cpp 2020-06-20 14:23:47.488836409 -0400
+@@ -293,7 +293,8 @@
+ {
+ showNotificationDialog(this, DialogInfoType::error, PopupDialogCfg().setDetailInstructions(e.toString()));
+ }
+- m_listBoxGdriveUsers->Append(gdriveAccounts);
++ for (const wxString& item : gdriveAccounts) // reverted to pre-wx 3.1.1 logic
++ m_listBoxGdriveUsers->Append(item);
+
+ //set default values for Google Drive: use first item of m_listBoxGdriveUsers
+ if (!gdriveAccounts.empty() && !acceptsItemPathPhraseGdrive(folderPathPhrase))
+@@ -1663,7 +1664,7 @@
//setMainInstructionFont(*m_staticTextMain);
m_bitmapActivation->SetBitmap(getResourceImage("internet"));
diff --git a/freefilesync/freefilesync.spec b/freefilesync/freefilesync.spec
index 914c333..afc6c5f 100644
--- a/freefilesync/freefilesync.spec
+++ b/freefilesync/freefilesync.spec
@@ -19,7 +19,7 @@
%define libssh2_name libssh2-%{name}
%endif
Name: freefilesync
-Version: 10.24
+Version: 10.25
Release: 1%{?dist}
Summary: A file synchronization utility
diff --git a/freefilesync/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/revert_zenju_aggressive_upstreamisms.patch
index 0da4e06..522080d 100644
--- a/freefilesync/revert_zenju_aggressive_upstreamisms.patch
+++ b/freefilesync/revert_zenju_aggressive_upstreamisms.patch
@@ -1,8 +1,8 @@
Author: Ben Stack <bgstack15@gmail.com>
-Date: 2020-05-17 14:11 -0400
+Date: 2020-06-21 16:45 -0400
Message: Use the following command to get this old contents. Zenju must be using some newer definition of -std=c++2a than what Devuan Ceres provides as of 2020-05-17, and probably wxwidgets. This is the 10.23 code for these files.
- git checkout b4ecf755 zen/legacy_compiler.h zen/string_base.h wx+/choice_enum.h
+ git checkout b4ecf755 wx+/choice_enum.h
Unfortunately with the removal of the wxWidgets-gtk2 code from Debian, we are stuck using all available at approximately November 1, 2019 snapshot of Debian: https://snapshot.debian.org/archive/debian/20191101T211023Z/pool/main/w/wxwidgets3.0/
libwxbase3.0-0v5_3.0.4+dfsg-14_amd64.deb
@@ -16,169 +16,6 @@ libwxgtk3.0-dev_3.0.4+dfsg-14_i386.deb
wx3.0-headers_3.0.4+dfsg-14_all.deb
wx-common_3.0.4+dfsg-14_amd64.deb
wx-common_3.0.4+dfsg-14_i386.deb
-diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/legacy_compiler.h 10.24-1/zen/legacy_compiler.h
---- 10.24-0/zen/legacy_compiler.h 2020-05-17 13:44:27.542140458 -0400
-+++ 10.24-1/zen/legacy_compiler.h 2020-05-17 14:07:49.115166339 -0400
-@@ -7,9 +7,6 @@
- #ifndef LEGACY_COMPILER_H_839567308565656789
- #define LEGACY_COMPILER_H_839567308565656789
-
-- #include <numbers> //C++20
--
-- #include <span> //requires C++20
-
-
-
-@@ -21,8 +18,53 @@
-
- //---------------------------------------------------------------------------------
-
-+#if __cpp_lib_span
-+ #error get rid of workaround:
-+#endif
-+
-+template <class T>
-+class span
-+{
-+public:
-+ template <class Iterator>
-+ span(Iterator first, Iterator last) : size_(last - first), data_(first != last ? &*first : nullptr) {}
-+
-+ template <class Container>
-+ span(Container& cont) : span(cont.begin(), cont.end()) {}
-+
-+ using iterator = T*;
-+ using const_iterator = const T*;
-+
-+ iterator begin() { return data_; }
-+ iterator end () { return data_ + size_; }
-+
-+ const_iterator begin() const { return data_; }
-+ const_iterator end () const { return data_ + size_; }
-
-+ const_iterator cbegin() const { return begin(); }
-+ const_iterator cend () const { return end (); }
-
-+ T* data() const { return data_; }
-+ size_t size() const { return size_; }
-+ bool empty() const { return size_ == 0; }
-+
-+private:
-+ const size_t size_;
-+ T* const data_;
-+};
-+
-+
-+#if __cpp_lib_math_constants
-+ #error get rid of workaround:
-+#endif
-+
-+namespace numbers
-+{
-+const double pi = 3.14159265358979323846;
-+const double e = 2.71828182845904523536;
-+const double sqrt2 = 1.41421356237309504880;
-+const double ln2 = 0.693147180559945309417;
-+}
- }
-
-
-diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/zen/string_base.h 10.24-1/zen/string_base.h
---- 10.24-0/zen/string_base.h 2020-05-17 13:44:27.554140569 -0400
-+++ 10.24-1/zen/string_base.h 2020-05-17 14:09:44.164244361 -0400
-@@ -12,7 +12,9 @@
- #include <cstdint>
- #include <atomic>
- #include "string_tools.h"
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- #include <compare>
-+#endif
-
-
- //Zbase - a policy based string class optimizing performance and flexibility
-@@ -293,15 +295,29 @@
- };
-
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
-+ #error implement!
-+#endif
-+
-
- template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
- template <class Char, template <class> class SP> bool operator==(const Zbase<Char, SP>& lhs, const Char* rhs);
- template <class Char, template <class> class SP> inline bool operator==(const Char* lhs, const Zbase<Char, SP>& rhs) { return operator==(rhs, lhs); }
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Char* rhs);
- template <class Char, template <class> class SP> std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs);
-
-+#else
-+template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); }
-+template <class Char, template <class> class SP> inline bool operator!=(const Zbase<Char, SP>& lhs, const Char* rhs) { return !operator==(lhs, rhs); }
-+template <class Char, template <class> class SP> inline bool operator!=(const Char* lhs, const Zbase<Char, SP>& rhs) { return !operator==(lhs, rhs); }
-+
-+template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs);
-+template <class Char, template <class> class SP> bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs);
-+template <class Char, template <class> class SP> bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs);
-+#endif
-
- template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs) { return Zbase<Char, SP>(lhs) += rhs; }
- template <class Char, template <class> class SP> inline Zbase<Char, SP> operator+(const Zbase<Char, SP>& lhs, const Char* rhs) { return Zbase<Char, SP>(lhs) += rhs; }
-@@ -482,11 +498,12 @@
- }
-
-
-+#if __cpp_impl_three_way_comparison && __cpp_lib_three_way_comparison
- template <class Char, template <class> class SP> inline
- std::strong_ordering operator<=>(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs)
- {
-- return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0
-- rhs.begin(), rhs.end()); //
-+ return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs.begin(), rhs.end());
- }
-
-
-@@ -501,11 +518,35 @@
- template <class Char, template <class> class SP> inline
- std::strong_ordering operator<=>(const Char* lhs, const Zbase<Char, SP>& rhs)
- {
-- return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs),
-- rhs.begin(), rhs.end()); //respect embedded 0
-+ return std::lexicographical_compare_three_way(lhs, lhs + strLength(lhs), //respect embedded 0
-+ rhs.begin(), rhs.end());
-+}
-+
-+#else
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Zbase<Char, SP>& lhs, const Zbase<Char, SP>& rhs)
-+{
-+ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs.begin(), rhs.end());
- }
-
-
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Zbase<Char, SP>& lhs, const Char* rhs)
-+{
-+ return std::lexicographical_compare(lhs.begin(), lhs.end(), //respect embedded 0
-+ rhs, rhs + strLength(rhs));
-+}
-+
-+
-+template <class Char, template <class> class SP> inline
-+bool operator<(const Char* lhs, const Zbase<Char, SP>& rhs)
-+{
-+ return std::lexicographical_compare(lhs, lhs + strLength(lhs), //respect embedded 0
-+ rhs.begin(), rhs.end());
-+}
-+#endif
-+
-
- template <class Char, template <class> class SP> inline
- size_t Zbase<Char, SP>::length() const
diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h
--- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400
+++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400
bgstack15