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