diff --git a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
index 6ba5fa970..1685273e7 100644
--- a/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
+++ b/BuildTools/AutoUpdateBuilder/AutoUpdateBuilder.csproj
@@ -31,7 +31,7 @@
- ..\..\thirdparty\Json.NET\Newtonsoft.Json.dll
+ packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll
@@ -69,4 +69,7 @@
Duplicati.License
+
+
+
\ No newline at end of file
diff --git a/BuildTools/AutoUpdateBuilder/packages.config b/BuildTools/AutoUpdateBuilder/packages.config
new file mode 100644
index 000000000..a272c64df
--- /dev/null
+++ b/BuildTools/AutoUpdateBuilder/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Tools/SQLiteTool/Main.cs b/Tools/SQLiteTool/Main.cs
index 3840377d6..dd23e3f03 100644
--- a/Tools/SQLiteTool/Main.cs
+++ b/Tools/SQLiteTool/Main.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
namespace SQLiteTool
{
@@ -14,20 +15,31 @@ namespace SQLiteTool
return;
}
- using (var connection = (System.Data.IDbConnection)Activator.CreateInstance(Duplicati.Library.Utility.SQLiteLoader.SQLiteConnectionType))
+ using (var connection = (System.Data.IDbConnection)Activator.CreateInstance(Duplicati.Library.SQLiteHelper.SQLiteLoader.SQLiteConnectionType))
{
- connection.ConnectionString = "Data Source=" + args[0];
+ if ((args[0] ?? string.Empty).IndexOf("Data Source", StringComparison.OrdinalIgnoreCase) >= 0)
+ connection.ConnectionString = args[0];
+ else
+ connection.ConnectionString = "Data Source=" + args[0];
+
+ Console.WriteLine("Opening with connection string: {0}", connection.ConnectionString);
+
connection.Open();
- var query = args[1];
- try { query = System.IO.File.ReadAllText(args[1]); }
+ var query = args[1] ?? string.Empty;
+ try
+ {
+ if (query.IndexOfAny(Path.GetInvalidPathChars()) < 0 && File.Exists(query))
+ query = System.IO.File.ReadAllText(args[1]);
+ }
catch {}
var begin = DateTime.Now;
using(var cmd = connection.CreateCommand())
{
- cmd.CommandText = query;
+ cmd.CommandText = query;
+ Console.WriteLine("Setting query: {0}", cmd.CommandText);
using (var rd = cmd.ExecuteReader())
{
Console.WriteLine("Execution took: {0:mm\\:ss\\.fff}", DateTime.Now - begin);
diff --git a/Tools/SQLiteTool/SQLiteTool.csproj b/Tools/SQLiteTool/SQLiteTool.csproj
index ef01989e5..04d4d84b3 100644
--- a/Tools/SQLiteTool/SQLiteTool.csproj
+++ b/Tools/SQLiteTool/SQLiteTool.csproj
@@ -10,6 +10,7 @@
False
SQLiteTool
SQLiteTool
+ v4.5
full
@@ -35,9 +36,9 @@
-
- {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}
- Duplicati.Library.Utility
+
+ {2C838169-B187-4B09-8768-1C24C2521C8D}
+ Duplicati.Library.SQLiteHelper
diff --git a/Tools/SQLiteTool/SQLiteTool.sln b/Tools/SQLiteTool/SQLiteTool.sln
index 3a84d0822..918a95dc7 100644
--- a/Tools/SQLiteTool/SQLiteTool.sln
+++ b/Tools/SQLiteTool/SQLiteTool.sln
@@ -5,6 +5,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SQLiteTool", "SQLiteTool.cs
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Utility", "..\..\Duplicati\Library\Utility\Duplicati.Library.Utility.csproj", "{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Localization", "..\..\Duplicati\Library\Localization\Duplicati.Library.Localization.csproj", "{B68F2214-951F-4F78-8488-66E1ED3F50BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.SQLiteHelper", "..\..\Duplicati\Library\SQLiteHelper\Duplicati.Library.SQLiteHelper.csproj", "{2C838169-B187-4B09-8768-1C24C2521C8D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Interface", "..\..\Duplicati\Library\Interface\Duplicati.Library.Interface.csproj", "{C5899F45-B0FF-483C-9D38-24A9FCAAB237}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -19,6 +25,18 @@ Global
{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C838169-B187-4B09-8768-1C24C2521C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2C838169-B187-4B09-8768-1C24C2521C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C838169-B187-4B09-8768-1C24C2521C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2C838169-B187-4B09-8768-1C24C2521C8D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = SQLiteTool.csproj
diff --git a/Tools/ZipFileDebugger/Program.cs b/Tools/ZipFileDebugger/Program.cs
new file mode 100644
index 000000000..035052102
--- /dev/null
+++ b/Tools/ZipFileDebugger/Program.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+namespace ZipFileDebugger
+{
+ class MainClass
+ {
+ public static void Main(string[] _args)
+ {
+ var args = new List(_args);
+ var opts = Duplicati.Library.Utility.CommandLineParser.ExtractOptions(args, null);
+
+ if (args == null || args.Count == 0)
+ {
+ Console.WriteLine("Usage:");
+ Console.WriteLine("{0} ", System.Reflection.Assembly.GetEntryAssembly().Location);
+ return;
+ }
+
+ Duplicati.Library.Logging.Log.LogLevel = Duplicati.Library.Logging.LogMessageType.Profiling;
+ Duplicati.Library.Logging.Log.CurrentLog = new Duplicati.Library.Logging.StreamLog(Console.OpenStandardOutput());
+
+ var filecount = 0;
+ var errorcount = 0;
+ foreach (var file in args)
+ {
+ if (!File.Exists(file))
+ {
+ Console.WriteLine("File not found: {0}", file);
+ continue;
+ }
+
+ if (new FileInfo(file).Length == 0)
+ {
+ Console.WriteLine("File is emtpy: {0}", file);
+ continue;
+ }
+
+ Console.WriteLine("Opening zip file {0}", file);
+
+ var errors = false;
+
+ try
+ {
+ filecount++;
+ using (var zr = new Duplicati.Library.Compression.FileArchiveZip(file, opts))
+ {
+ var files = zr.ListFilesWithSize(null).ToArray();
+ Console.WriteLine("Found {0} files in archive, testing read-ability for each", files.Length);
+
+ for (var i = 0; i < files.Length; i++)
+ {
+ Console.Write("Opening file #{0} - {1}", i + 1, files[i].Key);
+ try
+ {
+ using (var ms = new MemoryStream())
+ using (var sr = zr.OpenRead(files[i].Key))
+ {
+ sr.CopyTo(ms);
+
+ if (ms.Length == files[i].Value)
+ Console.WriteLine(" -- success");
+ else
+ Console.WriteLine(" -- bad length: {0} vs {1}", ms.Length, files[i].Value);
+ }
+ }
+ catch (Exception ex)
+ {
+ errors = true;
+ Console.WriteLine(" -- failed: {0}", ex);
+ }
+
+ }
+ }
+
+ if (errors)
+ {
+ Console.WriteLine("Found errors while processing file {0}", file);
+ errorcount++;
+ }
+ else
+ Console.WriteLine("Processed file {0} with no errors", file);
+ }
+ catch (Exception ex)
+ {
+ errorcount++;
+ Console.WriteLine("Open failed: {0}", ex);
+ }
+ }
+
+ Console.Write("Processed {0} zip files", filecount);
+ if (errorcount == 0)
+ Console.WriteLine(" without errors");
+ else
+ Console.WriteLine(" and found {0} errors", errorcount);
+ }
+ }
+}
diff --git a/Tools/ZipFileDebugger/Properties/AssemblyInfo.cs b/Tools/ZipFileDebugger/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..581bb7691
--- /dev/null
+++ b/Tools/ZipFileDebugger/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("ZipFileDebugger")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/Tools/ZipFileDebugger/ZipFileDebugger.csproj b/Tools/ZipFileDebugger/ZipFileDebugger.csproj
new file mode 100644
index 000000000..8ad515a68
--- /dev/null
+++ b/Tools/ZipFileDebugger/ZipFileDebugger.csproj
@@ -0,0 +1,51 @@
+
+
+
+ Debug
+ AnyCPU
+ {669E137C-1DD4-4134-81E8-D94C467392A9}
+ Exe
+ ZipFileDebugger
+ ZipFileDebugger
+ v4.6.1
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ 4
+
+
+ true
+ bin\Release
+ 4
+
+
+
+
+
+
+
+
+
+
+ {19ECCE09-B5EB-406C-8C57-BAC66997D469}
+ Duplicati.Library.Compression
+
+
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}
+ Duplicati.Library.Interface
+
+
+ {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}
+ Duplicati.Library.Utility
+
+
+ {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}
+ Duplicati.Library.Logging
+
+
+
+
\ No newline at end of file
diff --git a/Tools/ZipFileDebugger/ZipFileDebugger.sln b/Tools/ZipFileDebugger/ZipFileDebugger.sln
new file mode 100644
index 000000000..5a51e47a6
--- /dev/null
+++ b/Tools/ZipFileDebugger/ZipFileDebugger.sln
@@ -0,0 +1,47 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZipFileDebugger", "ZipFileDebugger.csproj", "{669E137C-1DD4-4134-81E8-D94C467392A9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Compression", "..\..\Duplicati\Library\Compression\Duplicati.Library.Compression.csproj", "{19ECCE09-B5EB-406C-8C57-BAC66997D469}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Interface", "..\..\Duplicati\Library\Interface\Duplicati.Library.Interface.csproj", "{C5899F45-B0FF-483C-9D38-24A9FCAAB237}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Localization", "..\..\Duplicati\Library\Localization\Duplicati.Library.Localization.csproj", "{B68F2214-951F-4F78-8488-66E1ED3F50BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Logging", "..\..\Duplicati\Library\Logging\Duplicati.Library.Logging.csproj", "{D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Duplicati.Library.Utility", "..\..\Duplicati\Library\Utility\Duplicati.Library.Utility.csproj", "{DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {669E137C-1DD4-4134-81E8-D94C467392A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {669E137C-1DD4-4134-81E8-D94C467392A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {669E137C-1DD4-4134-81E8-D94C467392A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {669E137C-1DD4-4134-81E8-D94C467392A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19ECCE09-B5EB-406C-8C57-BAC66997D469}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5899F45-B0FF-483C-9D38-24A9FCAAB237}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B68F2214-951F-4F78-8488-66E1ED3F50BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D10A5FC0-11B4-4E70-86AA-8AEA52BD9798}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE3E5D4C-51AB-4E5E-BEE8-E636CEBFBA65}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal