aboutsummaryrefslogtreecommitdiff
path: root/receivepack/internal
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-07 21:01:13 +0800
committerGravatar Runxi Yu2026-03-07 21:16:05 +0800
commitd86d30116b7509e616d4dfedc8b9aca2db5ae3e8 (patch)
tree433b0aabe9d9dac194bd689aad5ca177311658df /receivepack/internal
parentreceivepack: Use refs (diff)
signatureNo signature
receivepack: Propagate the rename error properly
Diffstat (limited to 'receivepack/internal')
-rw-r--r--receivepack/internal/service/quarantine.go13
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)