diff options
author | Dean Ferreyra <dean@octw.com> | 2020-07-28 04:35:39 +0300 |
---|---|---|
committer | Dean Ferreyra <dean@octw.com> | 2020-07-28 15:51:53 +0300 |
commit | 73e31a79a1c8759f2acacda0c7edb4b8a4aa6660 (patch) | |
tree | 14fc5e377035d913787acf2140d5143f1f5a356c /Duplicati/Library/Common/IO | |
parent | e7daffcb3105c0c43770cc79084740016ba44170 (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.cs | 3 | ||||
-rw-r--r-- | Duplicati/Library/Common/IO/SystemIOLinux.cs | 14 | ||||
-rw-r--r-- | Duplicati/Library/Common/IO/SystemIOWindows.cs | 15 |
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)));
|