diff --git a/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs b/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs index 3b51dd97a..1b30efbc7 100644 --- a/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs +++ b/src/NzbDrone.Common.Test/DiskTests/DiskTransferServiceFixture.cs @@ -378,7 +378,7 @@ public void should_log_error_if_rollback_partialmove_fails() } [Test] - public void mode_transactional_should_delete_old_backup() + public void mode_transactional_should_delete_old_backup_on_move() { Subject.VerificationMode = DiskTransferVerificationMode.Transactional; @@ -393,7 +393,7 @@ public void mode_transactional_should_delete_old_backup() } [Test] - public void mode_transactional_should_delete_old_partial() + public void mode_transactional_should_delete_old_partial_on_move() { Subject.VerificationMode = DiskTransferVerificationMode.Transactional; @@ -407,6 +407,19 @@ public void mode_transactional_should_delete_old_partial() .Verify(v => v.DeleteFile(_tempTargetPath), Times.Once()); } + [Test] + public void mode_transactional_should_delete_old_partial_on_copy() + { + Subject.VerificationMode = DiskTransferVerificationMode.Transactional; + + WithExistingFile(_tempTargetPath); + + Subject.TransferFile(_sourcePath, _targetPath, TransferMode.Copy); + + Mocker.GetMock() + .Verify(v => v.DeleteFile(_tempTargetPath), Times.Once()); + } + [Test] public void mode_transactional_should_hardlink_before_move() { diff --git a/src/NzbDrone.Common/Disk/DiskTransferService.cs b/src/NzbDrone.Common/Disk/DiskTransferService.cs index 0a2e20218..130bed7f5 100644 --- a/src/NzbDrone.Common/Disk/DiskTransferService.cs +++ b/src/NzbDrone.Common/Disk/DiskTransferService.cs @@ -316,6 +316,12 @@ private bool TryCopyFile(string sourcePath, string targetPath) var tempTargetPath = targetPath + ".partial~"; + if (_diskProvider.FileExists(tempTargetPath)) + { + _logger.Trace("Removing old partial."); + _diskProvider.DeleteFile(tempTargetPath); + } + try { for (var i = 0; i <= RetryCount; i++)