1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/transportrequest/gitutils.go
Marcus Holl f0828ad5e5
Find label in log range (#2461)
* LogRange provide git log ref1..ref2

This we need for checking inside the commit range
for transportRequestIds and changeDocumentIDs in the
body of the commit message.
2021-02-01 11:54:30 +01:00

39 lines
1.3 KiB
Go

package transportrequest
import (
"fmt"
"github.com/SAP/jenkins-library/pkg/piperutils"
"github.com/go-git/go-git/v5/plumbing/object"
"regexp"
"sort"
)
// FindLabelsInCommits a label is considered to be something like
// key: label, e.g. TransportRequest: 123456
// These labels are expected to be contained in the git commit message as
// a separate line in the commit message body.
// In case several labels are found they are returned in ascending order.
func FindLabelsInCommits(commits object.CommitIter, label string) ([]string, error) {
labelRegex, err := regexp.Compile(fmt.Sprintf(`(?m)^\s*%s\s*:\s*(\S*)\s*$`, label))
if err != nil {
return []string{}, fmt.Errorf("Cannot extract label: %w", err)
}
ids := []string{}
err = commits.ForEach(func(c *object.Commit) error {
for _, e := range labelRegex.FindAllStringSubmatch(c.Message, -1) {
if len(e) < 2 { // the first entry is the full match, the second entry (at index 1) is the group
return fmt.Errorf("Cannot extract label '%s' from commit '%s': '%s'", label, c.ID(), c.Message)
}
ids = append(ids, e[1])
}
return nil
})
if err != nil {
return []string{}, fmt.Errorf("Cannot extract label: %w", err)
}
labels := piperutils.UniqueStrings(ids)
sort.Strings(labels)
return labels, nil
}