diff options
| author | 2026-03-07 21:21:26 +0800 | |
|---|---|---|
| committer | 2026-03-07 21:21:26 +0800 | |
| commit | 344d0c4d3c968506f5641da40fce581ea5bcdbbc (patch) | |
| tree | b3a03c39dda50cee5154a756a57e4a9d1754d6ae /receivepack | |
| parent | receivepack: Add hooks (diff) | |
| signature | No signature | |
receivepack: Re-organize things around
Diffstat (limited to 'receivepack')
| -rw-r--r-- | receivepack/commands.go | 19 | ||||
| -rw-r--r-- | receivepack/hook.go | 39 | ||||
| -rw-r--r-- | receivepack/internal/service/quarantine_objects.go | 4 | ||||
| -rw-r--r-- | receivepack/options.go | 8 | ||||
| -rw-r--r-- | receivepack/permissions.go | 27 | ||||
| -rw-r--r-- | receivepack/receivepack.go | 51 | ||||
| -rw-r--r-- | receivepack/results.go (renamed from receivepack/translate.go) | 13 |
7 files changed, 87 insertions, 74 deletions
diff --git a/receivepack/commands.go b/receivepack/commands.go new file mode 100644 index 00000000..399a0bf6 --- /dev/null +++ b/receivepack/commands.go @@ -0,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 +} diff --git a/receivepack/hook.go b/receivepack/hook.go index 4c4a44ef..c96911ac 100644 --- a/receivepack/hook.go +++ b/receivepack/hook.go @@ -5,6 +5,7 @@ import ( "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 @@ type HookRequest struct { // 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 + } +} diff --git a/receivepack/internal/service/quarantine_objects.go b/receivepack/internal/service/quarantine_objects.go index 0c03be51..69e07a1d 100644 --- a/receivepack/internal/service/quarantine_objects.go +++ b/receivepack/internal/service/quarantine_objects.go @@ -4,9 +4,9 @@ import ( "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" ) diff --git a/receivepack/options.go b/receivepack/options.go index e39f83ba..f55fbad1 100644 --- a/receivepack/options.go +++ b/receivepack/options.go @@ -1,7 +1,6 @@ package receivepack import ( - "io/fs" "os" "codeberg.org/lindenii/furgit/objectid" @@ -9,13 +8,6 @@ import ( "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 { // GitProtocol is the raw Git protocol version string from the transport, diff --git a/receivepack/permissions.go b/receivepack/permissions.go new file mode 100644 index 00000000..ed30c0ce --- /dev/null +++ b/receivepack/permissions.go @@ -0,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, + } +} diff --git a/receivepack/receivepack.go b/receivepack/receivepack.go index eb518935..d1e54e58 100644 --- a/receivepack/receivepack.go +++ b/receivepack/receivepack.go @@ -94,54 +94,3 @@ func ReceivePack( 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 - } -} diff --git a/receivepack/translate.go b/receivepack/results.go index d572abd3..f56fbf2f 100644 --- a/receivepack/translate.go +++ b/receivepack/results.go @@ -5,19 +5,6 @@ import ( "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, |
