aboutsummaryrefslogtreecommitdiff
path: root/receivepack/internal
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-07 22:00:51 +0800
committerGravatar Runxi Yu2026-03-07 22:03:26 +0800
commit7d0f942b3ae4903dded72a9524f6bd4ffa16feb9 (patch)
tree32cbfc7841dc59759618c07905675cc3ece1c5a1 /receivepack/internal
parentprotocol/v0v1/server: Add ProgessWriter and ErrorWriter (diff)
signatureNo signature
receivepack: Add HookIO
Diffstat (limited to 'receivepack/internal')
-rw-r--r--receivepack/internal/service/hook.go7
-rw-r--r--receivepack/internal/service/options.go1
-rw-r--r--receivepack/internal/service/run_hook.go1
3 files changed, 9 insertions, 0 deletions
diff --git a/receivepack/internal/service/hook.go b/receivepack/internal/service/hook.go
index 85295e15..748a00b9 100644
--- a/receivepack/internal/service/hook.go
+++ b/receivepack/internal/service/hook.go
@@ -2,12 +2,18 @@ package service
import (
"context"
+ "io"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objectstore"
"codeberg.org/lindenii/furgit/refstore"
)
+type HookIO struct {
+ Progress io.Writer
+ Error io.Writer
+}
+
type RefUpdate struct {
Name string
OldID objectid.ObjectID
@@ -25,6 +31,7 @@ type HookRequest struct {
QuarantinedObjects objectstore.Store
Updates []RefUpdate
PushOptions []string
+ IO HookIO
}
type Hook func(context.Context, HookRequest) ([]UpdateDecision, error)
diff --git a/receivepack/internal/service/options.go b/receivepack/internal/service/options.go
index d9f8a265..b8dda2f7 100644
--- a/receivepack/internal/service/options.go
+++ b/receivepack/internal/service/options.go
@@ -22,4 +22,5 @@ type Options struct {
ObjectsRoot *os.Root
PromotedObjectPermissions *PromotedObjectPermissions
Hook Hook
+ HookIO HookIO
}
diff --git a/receivepack/internal/service/run_hook.go b/receivepack/internal/service/run_hook.go
index cf934664..3c76906e 100644
--- a/receivepack/internal/service/run_hook.go
+++ b/receivepack/internal/service/run_hook.go
@@ -41,6 +41,7 @@ func (service *Service) runHook(
QuarantinedObjects: quarantinedObjects,
Updates: buildHookUpdates(commands),
PushOptions: append([]string(nil), req.PushOptions...),
+ IO: service.opts.HookIO,
})
if err != nil {
return nil, nil, nil, false, err.Error()