ref: 344d0c4d3c968506f5641da40fce581ea5bcdbbc
parent: b82515530f10dfebbf99dca501890570f3466910
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 16:21:26 EST 2026
receivepack: Re-organize things around
--- /dev/null
+++ b/receivepack/commands.go
@@ -1,0 +1,19 @@
+package receivepack
+
+import (
+ protoreceive "codeberg.org/lindenii/furgit/protocol/v0v1/server/receivepack"
+ "codeberg.org/lindenii/furgit/receivepack/internal/service"
+)
+
+func translateCommands(commands []protoreceive.Command) []service.Command {+ out := make([]service.Command, 0, len(commands))
+ for _, command := range commands {+ out = append(out, service.Command{+ OldID: command.OldID,
+ NewID: command.NewID,
+ Name: command.Name,
+ })
+ }
+
+ return out
+}
--- a/receivepack/hook.go
+++ b/receivepack/hook.go
@@ -5,6 +5,7 @@
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objectstore"
+ "codeberg.org/lindenii/furgit/receivepack/internal/service"
"codeberg.org/lindenii/furgit/refstore"
)
@@ -37,3 +38,41 @@
// promotion or ref updates. The returned decisions must have the same length as
// HookRequest.Updates.
type Hook func(context.Context, HookRequest) ([]UpdateDecision, error)
+
+func translateHook(hook Hook) service.Hook {+ if hook == nil {+ return nil
+ }
+
+ return func(ctx context.Context, req service.HookRequest) ([]service.UpdateDecision, error) {+ translatedUpdates := make([]RefUpdate, 0, len(req.Updates))
+ for _, update := range req.Updates {+ translatedUpdates = append(translatedUpdates, RefUpdate{+ Name: update.Name,
+ OldID: update.OldID,
+ NewID: update.NewID,
+ })
+ }
+
+ decisions, err := hook(ctx, HookRequest{+ Refs: req.Refs,
+ ExistingObjects: req.ExistingObjects,
+ QuarantinedObjects: req.QuarantinedObjects,
+ Updates: translatedUpdates,
+ PushOptions: append([]string(nil), req.PushOptions...),
+ })
+ if err != nil {+ return nil, err
+ }
+
+ out := make([]service.UpdateDecision, 0, len(decisions))
+ for _, decision := range decisions {+ out = append(out, service.UpdateDecision{+ Accept: decision.Accept,
+ Message: decision.Message,
+ })
+ }
+
+ return out, nil
+ }
+}
--- a/receivepack/internal/service/quarantine_objects.go
+++ b/receivepack/internal/service/quarantine_objects.go
@@ -4,9 +4,9 @@
"os"
"codeberg.org/lindenii/furgit/objectstore"
- objectmix "codeberg.org/lindenii/furgit/objectstore/mix"
- "codeberg.org/lindenii/furgit/objectstore/memory"
"codeberg.org/lindenii/furgit/objectstore/loose"
+ "codeberg.org/lindenii/furgit/objectstore/memory"
+ objectmix "codeberg.org/lindenii/furgit/objectstore/mix"
"codeberg.org/lindenii/furgit/objectstore/packed"
)
--- a/receivepack/options.go
+++ b/receivepack/options.go
@@ -1,7 +1,6 @@
package receivepack
import (
- "io/fs"
"os"
"codeberg.org/lindenii/furgit/objectid"
@@ -8,13 +7,6 @@
"codeberg.org/lindenii/furgit/objectstore"
"codeberg.org/lindenii/furgit/refstore"
)
-
-// PromotedObjectPermissions configures the destination permissions applied to
-// objects and directories promoted out of quarantine.
-type PromotedObjectPermissions struct {- DirMode fs.FileMode
- FileMode fs.FileMode
-}
// Options configures one receive-pack invocation.
type Options struct {--- /dev/null
+++ b/receivepack/permissions.go
@@ -1,0 +1,27 @@
+package receivepack
+
+import (
+ "io/fs"
+
+ "codeberg.org/lindenii/furgit/receivepack/internal/service"
+)
+
+// PromotedObjectPermissions configures the destination permissions applied to
+// objects and directories promoted out of quarantine.
+type PromotedObjectPermissions struct {+ DirMode fs.FileMode
+ FileMode fs.FileMode
+}
+
+func translatePromotedObjectPermissions(
+ perms *PromotedObjectPermissions,
+) *service.PromotedObjectPermissions {+ if perms == nil {+ return nil
+ }
+
+ return &service.PromotedObjectPermissions{+ DirMode: perms.DirMode,
+ FileMode: perms.FileMode,
+ }
+}
--- a/receivepack/receivepack.go
+++ b/receivepack/receivepack.go
@@ -94,54 +94,3 @@
return nil
}
-
-func translatePromotedObjectPermissions(
- perms *PromotedObjectPermissions,
-) *service.PromotedObjectPermissions {- if perms == nil {- return nil
- }
-
- return &service.PromotedObjectPermissions{- DirMode: perms.DirMode,
- FileMode: perms.FileMode,
- }
-}
-
-func translateHook(hook Hook) service.Hook {- if hook == nil {- return nil
- }
-
- return func(ctx context.Context, req service.HookRequest) ([]service.UpdateDecision, error) {- translatedUpdates := make([]RefUpdate, 0, len(req.Updates))
- for _, update := range req.Updates {- translatedUpdates = append(translatedUpdates, RefUpdate{- Name: update.Name,
- OldID: update.OldID,
- NewID: update.NewID,
- })
- }
-
- decisions, err := hook(ctx, HookRequest{- Refs: req.Refs,
- ExistingObjects: req.ExistingObjects,
- QuarantinedObjects: req.QuarantinedObjects,
- Updates: translatedUpdates,
- PushOptions: append([]string(nil), req.PushOptions...),
- })
- if err != nil {- return nil, err
- }
-
- out := make([]service.UpdateDecision, 0, len(decisions))
- for _, decision := range decisions {- out = append(out, service.UpdateDecision{- Accept: decision.Accept,
- Message: decision.Message,
- })
- }
-
- return out, nil
- }
-}
--- /dev/null
+++ b/receivepack/results.go
@@ -1,0 +1,26 @@
+package receivepack
+
+import (
+ protoreceive "codeberg.org/lindenii/furgit/protocol/v0v1/server/receivepack"
+ "codeberg.org/lindenii/furgit/receivepack/internal/service"
+)
+
+func translateResult(result *service.Result) protoreceive.ReportStatusResult {+ out := protoreceive.ReportStatusResult{+ UnpackError: result.UnpackError,
+ Commands: make([]protoreceive.CommandResult, 0, len(result.Commands)),
+ }
+
+ for _, command := range result.Commands {+ out.Commands = append(out.Commands, protoreceive.CommandResult{+ Name: command.Name,
+ Error: command.Error,
+ RefName: command.RefName,
+ OldID: command.OldID,
+ NewID: command.NewID,
+ ForcedUpdate: command.ForcedUpdate,
+ })
+ }
+
+ return out
+}
--- a/receivepack/translate.go
+++ /dev/null
@@ -1,39 +1,0 @@
-package receivepack
-
-import (
- protoreceive "codeberg.org/lindenii/furgit/protocol/v0v1/server/receivepack"
- "codeberg.org/lindenii/furgit/receivepack/internal/service"
-)
-
-func translateCommands(commands []protoreceive.Command) []service.Command {- out := make([]service.Command, 0, len(commands))
- for _, command := range commands {- out = append(out, service.Command{- OldID: command.OldID,
- NewID: command.NewID,
- Name: command.Name,
- })
- }
-
- return out
-}
-
-func translateResult(result *service.Result) protoreceive.ReportStatusResult {- out := protoreceive.ReportStatusResult{- UnpackError: result.UnpackError,
- Commands: make([]protoreceive.CommandResult, 0, len(result.Commands)),
- }
-
- for _, command := range result.Commands {- out.Commands = append(out.Commands, protoreceive.CommandResult{- Name: command.Name,
- Error: command.Error,
- RefName: command.RefName,
- OldID: command.OldID,
- NewID: command.NewID,
- ForcedUpdate: command.ForcedUpdate,
- })
- }
-
- return out
-}
--
⑨