Merge branch 'master' of github.com:duplicati/duplicati
This commit is contained in:
@@ -135,7 +135,7 @@ namespace Duplicati.Library.Main.Database
|
||||
m_removeremotevolumeCommand.CommandText = @"DELETE FROM ""Remotevolume"" WHERE ""Name"" = ? AND (""DeleteGraceTime"" < ? OR ""State"" != ?)";
|
||||
m_removeremotevolumeCommand.AddParameters(3);
|
||||
|
||||
m_removedeletedremotevolumeCommand.CommandText = $@"DELETE FROM ""Remotevolume"" WHERE ""DeleteGraceTime"" < ? AND ""State"" == ""{RemoteVolumeState.Deleted.ToString()}""";
|
||||
m_removedeletedremotevolumeCommand.CommandText = $@"DELETE FROM ""Remotevolume"" WHERE ""State"" == ""{RemoteVolumeState.Deleted.ToString()}"" AND (""DeleteGraceTime"" < ? OR LENGTH(""DeleteGraceTime"") > 12) "; // >12 is to handle removal of old records that were in ticks
|
||||
m_removedeletedremotevolumeCommand.AddParameter();
|
||||
|
||||
m_selectremotevolumeIdCommand.CommandText = @"SELECT ""ID"" FROM ""Remotevolume"" WHERE ""Name"" = ?";
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace Duplicati.Library.Main.Strings
|
||||
public static string QuotaWarningThresholdLong { get { return LC.L(@"Sets a threshold for when to warn about the backend quota being nearly exceeded. It is given as a percentage, and a warning is generated if the amount of available quota is less than this percentage of the total backup size. If the backend does not report the quota information, this value will be ignored"); } }
|
||||
public static string QuotaWarningThresholdShort { get { return LC.L(@"Threshold for warning about low quota"); } }
|
||||
public static string SymlinkpolicyShort { get { return LC.L(@"Symlink handling"); } }
|
||||
public static string SymlinkpolicyLong(string store, string ignore, string follow) { return LC.L(@"Use this option to handle symlinks differently. The ""{0}"" option will simply record a symlink with its name and destination, and a restore will recreate the symlink as a link. Use the option ""{1}"" to ignore all symlinks and not store any information about them. Previous versions of Duplicati used the setting ""{2}"", which will cause symlinked files to be included and restore as normal files.", store, ignore, follow); }
|
||||
public static string SymlinkpolicyLong(string store, string ignore, string follow) { return LC.L(@"Use this option to handle symlinks differently. The ""{0}"" option will simply record a symlink with its name and destination, and a restore will recreate the symlink as a link. Use the option ""{1}"" to ignore all symlinks and not store any information about them. The option ""{2}"" will cause the symlinked target to be backed up and restored as a normal file with the symlink name. Early versions of Duplicati did not support this option and bevhaved as if ""{2}"" was specified.", store, ignore, follow); }
|
||||
public static string HardlinkpolicyShort { get { return LC.L(@"Hardlink handling"); } }
|
||||
public static string HardlinkpolicyLong(string first, string all, string none) { return LC.L(@"Use this option to handle hardlinks (only works on Linux/OSX). The ""{0}"" option will record a hardlink ID for each hardlink to avoid storing hardlinked paths multiple times. The option ""{1}"" will ignore hardlink information, and treat each hardlink as a unique path. The option ""{2}"" will ignore all hardlinks with more than one link.", first, all, none); }
|
||||
public static string ExcludefilesattributesShort { get { return LC.L(@"Exclude files by attribute"); } }
|
||||
|
||||
@@ -950,9 +950,14 @@ namespace Duplicati.Library.Utility
|
||||
return new DateTime(ticks, DateTimeKind.Utc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given a DateTime instance, return the number of elapsed seconds since the Unix epoch
|
||||
/// </summary>
|
||||
/// <returns>The number of elapsed seconds since the Unix epoch</returns>
|
||||
/// <param name="input">The input time</param>
|
||||
public static long NormalizeDateTimeToEpochSeconds(DateTime input)
|
||||
{
|
||||
return (long) Math.Floor((NormalizeDateTime(input) - EPOCH).TotalSeconds);
|
||||
return (new DateTimeOffset(input)).ToUnixTimeSeconds();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
+2
-2
@@ -142,10 +142,10 @@ driver.find_element_by_link_text(BACKUP_NAME).click()
|
||||
wait_for_text(60, "//div[@class='task ng-scope']/dl[2]/dd[1]", "(took ")
|
||||
|
||||
# Restore
|
||||
if len([n for n in driver.find_elements_by_xpath("//span[contains(text(),'Restore files ...')]") if n.is_displayed()]) == 0:
|
||||
if len([n for n in driver.find_elements_by_xpath(u"//span[contains(text(),'Restore files \u2026')]") if n.is_displayed()]) == 0:
|
||||
driver.find_element_by_link_text(BACKUP_NAME).click()
|
||||
|
||||
[n for n in driver.find_elements_by_xpath("//span[contains(text(),'Restore files ...')]") if n.is_displayed()][0].click()
|
||||
[n for n in driver.find_elements_by_xpath(u"//span[contains(text(),'Restore files \u2026')]") if n.is_displayed()][0].click()
|
||||
driver.find_element_by_xpath("//span[contains(text(),'" + SOURCE_FOLDER + "')]") # wait for filelist
|
||||
time.sleep(1)
|
||||
driver.find_element_by_xpath("//restore-file-picker/ul/li/div/a[2]").click() # select root folder checkbox
|
||||
|
||||
Reference in New Issue
Block a user