shithub: furgit

Download patch

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
-}
--