add glob matching for no-build list

This commit is contained in:
2024-06-22 20:02:26 +02:00
parent b510954115
commit 38a7b6562c
3 changed files with 27 additions and 9 deletions

View File

@@ -88,7 +88,7 @@ func (b *BuildManager) buildQueue(ctx context.Context, queue []*ProtoPackage) er
b.buildingLock.RUnlock() b.buildingLock.RUnlock()
// check if package can be build right now // check if package can be build right now
if !unknownBuilds && currentMemLoad+(datasize.ByteSize(*pkg.DBPackage.MaxRss)*datasize.KB) > conf.Build.MemoryLimit { if currentMemLoad+(datasize.ByteSize(*pkg.DBPackage.MaxRss)*datasize.KB) > conf.Build.MemoryLimit {
log.Debugf("[Q] skipped package with max_rss %s while load %s: %s->%s", log.Debugf("[Q] skipped package with max_rss %s while load %s: %s->%s",
datasize.ByteSize(*pkg.DBPackage.MaxRss)*datasize.KB, currentMemLoad, pkg.Pkgbase, pkg.March) datasize.ByteSize(*pkg.DBPackage.MaxRss)*datasize.KB, currentMemLoad, pkg.Pkgbase, pkg.March)
continue continue
@@ -291,8 +291,7 @@ func (b *BuildManager) syncWorker(ctx context.Context) error {
for _, repo := range repos { for _, repo := range repos {
wg.Add(1) wg.Add(1)
splitRepo := strings.Split(repo, "-") splitRepo := strings.Split(repo, "-")
repo := repo go func() { //nolint:contextcheck
go func() {
err := housekeeping(splitRepo[0], strings.Join(splitRepo[1:], "-"), wg) err := housekeeping(splitRepo[0], strings.Join(splitRepo[1:], "-"), wg)
if err != nil { if err != nil {
log.Warningf("[%s] housekeeping failed: %v", repo, err) log.Warningf("[%s] housekeeping failed: %v", repo, err)
@@ -301,7 +300,7 @@ func (b *BuildManager) syncWorker(ctx context.Context) error {
} }
wg.Wait() wg.Wait()
err := logHK() err := logHK() //nolint:contextcheck
if err != nil { if err != nil {
log.Warningf("log-housekeeping failed: %v", err) log.Warningf("log-housekeeping failed: %v", err)
} }
@@ -331,7 +330,7 @@ func (b *BuildManager) syncWorker(ctx context.Context) error {
} }
b.alpmMutex.Unlock() b.alpmMutex.Unlock()
queue, err := b.genQueue() queue, err := b.genQueue() //nolint:contextcheck
if err != nil { if err != nil {
log.Errorf("error building queue: %v", err) log.Errorf("error building queue: %v", err)
} else { } else {
@@ -344,7 +343,7 @@ func (b *BuildManager) syncWorker(ctx context.Context) error {
if ctx.Err() == nil { if ctx.Err() == nil {
for _, repo := range repos { for _, repo := range repos {
err = movePackagesLive(repo) err = movePackagesLive(repo) //nolint:contextcheck
if err != nil { if err != nil {
log.Errorf("[%s] error moving packages live: %v", repo, err) log.Errorf("[%s] error moving packages live: %v", repo, err)
} }

View File

@@ -43,6 +43,11 @@ var (
) )
func (p *ProtoPackage) isEligible(ctx context.Context) bool { func (p *ProtoPackage) isEligible(ctx context.Context) bool {
globMatch, err := MatchGlobList(p.Pkgbase, conf.Blacklist.Packages)
if err != nil {
log.Errorf("error parsing blob from no-build list: %v", err)
}
skipping := false skipping := false
switch { switch {
case p.Arch == "any": case p.Arch == "any":
@@ -50,8 +55,8 @@ func (p *ProtoPackage) isEligible(ctx context.Context) bool {
p.DBPackage.SkipReason = "arch = any" p.DBPackage.SkipReason = "arch = any"
p.DBPackage.Status = dbpackage.StatusSkipped p.DBPackage.Status = dbpackage.StatusSkipped
skipping = true skipping = true
case Contains(conf.Blacklist.Packages, p.Pkgbase): case globMatch:
log.Debugf("skipped %s: blacklisted package", p.Pkgbase) log.Debugf("skipped %s: package on no-build list", p.Pkgbase)
p.DBPackage.SkipReason = "blacklisted" p.DBPackage.SkipReason = "blacklisted"
p.DBPackage.Status = dbpackage.StatusSkipped p.DBPackage.Status = dbpackage.StatusSkipped
skipping = true skipping = true
@@ -79,7 +84,7 @@ func (p *ProtoPackage) isEligible(ctx context.Context) bool {
repoVer, err := p.repoVersion() repoVer, err := p.repoVersion()
if err != nil { if err != nil {
p.DBPackage = p.DBPackage.Update().ClearRepoVersion().SaveX(ctx) p.DBPackage = p.DBPackage.Update().ClearRepoVersion().SaveX(ctx)
} else if err == nil && alpm.VerCmp(repoVer, p.Version) > 0 { } else if alpm.VerCmp(repoVer, p.Version) > 0 {
log.Debugf("skipped %s: version in repo higher than in PKGBUILD (%s < %s)", p.Pkgbase, p.Version, repoVer) log.Debugf("skipped %s: version in repo higher than in PKGBUILD (%s < %s)", p.Pkgbase, p.Version, repoVer)
p.DBPackage = p.DBPackage.Update().SetStatus(dbpackage.StatusLatest).ClearSkipReason().SetTagRev(p.State.TagRev).SaveX(ctx) p.DBPackage = p.DBPackage.Update().SetStatus(dbpackage.StatusLatest).ClearSkipReason().SetTagRev(p.State.TagRev).SaveX(ctx)
return false return false

View File

@@ -7,6 +7,7 @@ import (
paconf "github.com/Morganamilo/go-pacmanconf" paconf "github.com/Morganamilo/go-pacmanconf"
"github.com/Morganamilo/go-srcinfo" "github.com/Morganamilo/go-srcinfo"
"github.com/c2h5oh/datasize" "github.com/c2h5oh/datasize"
"github.com/gobwas/glob"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
"io/fs" "io/fs"
@@ -657,3 +658,16 @@ func (globs Globs) Expand() ([]string, error) {
return matches, nil return matches, nil
} }
func MatchGlobList(target string, globs []string) (bool, error) {
for _, lGlob := range globs {
tGlob, err := glob.Compile(lGlob)
if err != nil {
return false, fmt.Errorf("failed to compile glob %s: %w", lGlob, err)
}
if tGlob.Match(target) {
return true, nil
}
}
return false, nil
}