diff options
| author | 2026-03-26 09:14:59 +0000 | |
|---|---|---|
| committer | 2026-03-26 09:14:59 +0000 | |
| commit | 3d25bda9d5da6814661828adabe8a09f9d01aefb (patch) | |
| tree | d034e28079333f85e5d7b96d921282eddd4798d6 /receivepack/hooks/reject_force_push.go | |
| parent | object/id: Empty tree (diff) | |
| signature | No signature | |
network/receivepack: Rename from receivepack
Diffstat (limited to 'receivepack/hooks/reject_force_push.go')
| -rw-r--r-- | receivepack/hooks/reject_force_push.go | 64 |
1 files changed, 0 insertions, 64 deletions
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 - } -} |
