GitRoot
Craft your forge, Build your project, Grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5package repository
6
7import (
8 "github.com/go-git/go-git/v6/plumbing"
9 "github.com/go-git/go-git/v6/plumbing/object"
10 "github.com/samber/oops"
11)
12
13func (repo *GitRootRepositoryWrite) IsForcePush(old plumbing.Hash, new plumbing.Hash) (bool, error) {
14 unlock := repo.repo.manager.repoLocks.Read(repo.repo.name)
15 defer unlock()
16
17 commitOld, err := object.GetCommit(repo.storer, old)
18 if err != nil {
19 return false, oops.Wrapf(err, "commitOld")
20 }
21 commitNew, err := object.GetCommit(repo.storer, new)
22 if err != nil {
23 return false, oops.Wrapf(err, "commitNew")
24 }
25 ok, err := commitOld.IsAncestor(commitNew)
26 if err != nil {
27 return false, oops.Wrapf(err, "IsAncestor")
28 }
29 return !ok, err
30}