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}