This fixes the restore issues as all sources will now appear as if they were originally part of the source file system.
The backend implementation has now been simplified so the backends only return names of entries with no path information. Most backends already do this, but the S3 backends did not, so this was fixed as well.
This also clears up the interfaces, so the backend does not know about the `ISourceProviderEntry`. All mapping is done by the `BackendSourceProvider`, making it simpler to support other backends as sources.
Made the SMBShareConnection slightly more robust.
Introduced v2 List API to S3 backend, currently it retains v1 as the default.
Changed S3 backends to not recurse, potentially making smaller listings. This option can be disabled if it breaks things.
Added support for relative paths in the SSH backend.
With this interface it is possible to wrap the current support for snapshots and USN and simplify the enumeration.
This makes a number of assumptions into fields such as `IsMetaEntry` and `IsRootEntry` that removes code that was checking for various properties.
This first commit has support for VSS and USN as well as "naked" files, keeping feature parity.
There is also an experimental support for loading a backend-as-a-source. The support for this is currently limited as the backends need to be extended to support a folder concept.
When setting the folder permissions on an existing folder, it would remove the permissions on items inside the folder.
This would cause the files and subfolders to have zero permissions, and reject any interaction.
Added support for `--portable-mode` and `--server-datafolder` for the CLI, ServerUtil, and Agent.
Fixed a few places where file reads were not cached properly.
Moved some responsibilities of UpdaterManager into DataFolderManager.
This now supports storing `machineid.txt` and `installation.txt` inside the path pointed to by `--server-datafolder` or alternatively with `--portable-mode`.
It is possible that some fringe backwards compatibility is lost with this update.
Fixed an issue with AutoUpdater crashing on check/download.
This fixes#5902
None of these changes have impact on code execution, they are mainly part of the effort to remove all build warnings.
The removal of Thread.ResetAbort leaves a TODO for us to integrate CancelationToken when it gets propagated down here on future changes.
When getting the value from FileSystemInfo.LastAccessTime, it will internally convert
the FILETIME value from Windows API to a DateTime. If the value represents a date after
12/31/9999 it will throw ArgumentOutOfRangeException, because this is not supported by
DateTime. Some file systems seem to set strange access timestamps on files, which
may lead to this exception being thrown. Since the last accessed timestamp is not
important such exceptions are now just silently ignored.
Fix SystemIOWindows.PathGetFullPath per review comments.
Add unit tests for SystemIOWindows.PathGetFullPath and SystemIOWindows.PrefixWithUNC. Also, fix a bug in the SystemIOWindows.PrefixWithUNC change that was exposed by these new unit tests.
In BackendToolTests, remove unused [Setup] and [TearDown] methods.
The handling of relative paths in SystemIOWindows was broken by changes for #4256.
Change SystemIOWindows.PrefixWithUNC to only prefix paths with `\\?\` when they can be prefixed; i.e., only prefix paths that are fully qualified and that don't contain relative path components like `.` or `..`. This way, relative paths passed to SystemIOWindows methods work correctly again. Also support network paths specified using forward slashes; e.g., `//example.com/share/foo.txt`.
Simplify SystemIOWindows.GetFullPath since Path.GetFullPath will honor `\\?\` prefixes and can replace forward slashes with backslashes, etc.
Copy and adapt source for Path.IsPathFullyQualified from https://github.com/dotnet/runtime, which is MIT licensed.
Add unit test for Duplicati.CommandLine.BackendTool to validate the fix.
This fixes#4632.