Use merge-base as a starting point
Set it to target branch and check only the commits we are interested in. If the commit is already in the branch, we just get an old behaviour. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
102e7d41c0
commit
2f1de6fc41
1 changed files with 30 additions and 2 deletions
32
main.go
32
main.go
|
@ -9,6 +9,7 @@ import (
|
|||
"strings"
|
||||
|
||||
git "github.com/go-git/go-git/v5"
|
||||
"github.com/go-git/go-git/v5/plumbing"
|
||||
"github.com/go-git/go-git/v5/plumbing/object"
|
||||
gha "github.com/sethvargo/go-githubactions"
|
||||
)
|
||||
|
@ -37,14 +38,17 @@ func main() {
|
|||
}
|
||||
|
||||
// Limit number of iterations.
|
||||
from := gha.GetInput("from")
|
||||
var lca *object.Commit
|
||||
if from := gha.GetInput("from"); from != "" {
|
||||
lca = getMergeBase(r, head, from)
|
||||
}
|
||||
|
||||
// Processing result.
|
||||
var fail bool
|
||||
|
||||
_ = commits.ForEach(func(c *object.Commit) error {
|
||||
// Stop iterator when limit is reached.
|
||||
if len(from) != 0 && strings.HasPrefix(c.ID().String(), from) {
|
||||
if lca != nil && c.Hash == lca.Hash {
|
||||
return errors.New("stop")
|
||||
}
|
||||
|
||||
|
@ -81,3 +85,27 @@ func main() {
|
|||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func getMergeBase(r *git.Repository, head *plumbing.Reference, from string) *object.Commit {
|
||||
h, err := r.ResolveRevision(plumbing.Revision(from))
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to resolve a reference: %v", err)
|
||||
}
|
||||
|
||||
to, err := r.CommitObject(*h)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to get commit object: %v", err)
|
||||
}
|
||||
|
||||
other, err := r.CommitObject(head.Hash())
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to get HEAD commit object: %v", err)
|
||||
}
|
||||
|
||||
cc, err := to.MergeBase(other)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to determine merge-base: %v", err)
|
||||
}
|
||||
|
||||
return cc[0]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue