shithub: furgit

Download patch

ref: d86d30116b7509e616d4dfedc8b9aca2db5ae3e8
parent: 8aa2e9f0903a80c90a9d8308138439d6f8732050
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 16:01:13 EST 2026

receivepack: Propagate the rename error properly

--- a/receivepack/internal/service/quarantine.go
+++ b/receivepack/internal/service/quarantine.go
@@ -141,14 +141,23 @@
 			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 {
--