diff options
| -rw-r--r-- | receivepack/internal/service/quarantine.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/receivepack/internal/service/quarantine.go b/receivepack/internal/service/quarantine.go index 101cadc7..e028f54d 100644 --- a/receivepack/internal/service/quarantine.go +++ b/receivepack/internal/service/quarantine.go @@ -141,16 +141,25 @@ func finalizeQuarantineFile(root *os.Root, src, dst string, skipCollisionCheck b if statErr == nil { err = fs.ErrExist } else if errors.Is(statErr, fs.ErrNotExist) { - if renameErr := root.Rename(src, dst); renameErr == nil { + renameErr := root.Rename(src, dst) + if renameErr == nil { return nil } - return fmt.Errorf("promote quarantine %q -> %q: %w", src, dst, err) + err = renameErr } else { + _ = root.Remove(src) + return statErr } } + if !errors.Is(err, fs.ErrExist) { + _ = root.Remove(src) + + return fmt.Errorf("promote quarantine %q -> %q: %w", src, dst, err) + } + if skipCollisionCheck { _ = root.Remove(src) |
