aboutsummaryrefslogtreecommitdiff
path: root/receivepack/internal/service/quarantine.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-07 14:24:22 +0800
committerGravatar Runxi Yu2026-03-07 17:17:14 +0800
commitdc7ce00cbe3c300caac3c13b6701240126b99e00 (patch)
treea00d516403fa7f7c5662937f7391e5d843b286d7 /receivepack/internal/service/quarantine.go
parentrefstore/files: Add new files backend (diff)
signatureNo signature
receivepack: Add service semantics thingy
Diffstat (limited to 'receivepack/internal/service/quarantine.go')
-rw-r--r--receivepack/internal/service/quarantine.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/receivepack/internal/service/quarantine.go b/receivepack/internal/service/quarantine.go
new file mode 100644
index 00000000..17ff6279
--- /dev/null
+++ b/receivepack/internal/service/quarantine.go
@@ -0,0 +1,26 @@
+package service
+
+import (
+ "crypto/rand"
+ "os"
+)
+
+// createQuarantineRoot creates one per-push quarantine directory beneath the
+// permanent objects root.
+func (service *Service) createQuarantineRoot() (string, *os.Root, error) {
+ name := "tmp_objdir-incoming-" + rand.Text()
+
+ err := service.opts.ObjectsRoot.Mkdir(name, 0o700)
+ if err != nil {
+ return "", nil, err
+ }
+
+ root, err := service.opts.ObjectsRoot.OpenRoot(name)
+ if err != nil {
+ _ = service.opts.ObjectsRoot.RemoveAll(name)
+
+ return "", nil, err
+ }
+
+ return name, root, nil
+}