diff --git a/NzbDrone.Common.Test/DiskProviderTests.cs b/NzbDrone.Common.Test/DiskProviderTests.cs index c842fbf085..4e841281d9 100644 --- a/NzbDrone.Common.Test/DiskProviderTests.cs +++ b/NzbDrone.Common.Test/DiskProviderTests.cs @@ -34,6 +34,20 @@ public void Setup() } } + [Test] + public void moveFile_should_overwrite_existing_file() + { + var diskProvider = new DiskProvider(); + diskProvider.CopyDirectory(BinFolder.FullName, BinFolderCopy.FullName); + + var targetPath = Path.Combine(BinFolderCopy.FullName, "file.move"); + + diskProvider.MoveFile(BinFolderCopy.GetFiles("*.dll", SearchOption.AllDirectories).First().FullName, targetPath); + diskProvider.MoveFile(BinFolderCopy.GetFiles("*.dll", SearchOption.AllDirectories).First().FullName, targetPath); + + File.Exists(targetPath).Should().BeTrue(); + } + [Test] public void CopyFolder_should_copy_folder() { @@ -45,6 +59,7 @@ public void CopyFolder_should_copy_folder() VerifyCopy(); } + [Test] public void CopyFolder_should_overright_existing_folder() { diff --git a/NzbDrone.Common/DiskProvider.cs b/NzbDrone.Common/DiskProvider.cs index 2099bb7f68..4db625e94b 100644 --- a/NzbDrone.Common/DiskProvider.cs +++ b/NzbDrone.Common/DiskProvider.cs @@ -98,24 +98,20 @@ private void TransferDirectory(string source, string target, TransferAction tran TransferDirectory(subDir.FullName, Path.Combine(target, subDir.Name), transferAction); } - foreach (var file in sourceFolder.GetFiles("*.*", SearchOption.TopDirectoryOnly)) + foreach (var sourceFile in sourceFolder.GetFiles("*.*", SearchOption.TopDirectoryOnly)) { - var destFile = Path.Combine(target, file.Name); + var destFile = Path.Combine(target, sourceFile.Name); switch (transferAction) { case TransferAction.Copy: { - file.CopyTo(destFile, true); + sourceFile.CopyTo(destFile, true); break; } case TransferAction.Move: { - if (FileExists(destFile)) - { - File.Delete(destFile); - } - file.MoveTo(destFile); + MoveFile(sourceFile.FullName, destFile); break; } } @@ -130,6 +126,11 @@ public virtual void DeleteFile(string path) public virtual void MoveFile(string sourcePath, string destinationPath) { + if (FileExists(destinationPath)) + { + DeleteFile(destinationPath); + } + File.Move(sourcePath, destinationPath); } diff --git a/NzbDrone.Update.Test/UpdateProviderStartFixture.cs b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs index 02853de303..7cfd0d73bc 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartFixture.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs @@ -130,7 +130,7 @@ public void should_create_backup_of_current_installation() public void should_copy_update_package_to_target() { Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); + .Setup(c => c.MoveDirectory(UPDATE_FOLDER, TARGET_FOLDER)); Mocker.Resolve().Start(TARGET_FOLDER); } @@ -139,7 +139,7 @@ public void should_copy_update_package_to_target() public void should_restore_if_update_fails() { Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Setup(c => c.MoveDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); //Act @@ -184,7 +184,7 @@ public void should_restart_service_if_service_was_running_and_update_fails() WithServiceRunning(true); Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Setup(c => c.MoveDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); //Act @@ -202,7 +202,7 @@ public void should_restart_process_if_service_was_not_running_and_update_fails() WithServiceRunning(false); Mocker.GetMock() - .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Setup(c => c.MoveDirectory(UPDATE_FOLDER, TARGET_FOLDER)) .Throws(new IOException()); //Act diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index 05bcc76d1c..969879d77d 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -68,11 +68,11 @@ public virtual void Start(string targetFolder) _diskProvider.CopyDirectory(targetFolder, _enviromentProvider.GetUpdateBackUpFolder()); - logger.Info("Copying update package to target"); + logger.Info("Moving update package to target"); try { - _diskProvider.CopyDirectory(_enviromentProvider.GetUpdatePackageFolder(), targetFolder); + _diskProvider.MoveDirectory(_enviromentProvider.GetUpdatePackageFolder(), targetFolder); } catch (Exception e) {