mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-20 13:33:34 -07:00
Fixed: NET Core doing copy/delete instead of rename
This commit is contained in:
parent
cd30319019
commit
edea915cb6
3 changed files with 33 additions and 5 deletions
|
@ -78,6 +78,23 @@ namespace NzbDrone.Common.Test.DiskTests
|
||||||
File.Exists(destination).Should().BeTrue();
|
File.Exists(destination).Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
[Retry(5)]
|
||||||
|
public void MoveFile_should_not_overwrite_existing_file()
|
||||||
|
{
|
||||||
|
var source1 = GetTempFilePath();
|
||||||
|
var source2 = GetTempFilePath();
|
||||||
|
var destination = GetTempFilePath();
|
||||||
|
|
||||||
|
File.WriteAllText(source1, "SourceFile1");
|
||||||
|
File.WriteAllText(source2, "SourceFile2");
|
||||||
|
|
||||||
|
Subject.MoveFile(source1, destination);
|
||||||
|
Assert.Throws<IOException>(() => Subject.MoveFile(source2, destination, false));
|
||||||
|
|
||||||
|
File.ReadAllText(destination).Should().Be("SourceFile1");
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void MoveFile_should_not_move_overwrite_itself()
|
public void MoveFile_should_not_move_overwrite_itself()
|
||||||
{
|
{
|
||||||
|
|
|
@ -234,13 +234,18 @@ namespace NzbDrone.Common.Disk
|
||||||
throw new IOException(string.Format("Source and destination can't be the same {0}", source));
|
throw new IOException(string.Format("Source and destination can't be the same {0}", source));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileExists(destination) && overwrite)
|
var destExists = FileExists(destination);
|
||||||
|
|
||||||
|
if (destExists && overwrite)
|
||||||
{
|
{
|
||||||
DeleteFile(destination);
|
DeleteFile(destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveReadOnly(source);
|
RemoveReadOnly(source);
|
||||||
MoveFileInternal(source, destination);
|
|
||||||
|
// NET Core is too eager to copy/delete if overwrite is false
|
||||||
|
// Therefore we also set overwrite if we know destination doesn't exist
|
||||||
|
MoveFileInternal(source, destination, overwrite || !destExists);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveFolder(string source, string destination)
|
public void MoveFolder(string source, string destination)
|
||||||
|
@ -251,9 +256,15 @@ namespace NzbDrone.Common.Disk
|
||||||
Directory.Move(source, destination);
|
Directory.Move(source, destination);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void MoveFileInternal(string source, string destination)
|
protected virtual void MoveFileInternal(string source, string destination, bool overwrite)
|
||||||
{
|
{
|
||||||
|
#if NETCOREAPP
|
||||||
|
// This is a hack but the netcore specific overwrite parameter
|
||||||
|
// isn't availaboe via system.io.abstractions
|
||||||
|
File.Move(source, destination, overwrite);
|
||||||
|
#else
|
||||||
_fileSystem.File.Move(source, destination);
|
_fileSystem.File.Move(source, destination);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract bool TryCreateHardLink(string source, string destination);
|
public abstract bool TryCreateHardLink(string source, string destination);
|
||||||
|
|
|
@ -184,7 +184,7 @@ namespace NzbDrone.Mono.Disk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void MoveFileInternal(string source, string destination)
|
protected override void MoveFileInternal(string source, string destination, bool overwrite)
|
||||||
{
|
{
|
||||||
var sourceInfo = UnixFileSystemInfo.GetFileSystemEntry(source);
|
var sourceInfo = UnixFileSystemInfo.GetFileSystemEntry(source);
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ namespace NzbDrone.Mono.Disk
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
base.MoveFileInternal(source, destination);
|
base.MoveFileInternal(source, destination, overwrite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue