From 3d25bda9d5da6814661828adabe8a09f9d01aefb Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Thu, 26 Mar 2026 09:14:59 +0000 Subject: network/receivepack: Rename from receivepack --- receivepack/hooks/chain.go | 51 --------------------------- receivepack/hooks/doc.go | 2 -- receivepack/hooks/reject_force_push.go | 64 ---------------------------------- 3 files changed, 117 deletions(-) delete mode 100644 receivepack/hooks/chain.go delete mode 100644 receivepack/hooks/doc.go delete mode 100644 receivepack/hooks/reject_force_push.go (limited to 'receivepack/hooks') diff --git a/receivepack/hooks/chain.go b/receivepack/hooks/chain.go deleted file mode 100644 index 4ce65064..00000000 --- a/receivepack/hooks/chain.go +++ /dev/null @@ -1,51 +0,0 @@ -package hooks - -import ( - "context" - "fmt" - - receivepack "codeberg.org/lindenii/furgit/receivepack" -) - -// Chain combines hooks by running them in order and intersecting their -// decisions. The first rejecting message for each update is preserved. -func Chain(hooks ...receivepack.Hook) receivepack.Hook { - return func( - ctx context.Context, - req receivepack.HookRequest, - ) ([]receivepack.UpdateDecision, error) { - decisions := make([]receivepack.UpdateDecision, len(req.Updates)) - for i := range decisions { - decisions[i].Accept = true - } - - for _, hook := range hooks { - if hook == nil { - continue - } - - hookDecisions, err := hook(ctx, req) - if err != nil { - return nil, err - } - - if len(hookDecisions) != len(req.Updates) { - return nil, fmt.Errorf("hook returned %d decisions for %d updates", len(hookDecisions), len(req.Updates)) - } - - for i, decision := range hookDecisions { - if decision.Accept { - continue - } - - if decisions[i].Accept { - decisions[i].Message = decision.Message - } - - decisions[i].Accept = false - } - } - - return decisions, nil - } -} diff --git a/receivepack/hooks/doc.go b/receivepack/hooks/doc.go deleted file mode 100644 index bef2baf9..00000000 --- a/receivepack/hooks/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package hooks provides a few pre-defined hooks that callers might find useful. -package hooks diff --git a/receivepack/hooks/reject_force_push.go b/receivepack/hooks/reject_force_push.go deleted file mode 100644 index e6b112ea..00000000 --- a/receivepack/hooks/reject_force_push.go +++ /dev/null @@ -1,64 +0,0 @@ -package hooks - -import ( - "context" - "errors" - "fmt" - - "codeberg.org/lindenii/furgit/commitquery" - objectid "codeberg.org/lindenii/furgit/object/id" - objectmix "codeberg.org/lindenii/furgit/object/storer/mix" - receivepack "codeberg.org/lindenii/furgit/receivepack" - refstore "codeberg.org/lindenii/furgit/ref/store" -) - -// RejectForcePush rejects updates whose new value is not a fast-forward of the -// currently resolved reference. -func RejectForcePush() receivepack.Hook { - return func( - ctx context.Context, - req receivepack.HookRequest, - ) ([]receivepack.UpdateDecision, error) { - _ = ctx - - objects := objectmix.New(req.QuarantinedObjects, req.ExistingObjects) - - decisions := make([]receivepack.UpdateDecision, len(req.Updates)) - for i := range decisions { - decisions[i].Accept = true - } - - for i, update := range req.Updates { - if update.OldID == objectid.Zero(update.OldID.Algorithm()) || update.NewID == objectid.Zero(update.NewID.Algorithm()) { - continue - } - - current, err := req.Refs.ResolveToDetached(update.Name) - switch { - case err == nil: - case errors.Is(err, refstore.ErrReferenceNotFound): - continue - default: - return nil, fmt.Errorf("resolve %s: %w", update.Name, err) - } - - if current.ID == update.NewID { - continue - } - - ok, err := commitquery.New(objects, nil).IsAncestor(current.ID, update.NewID) - if err != nil { - return nil, fmt.Errorf("check fast-forward %s: %w", update.Name, err) - } - - if !ok { - decisions[i] = receivepack.UpdateDecision{ - Accept: false, - Message: "non-fast-forward", - } - } - } - - return decisions, nil - } -} -- cgit v1.3.1-10-gc9f91