Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/duplicati/duplicati.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDean Ferreyra <dean@octw.com>2020-07-28 04:35:39 +0300
committerDean Ferreyra <dean@octw.com>2020-07-28 15:51:53 +0300
commit73e31a79a1c8759f2acacda0c7edb4b8a4aa6660 (patch)
tree14fc5e377035d913787acf2140d5143f1f5a356c /Duplicati/Library/Common/IO
parente7daffcb3105c0c43770cc79084740016ba44170 (diff)
Change tests to work with long paths in Windows
Even in .NET 4.6.2 `System.IO.Compression.ZipFile.ExtractToDirectory()` cannot handle long paths. Replace call to `System.IO.Compression.ZipFile.ExtractToDirectory()` with an equivalent that extracts files to a temporary location and uses I/O functions that support long paths to move them to their final location. In CommandLineOperationsTests.cs, use ISystemIO functions to handle potentially long paths. Add a fix to RecoveryTool for long paths that was missed by #4258. This fixes #3863.
Diffstat (limited to 'Duplicati/Library/Common/IO')
-rw-r--r--Duplicati/Library/Common/IO/ISystemIO.cs3
-rw-r--r--Duplicati/Library/Common/IO/SystemIOLinux.cs14
-rw-r--r--Duplicati/Library/Common/IO/SystemIOWindows.cs15
3 files changed, 32 insertions, 0 deletions
diff --git a/Duplicati/Library/Common/IO/ISystemIO.cs b/Duplicati/Library/Common/IO/ISystemIO.cs
index 2c3196324..654e72449 100644
--- a/Duplicati/Library/Common/IO/ISystemIO.cs
+++ b/Duplicati/Library/Common/IO/ISystemIO.cs
@@ -29,7 +29,9 @@ namespace Duplicati.Library.Common.IO
{
IFileEntry DirectoryEntry(string path);
void DirectoryCreate(string path);
+ void DirectoryDelete(string path, bool recursive);
bool DirectoryExists(string path);
+ void DirectoryMove(string sourceDirName, string destDirName);
void DirectorySetLastWriteTimeUtc(string path, DateTime time);
void DirectorySetCreationTimeUtc(string path, DateTime time);
@@ -64,6 +66,7 @@ namespace Duplicati.Library.Common.IO
DateTime GetLastWriteTimeUtc(string path);
IEnumerable<string> EnumerateFileSystemEntries(string path);
IEnumerable<string> EnumerateFiles(string path);
+ IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption);
IEnumerable<string> EnumerateDirectories(string path);
void SetMetadata(string path, Dictionary<string, string> metdata, bool restorePermissions);
diff --git a/Duplicati/Library/Common/IO/SystemIOLinux.cs b/Duplicati/Library/Common/IO/SystemIOLinux.cs
index 180867b48..1acb95b47 100644
--- a/Duplicati/Library/Common/IO/SystemIOLinux.cs
+++ b/Duplicati/Library/Common/IO/SystemIOLinux.cs
@@ -32,11 +32,21 @@ namespace Duplicati.Library.Common.IO
Directory.CreateDirectory(NormalizePath(path));
}
+ public void DirectoryDelete(string path, bool recursive)
+ {
+ Directory.Delete(NormalizePath(path), recursive);
+ }
+
public bool DirectoryExists(string path)
{
return Directory.Exists(NormalizePath(path));
}
+ public void DirectoryMove(string sourceDirName, string destDirName)
+ {
+ System.IO.Directory.Move(NormalizePath(sourceDirName), NormalizePath(destDirName));
+ }
+
public void FileDelete(string path)
{
File.Delete(path);
@@ -117,6 +127,10 @@ namespace Duplicati.Library.Common.IO
return Directory.EnumerateFiles(path);
}
+ public IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption)
+ {
+ return Directory.EnumerateFiles(path, searchPattern, searchOption);
+ }
public string PathGetFileName(string path)
{
diff --git a/Duplicati/Library/Common/IO/SystemIOWindows.cs b/Duplicati/Library/Common/IO/SystemIOWindows.cs
index faeb920e5..8396730d3 100644
--- a/Duplicati/Library/Common/IO/SystemIOWindows.cs
+++ b/Duplicati/Library/Common/IO/SystemIOWindows.cs
@@ -174,11 +174,21 @@ namespace Duplicati.Library.Common.IO
System.IO.Directory.CreateDirectory(PrefixWithUNC(path));
}
+ public void DirectoryDelete(string path, bool recursive)
+ {
+ System.IO.Directory.Delete(PrefixWithUNC(path), recursive);
+ }
+
public bool DirectoryExists(string path)
{
return System.IO.Directory.Exists(PrefixWithUNC(path));
}
+ public void DirectoryMove(string sourceDirName, string destDirName)
+ {
+ System.IO.Directory.Move(PrefixWithUNC(sourceDirName), PrefixWithUNC(destDirName));
+ }
+
public void FileDelete(string path)
{
System.IO.File.Delete(PrefixWithUNC(path));
@@ -266,6 +276,11 @@ namespace Duplicati.Library.Common.IO
return System.IO.Directory.EnumerateFiles(PrefixWithUNC(path)).Select(StripUNCPrefix);
}
+ public IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption)
+ {
+ return System.IO.Directory.EnumerateFiles(PrefixWithUNC(path), searchPattern, searchOption).Select(StripUNCPrefix);
+ }
+
public string PathGetFileName(string path)
{
return StripUNCPrefix(System.IO.Path.GetFileName(PrefixWithUNC(path)));