diff --git a/Duplicati/CommandLine/help.txt b/Duplicati/CommandLine/help.txt index 5ac7cd14d..f3498d586 100644 --- a/Duplicati/CommandLine/help.txt +++ b/Duplicati/CommandLine/help.txt @@ -67,10 +67,11 @@ Restore a specific file Usage: backup "" [] - Makes a backup of and stores it in . The format for is protocol://username:password@hostname:port/path?backend - _option1=value1&backend_option2=value2. Multiple source paths can be specified if they are separated by a space. Defaults are: The maximum file size is 100MB, backups are deleted when they are older than one month. + Makes a backup of and stores it in . The format for is + protocol://username:password@hostname:port/path?backend_option1=value1&backend_option2=value2. + Multiple source paths can be specified if they are separated by a space. - must not contain : and must not contain @. If they do, specify username and password using --auth-username and --auth-password. + must not contain : and must not contain @. If they do, specify username and password using --auth-username and --auth-password, or url-encode them. --auth-password= The password that is required to authenticate with the server the backup is stored on. diff --git a/Duplicati/Library/Main/Database/LocalRestoreDatabase.cs b/Duplicati/Library/Main/Database/LocalRestoreDatabase.cs index b604b2a79..aafb8994d 100644 --- a/Duplicati/Library/Main/Database/LocalRestoreDatabase.cs +++ b/Duplicati/Library/Main/Database/LocalRestoreDatabase.cs @@ -84,9 +84,9 @@ namespace Duplicati.Library.Main.Database sql = string.Format( @" INSERT INTO ""{0}"" (""FileId"", ""TotalBlocks"", ""TotalSize"", ""BlocksRestored"", ""SizeRestored"") " - + @" SELECT ""F"".""ID"", COUNT(""B"".""ID""), SUM(""B"".""Size"")" - + @" , COUNT(CASE ""B"".""Restored"" WHEN 1 THEN ""B"".""ID"" ELSE NULL END) " - + @" , SUM(CASE ""B"".""Restored"" WHEN 1 THEN ""B"".""Size"" ELSE 0 END) " + + @" SELECT ""F"".""ID"", IFNULL(COUNT(""B"".""ID""), 0), IFNULL(SUM(""B"".""Size""), 0)" + + @" , IFNULL(COUNT(CASE ""B"".""Restored"" WHEN 1 THEN ""B"".""ID"" ELSE NULL END), 0) " + + @" , IFNULL(SUM(CASE ""B"".""Restored"" WHEN 1 THEN ""B"".""Size"" ELSE 0 END), 0) " + @" FROM ""{1}"" ""F"" LEFT JOIN ""{2}"" ""B""" // allow for emtpy files (no data Blocks) + @" ON ""B"".""FileID"" = ""F"".""ID"" " + @" WHERE ""B"".""Metadata"" IS NOT 1 " // Use "IS" because of Left Join @@ -101,10 +101,10 @@ namespace Duplicati.Library.Main.Database + @" ""TotalFiles"", ""TotalBlocks"", ""TotalSize"" " + @", ""FilesFullyRestored"", ""FilesPartiallyRestored"", ""BlocksRestored"", ""SizeRestored""" + @" ) " - + @" SELECT COUNT(""P"".""FileId""), SUM(""P"".""TotalBlocks""), SUM(""P"".""TotalSize"") " - + @" , COUNT(CASE WHEN ""P"".""BlocksRestored"" = ""P"".""TotalBlocks"" THEN 1 ELSE NULL END) " - + @" , COUNT(CASE WHEN ""P"".""BlocksRestored"" BETWEEN 1 AND ""P"".""TotalBlocks"" - 1 THEN 1 ELSE NULL END) " - + @" , SUM(""P"".""BlocksRestored""), SUM(""P"".""SizeRestored"") " + + @" SELECT IFNULL(COUNT(""P"".""FileId""), 0), IFNULL(SUM(""P"".""TotalBlocks""), 0), IFNULL(SUM(""P"".""TotalSize""), 0) " + + @" , IFNULL(COUNT(CASE WHEN ""P"".""BlocksRestored"" = ""P"".""TotalBlocks"" THEN 1 ELSE NULL END), 0) " + + @" , IFNULL(COUNT(CASE WHEN ""P"".""BlocksRestored"" BETWEEN 1 AND ""P"".""TotalBlocks"" - 1 THEN 1 ELSE NULL END), 0) " + + @" , IFNULL(SUM(""P"".""BlocksRestored""), 0), IFNULL(SUM(""P"".""SizeRestored""), 0) " + @" FROM ""{1}"" ""P"" " , m_totalprogtable, m_fileprogtable); diff --git a/Duplicati/License/acknowledgements.txt b/Duplicati/License/acknowledgements.txt index 03fcf549e..88ac89257 100644 --- a/Duplicati/License/acknowledgements.txt +++ b/Duplicati/License/acknowledgements.txt @@ -11,6 +11,7 @@ Software Development: Sebastian Fahrenholz Malte Neumann Mostafa Aghajani + Stefan Lück The theme for Duplicati (ngax): Alexander Franzelin diff --git a/README.md b/README.md index 5fef77596..dc0819916 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ Duplicati is a free, open source, backup client that securely stores encrypted, * Google Drive (Google Docs) * Rackspace Cloud Files * HubiC + * Backblaze (B2) + * Amazon Cloud Drive (AmzCD) * Swift / OpenStack * WebDAV * SSH (SFTP)