From 0dbde736d00c598a847c3ddf981adee1bdfcfffa Mon Sep 17 00:00:00 2001 From: Mikael Mello Date: Mon, 12 Nov 2018 10:09:13 -0200 Subject: [PATCH 01/12] Add boolean option to force display of actual calendar date --- Duplicati/Library/Main/Options.cs | 4 ++-- Duplicati/Library/Main/Strings.cs | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Main/Options.cs b/Duplicati/Library/Main/Options.cs index 98fe6203b..6b91e3c43 100644 --- a/Duplicati/Library/Main/Options.cs +++ b/Duplicati/Library/Main/Options.cs @@ -547,6 +547,7 @@ namespace Duplicati.Library.Main new CommandLineArgument("repair-only-paths", CommandLineArgument.ArgumentType.Boolean, Strings.Options.RepaironlypathsShort, Strings.Options.RepaironlypathsLong, "false"), new CommandLineArgument("force-locale", CommandLineArgument.ArgumentType.String, Strings.Options.ForcelocaleShort, Strings.Options.ForcelocaleLong), + new CommandLineArgument("force-actual-date", CommandLineArgument.ArgumentType.Boolean, Strings.Options.ForceActualDateShort, Strings.Options.ForceActualDateLong, "false"), new CommandLineArgument("disable-piped-streaming", CommandLineArgument.ArgumentType.Boolean, Strings.Options.DisablepipingShort, Strings.Options.DisablepipingLong, "false"), @@ -752,8 +753,7 @@ namespace Duplicati.Library.Main return m_options["tempdir"]; } - } - + } /// /// Gets a value indicating whether the user has forced the locale diff --git a/Duplicati/Library/Main/Strings.cs b/Duplicati/Library/Main/Strings.cs index 7e9111917..c17b13379 100644 --- a/Duplicati/Library/Main/Strings.cs +++ b/Duplicati/Library/Main/Strings.cs @@ -223,6 +223,8 @@ namespace Duplicati.Library.Main.Strings public static string RepaironlypathsLong { get { return LC.L(@"Use this option to build a searchable local database which only contains path information. This option is usable for quickly building a database to locate certain content without needing to reconstruct all information. The resulting database can be searched, but cannot be used to restore data with."); } } public static string ForcelocaleShort { get { return LC.L(@"Force the locale setting"); } } public static string ForcelocaleLong { get { return LC.L(@"By default, your system locale and culture settings will be used. In some cases you may prefer to run with another locale, for example to get messages in another language. This option can be used to set the locale. Supply a blank string to choose the ""Invariant Culture""."); } } + public static string ForceActualDateShort { get { return LC.L(@"Forces the display of the actual date instead of calendar date"); } } + public static string ForceActualDateLong { get { return LC.L(@"By default, dates are displayed in the calendar format, meaning ""Today"" or ""Last Thursday"". By setting this option, only the actual dates are displayed, ""Nov 12, 2018, 8:01 AM"" for example."); } } public static string DisablepipingShort{ get { return LC.L(@"Handle file communication with backend using threaded pipes"); } } public static string DisablepipingLong { get { return LC.L(@"Use this option to disable multithreaded handling of up- and downloads, that can significantly speed up backend operations depending on the hardware you're running on and the transfer rate of your backend."); } } public static string ConcurrencymaxthreadsShort{ get { return LC.L(@"Limit number of concurrent threads"); } } From 8874a76a50d09886a129801244d74561bcedd367 Mon Sep 17 00:00:00 2001 From: Mikael Mello Date: Mon, 12 Nov 2018 10:09:40 -0200 Subject: [PATCH 02/12] Reload to same path when saving settings --- .../ngax/scripts/controllers/SystemSettingsController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js b/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js index 7c34ef6ac..87ff86741 100644 --- a/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js +++ b/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js @@ -108,7 +108,7 @@ backupApp.controller('SystemSettingsController', function($rootScope, $scope, $l if ($scope.updateChannel != $scope.originalUpdateChannel) AppService.post('/updates/check'); - $location.path('/'); + $route.reload(); }, AppUtils.connectionError(gettextCatalog.getString('Failed to save:') + ' ') ); From 94537c3bf5996bc84efeb1cb76c969aecc3ec164 Mon Sep 17 00:00:00 2001 From: Mikael Mello Date: Mon, 12 Nov 2018 10:13:27 -0200 Subject: [PATCH 03/12] Display parsed timestamp or calendar date depending on option --- Duplicati/Server/webroot/ngax/index.html | 2 +- .../webroot/ngax/scripts/controllers/AppController.js | 2 ++ .../webroot/ngax/scripts/filters/parsetimestamp.js | 10 ++++++++++ Duplicati/Server/webroot/ngax/templates/home.html | 4 ++-- .../Server/webroot/ngax/templates/restorewizard.html | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/index.html b/Duplicati/Server/webroot/ngax/index.html index 11b8d3389..8d19f51f4 100755 --- a/Duplicati/Server/webroot/ngax/index.html +++ b/Duplicati/Server/webroot/ngax/index.html @@ -182,7 +182,7 @@ Next task: {{nextTask.Backup.Name}} -
Next scheduled task: {{nextScheduledTask.Backup.Name}} {{nextScheduledTime | moment: 'calendar'}}
+
Next scheduled task: {{nextScheduledTask.Backup.Name}} {{nextScheduledTime | parseForceActualDate:forceActualDate }}
No scheduled tasks
diff --git a/Duplicati/Server/webroot/ngax/scripts/controllers/AppController.js b/Duplicati/Server/webroot/ngax/scripts/controllers/AppController.js index 9d93e9aad..57b1d1dac 100644 --- a/Duplicati/Server/webroot/ngax/scripts/controllers/AppController.js +++ b/Duplicati/Server/webroot/ngax/scripts/controllers/AppController.js @@ -159,6 +159,8 @@ backupApp.controller('AppController', function($scope, $cookies, $location, AppS }); AppService.get('/serversettings').then(function(data) { + $scope.forceActualDate = AppUtils.parseBoolString(data.data['--force-actual-date']); + var ut = data.data['max-upload-speed']; var dt = data.data['max-download-speed']; $scope.throttle_active = (ut != null && ut.trim().length != 0) || (dt != null && dt.trim().length != 0); diff --git a/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js b/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js index 03b0652c8..7131358c4 100644 --- a/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js +++ b/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js @@ -14,3 +14,13 @@ backupApp.filter('parsetimestamp', function(AppUtils) { return AppUtils.toDisplayDateAndTime(value); } }); + +backupApp.filter('parseForceActualDate', function(parsetimestampFilter, momentFilter) { + return function(value, force) { + if (force) { + return parsetimestampFilter(value); + } + + return momentFilter(value, 'calendar'); + } +}); diff --git a/Duplicati/Server/webroot/ngax/templates/home.html b/Duplicati/Server/webroot/ngax/templates/home.html index f9a634629..0f27a8c11 100644 --- a/Duplicati/Server/webroot/ngax/templates/home.html +++ b/Duplicati/Server/webroot/ngax/templates/home.html @@ -53,7 +53,7 @@
Last successful backup:
{{time}} (took {{duration}})
@@ -62,7 +62,7 @@
Next scheduled run:
-
{{item.Backup.Metadata.NextScheduledRun | moment: 'calendar'}}
+
{{item.Backup.Metadata.NextScheduledRun | parseForceActualDate:forceActualDate }}
diff --git a/Duplicati/Server/webroot/ngax/templates/restorewizard.html b/Duplicati/Server/webroot/ngax/templates/restorewizard.html index 49a5d6fea..498807b48 100644 --- a/Duplicati/Server/webroot/ngax/templates/restorewizard.html +++ b/Duplicati/Server/webroot/ngax/templates/restorewizard.html @@ -26,7 +26,7 @@
Last successful restore: {{time}} (took {{duration || '0 seconds'}})
From e71c74123fc47b03a4eabc1625446365aef743db Mon Sep 17 00:00:00 2001 From: Mikael Mello Date: Tue, 13 Nov 2018 08:26:06 -0200 Subject: [PATCH 04/12] Define $route instead of $location in SystemSettingsController --- .../ngax/scripts/controllers/SystemSettingsController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js b/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js index 87ff86741..1b9a9cdc3 100644 --- a/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js +++ b/Duplicati/Server/webroot/ngax/scripts/controllers/SystemSettingsController.js @@ -1,4 +1,4 @@ -backupApp.controller('SystemSettingsController', function($rootScope, $scope, $location, $cookies, AppService, AppUtils, SystemInfo, gettextCatalog) { +backupApp.controller('SystemSettingsController', function($rootScope, $scope, $route, $cookies, AppService, AppUtils, SystemInfo, gettextCatalog) { $scope.SystemInfo = SystemInfo.watch($scope); $scope.theme = $scope.$parent.$parent.saved_theme; From 2fa617fff64d08c60f64dbc417203f5f57668cde Mon Sep 17 00:00:00 2001 From: Mikael Mello Date: Mon, 19 Nov 2018 08:46:51 -0200 Subject: [PATCH 05/12] Rename filter from 'parseForceActualDate' to 'parseDate' --- Duplicati/Server/webroot/ngax/index.html | 2 +- .../Server/webroot/ngax/scripts/filters/parsetimestamp.js | 2 +- Duplicati/Server/webroot/ngax/templates/home.html | 4 ++-- Duplicati/Server/webroot/ngax/templates/restorewizard.html | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/index.html b/Duplicati/Server/webroot/ngax/index.html index 8d19f51f4..2f3a1b39d 100755 --- a/Duplicati/Server/webroot/ngax/index.html +++ b/Duplicati/Server/webroot/ngax/index.html @@ -182,7 +182,7 @@ Next task: {{nextTask.Backup.Name}}
-
Next scheduled task: {{nextScheduledTask.Backup.Name}} {{nextScheduledTime | parseForceActualDate:forceActualDate }}
+
Next scheduled task: {{nextScheduledTask.Backup.Name}} {{nextScheduledTime | parseDate:forceActualDate }}
No scheduled tasks
diff --git a/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js b/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js index 7131358c4..4c129981e 100644 --- a/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js +++ b/Duplicati/Server/webroot/ngax/scripts/filters/parsetimestamp.js @@ -15,7 +15,7 @@ backupApp.filter('parsetimestamp', function(AppUtils) { } }); -backupApp.filter('parseForceActualDate', function(parsetimestampFilter, momentFilter) { +backupApp.filter('parseDate', function(parsetimestampFilter, momentFilter) { return function(value, force) { if (force) { return parsetimestampFilter(value); diff --git a/Duplicati/Server/webroot/ngax/templates/home.html b/Duplicati/Server/webroot/ngax/templates/home.html index 0f27a8c11..5d1d73141 100644 --- a/Duplicati/Server/webroot/ngax/templates/home.html +++ b/Duplicati/Server/webroot/ngax/templates/home.html @@ -53,7 +53,7 @@
Last successful backup:
{{time}} (took {{duration}})
@@ -62,7 +62,7 @@
Next scheduled run:
-
{{item.Backup.Metadata.NextScheduledRun | parseForceActualDate:forceActualDate }}
+
{{item.Backup.Metadata.NextScheduledRun | parseDate:forceActualDate }}
diff --git a/Duplicati/Server/webroot/ngax/templates/restorewizard.html b/Duplicati/Server/webroot/ngax/templates/restorewizard.html index 498807b48..21c795378 100644 --- a/Duplicati/Server/webroot/ngax/templates/restorewizard.html +++ b/Duplicati/Server/webroot/ngax/templates/restorewizard.html @@ -26,7 +26,7 @@
Last successful restore: {{time}} (took {{duration || '0 seconds'}})
From 06d1cfb62f2636a51adc3bb5a5a538edf66ac58a Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Sat, 31 Aug 2019 12:36:26 -0400 Subject: [PATCH 06/12] remove unused method --- Duplicati/Library/Utility/TempFile.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Duplicati/Library/Utility/TempFile.cs b/Duplicati/Library/Utility/TempFile.cs index 27a30c965..35e473ee0 100644 --- a/Duplicati/Library/Utility/TempFile.cs +++ b/Duplicati/Library/Utility/TempFile.cs @@ -93,16 +93,6 @@ namespace Duplicati.Library.Utility return SystemIO.IO_OS.GetFiles(TempFolder.SystemTempPath, APPLICATION_PREFIX + "*"); } - /// - /// Attempts to delete all temporary files for this application - /// - public static void RemoveAllApplicationTempFiles() - { - foreach(var s in GetApplicationTempFiles()) - try { System.IO.File.Delete(s); } - catch { } - } - /// /// Removes all old temporary files for this application. /// From 53aafebfd33f03c6f3c78c205c93564fcd07a2a8 Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Sat, 31 Aug 2019 12:38:16 -0400 Subject: [PATCH 07/12] fix date compare so both use UTC othewise it is currently a number of hours off --- Duplicati/Library/Utility/TempFile.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Utility/TempFile.cs b/Duplicati/Library/Utility/TempFile.cs index 35e473ee0..24fa418f5 100644 --- a/Duplicati/Library/Utility/TempFile.cs +++ b/Duplicati/Library/Utility/TempFile.cs @@ -103,7 +103,7 @@ namespace Duplicati.Library.Utility foreach(var e in GetApplicationTempFiles()) try { - if (DateTime.Now > (System.IO.File.GetLastWriteTimeUtc(e) + expires)) + if (DateTime.UtcNow > (System.IO.File.GetLastWriteTimeUtc(e) + expires)) System.IO.File.Delete(e); } catch (Exception ex) From 428b568bd32f4ab0190e79449954dd04a89dab1c Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Sat, 31 Aug 2019 12:39:09 -0400 Subject: [PATCH 08/12] add braces, simplify delegate call --- Duplicati/Library/Utility/TempFile.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Duplicati/Library/Utility/TempFile.cs b/Duplicati/Library/Utility/TempFile.cs index 24fa418f5..ee3cc6198 100644 --- a/Duplicati/Library/Utility/TempFile.cs +++ b/Duplicati/Library/Utility/TempFile.cs @@ -100,17 +100,20 @@ namespace Duplicati.Library.Utility public static void RemoveOldApplicationTempFiles(Action errorcallback = null) { var expires = TimeSpan.FromDays(30); - foreach(var e in GetApplicationTempFiles()) + foreach (var e in GetApplicationTempFiles()) + { try { if (DateTime.UtcNow > (System.IO.File.GetLastWriteTimeUtc(e) + expires)) + { System.IO.File.Delete(e); + } } catch (Exception ex) { - if (errorcallback != null) - errorcallback(e, ex); + errorcallback?.Invoke(e, ex); } + } } public TempFile() From d81deae8d6fa01c2cc9cee6e10193bd840fcf621 Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Sat, 31 Aug 2019 13:22:45 -0400 Subject: [PATCH 09/12] when debug, on startup run after 10 seconds then run every 1 hour --- Duplicati/Server/Program.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Duplicati/Server/Program.cs b/Duplicati/Server/Program.cs index 19a693fa6..f6a1aed99 100644 --- a/Duplicati/Server/Program.cs +++ b/Duplicati/Server/Program.cs @@ -244,9 +244,9 @@ namespace Duplicati.Server { DataConnection.LogError(null, "Error in updater", obj); }; - - UpdatePoller = new UpdatePollThread(); + UpdatePoller = new UpdatePollThread(); + SetPurgeTempFilesTimer(commandlineOptions); SetLiveControls(); @@ -379,8 +379,17 @@ namespace Duplicati.Server { try { - if (Math.Abs((DateTime.Now - lastPurge).TotalHours) < 23) +#if DEBUG + if (Math.Abs((DateTime.Now - lastPurge).TotalHours) < 1) + { return; + } +#else + if (Math.Abs((DateTime.Now - lastPurge).TotalHours) < 23) + { + return; + } +#endif lastPurge = DateTime.Now; @@ -420,8 +429,13 @@ namespace Duplicati.Server try { +#if DEBUG + PurgeTempFilesTimer = + new System.Threading.Timer(purgeTempFilesCallback, null, TimeSpan.FromSeconds(10), TimeSpan.FromHours(1)); +#else PurgeTempFilesTimer = new System.Threading.Timer(purgeTempFilesCallback, null, TimeSpan.FromHours(1), TimeSpan.FromDays(1)); +#endif } catch (ArgumentOutOfRangeException) { From 26a22dd3f83399a7ab4fe528243819a72f522864 Mon Sep 17 00:00:00 2001 From: BlueBlock Date: Sat, 31 Aug 2019 13:24:21 -0400 Subject: [PATCH 10/12] when debug, find temp file names of "Duplicati*" with min age 3 hours temp files older than 3 hours will be deleted --- Duplicati/Library/Utility/TempFile.cs | 49 +++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/Duplicati/Library/Utility/TempFile.cs b/Duplicati/Library/Utility/TempFile.cs index ee3cc6198..2865247b4 100644 --- a/Duplicati/Library/Utility/TempFile.cs +++ b/Duplicati/Library/Utility/TempFile.cs @@ -19,21 +19,20 @@ #endregion using System; using System.Collections.Generic; -using System.Text; -using Duplicati.Library.Common.IO; - +using Duplicati.Library.Common.IO; + namespace Duplicati.Library.Utility { /// /// This class represents a temporary file that will be automatically deleted when disposed /// - public class TempFile : IDisposable + public class TempFile : IDisposable { /// /// The prefix applied to all temporary files /// public static string APPLICATION_PREFIX = Utility.getEntryAssembly().FullName.Substring(0, 3).ToLower(System.Globalization.CultureInfo.InvariantCulture) + "-"; - + private string m_path; private bool m_protect; @@ -41,20 +40,20 @@ namespace Duplicati.Library.Utility //In debug mode, we track the creation of temporary files, and encode the generating method into the name private static readonly object m_lock = new object(); private static Dictionary m_fileTrace = new Dictionary(); - + public static System.Diagnostics.StackTrace GetStackTraceForTempFile(string filename) { - lock(m_lock) + lock (m_lock) if (m_fileTrace.ContainsKey(filename)) return m_fileTrace[filename]; else return null; } - + private static string GenerateUniqueName() { var st = new System.Diagnostics.StackTrace(); - foreach(var f in st.GetFrames()) + foreach (var f in st.GetFrames()) if (f.GetMethod().DeclaringType.Assembly != typeof(TempFile).Assembly) { var n = string.Format("{0}_{1}_{2}_{3}", f.GetMethod().DeclaringType.FullName, f.GetMethod().Name, Library.Utility.Utility.SerializeDateTime(DateTime.UtcNow), Guid.NewGuid().ToString().Substring(0, 8)); @@ -62,16 +61,16 @@ namespace Duplicati.Library.Utility n = string.Format("{0}_{1}_{2}_{3}", f.GetMethod().DeclaringType.Name, f.GetMethod().Name, Library.Utility.Utility.SerializeDateTime(DateTime.UtcNow), Guid.NewGuid().ToString().Substring(0, 8)); if (n.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) < 0) { - lock(m_lock) + lock (m_lock) m_fileTrace.Add(n, st); return n; } } - + var s = Guid.NewGuid().ToString(); - lock(m_lock) + lock (m_lock) m_fileTrace.Add(s, st); - return s; + return s; } #else private static string GenerateUniqueName() @@ -90,17 +89,25 @@ namespace Duplicati.Library.Utility /// The application temp files. private static IEnumerable GetApplicationTempFiles() { +#if DEBUG + return SystemIO.IO_OS.GetFiles(TempFolder.SystemTempPath, "Duplicati*"); +#else return SystemIO.IO_OS.GetFiles(TempFolder.SystemTempPath, APPLICATION_PREFIX + "*"); +#endif } - + /// /// Removes all old temporary files for this application. /// /// An optional callback method for logging errors public static void RemoveOldApplicationTempFiles(Action errorcallback = null) { +#if DEBUG + var expires = TimeSpan.FromHours(3); +#else var expires = TimeSpan.FromDays(30); - foreach (var e in GetApplicationTempFiles()) +#endif + foreach (string e in GetApplicationTempFiles()) { try { @@ -115,7 +122,7 @@ namespace Duplicati.Library.Utility } } } - + public TempFile() : this(System.IO.Path.Combine(TempFolder.SystemTempPath, GenerateUniqueName())) { @@ -127,7 +134,7 @@ namespace Duplicati.Library.Utility m_protect = false; if (!System.IO.File.Exists(m_path)) using (System.IO.File.Create(m_path)) - { /*Dispose it immediately*/ } + { /*Dispose it immediately*/ } } /// @@ -149,7 +156,7 @@ namespace Duplicati.Library.Utility { return new TempFile(path); } - + public static TempFile WrapExistingFile(string path) { return new TempFile(path); @@ -172,7 +179,7 @@ namespace Duplicati.Library.Utility { if (disposing) GC.SuppressFinalize(this); - + try { if (!m_protect && m_path != null && System.IO.File.Exists(m_path)) @@ -183,7 +190,7 @@ namespace Duplicati.Library.Utility { } } - + #region IDisposable Members public void Dispose() @@ -192,7 +199,7 @@ namespace Duplicati.Library.Utility } #endregion - + ~TempFile() { Dispose(false); From 65581a46fcf28f99922768b98ca2600bd0159e8c Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Mon, 2 Sep 2019 13:08:30 +0200 Subject: [PATCH 11/12] Added restore command to the version-stamp updater tool during build --- build-release.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build-release.sh b/build-release.sh index 5fec34ee2..0775f9dd1 100644 --- a/build-release.sh +++ b/build-release.sh @@ -125,7 +125,8 @@ fi rm -rf "Duplicati/GUI/Duplicati.GUI.TrayIcon/bin/Release" -"${XBUILD}" /property:Configuration=Release "BuildTools/UpdateVersionStamp/UpdateVersionStamp.csproj" +"${NUGET}" restore "BuildTools/UpdateVersionStamp/UpdateVersionStamp.sln" +"${XBUILD}" /property:Configuration=Release "BuildTools/UpdateVersionStamp/UpdateVersionStamp.sln" "${MONO}" "BuildTools/UpdateVersionStamp/bin/Release/UpdateVersionStamp.exe" --version="${RELEASE_VERSION}" "${NUGET}" restore "BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.sln" From 650046530a620369c75ea6c387c5d1a189bbd71b Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Mon, 2 Sep 2019 13:12:41 +0200 Subject: [PATCH 12/12] Version bump to v2.0.4.24-2.0.4.24_canary_2019-09-02 You can download this build from: Binaries: https://updates.duplicati.com/canary/duplicati-2.0.4.24_canary_2019-09-02.zip Signature file: https://updates.duplicati.com/canary/duplicati-2.0.4.24_canary_2019-09-02.zip.sig ASCII signature file: https://updates.duplicati.com/canary/duplicati-2.0.4.24_canary_2019-09-02.zip.sig.asc MD5: 54e9a15c2abef2e2c5352c7bdc91d8ac SHA1: a9123111cd45b27aa379323c7764926cc4bffaeb SHA256: 8d04e1f7c5feb859783340f25bed5b2076fce4237923cb6a7ea31268d553cb4b --- Updates/build_version.txt | 2 +- changelog.txt | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Updates/build_version.txt b/Updates/build_version.txt index 409940768..a45fd52cc 100644 --- a/Updates/build_version.txt +++ b/Updates/build_version.txt @@ -1 +1 @@ -23 +24 diff --git a/changelog.txt b/changelog.txt index 498022784..999fcd9d7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,29 @@ +2019-09-02 - 2.0.4.24_canary_2019-09-02 +========== +* Code cleanup, thanks @warwickmm +* Removed extra console output, thanks @wjansenw +* Fixed disposing backends after job completion, thanks @warwickmm +* Fixed an issue with throttled write, thanks @warwickmm +* Spelling fix, thanks @BlueBlock +* Fixed documetation in `run-script` examples, thanks @beppo-dd +* Improved unittests, thanks @BlueBlock +* Improved auto-compact and auto-vacuum, thanks @drwtsn32x +* Fixed problem with exceeeding the number of parameters supported by SQLite, thanks @drwtsn32x +* Improved status display, thanks @drwtsn32x +* Improved bugreport database scrubbing, thanks @drwtsn32x +* Removed GoogleDrive trash items in listing, thanks @BlueBlock +* Fixed the rename method in the GoogleDrive backend, thanks @BlueBlock +* Improved GCS storage class text, thanks @warwickmm +* Improved unittests for easier local testing, thanks @warwickmm +* Added workaround for AFTP upload delay, thanks @BlueBlock +* Fixed issue with reading the largest path prefix, thanks @BlueBlock +* Added conditional download of unittest data zip files, thanks @BlueBlock +* CI testing improvements, thanks @BlueBlock +* Fixed sporadic issue with backups of files being written, thanks @BlueBlock +* Updated to .Net Framework 4.6.2 +* Fixed issue with temporary files not being deleted as expected, thanks @BlueBlock +* Support for forcing calendar dates in time pickers, thanks @LacunaSoftware + 2019-07-14 - 2.0.4.23_beta_2019-07-14 ========== This update only contains warnings to inform users on Amazon Cloud Drive that the service is discontinued.