From 344d0c4d3c968506f5641da40fce581ea5bcdbbc Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 7 Mar 2026 21:21:26 +0800 Subject: receivepack: Re-organize things around --- receivepack/commands.go | 19 ++++++++ receivepack/hook.go | 39 +++++++++++++++++ receivepack/internal/service/quarantine_objects.go | 4 +- receivepack/options.go | 8 ---- receivepack/permissions.go | 27 ++++++++++++ receivepack/receivepack.go | 51 ---------------------- receivepack/results.go | 26 +++++++++++ receivepack/translate.go | 39 ----------------- 8 files changed, 113 insertions(+), 100 deletions(-) create mode 100644 receivepack/commands.go create mode 100644 receivepack/permissions.go create mode 100644 receivepack/results.go delete mode 100644 receivepack/translate.go (limited to 'receivepack') 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/results.go b/receivepack/results.go new file mode 100644 index 00000000..f56fbf2f --- /dev/null +++ b/receivepack/results.go @@ -0,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 +} diff --git a/receivepack/translate.go b/receivepack/translate.go deleted file mode 100644 index d572abd3..00000000 --- a/receivepack/translate.go +++ /dev/null @@ -1,39 +0,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 -} -- cgit v1.3.1-10-gc9f91