diff --git a/proto_package.go b/proto_package.go index f4f68d9..b24ccc8 100644 --- a/proto_package.go +++ b/proto_package.go @@ -118,19 +118,26 @@ func (p *ProtoPackage) build(ctx context.Context) (time.Duration, error) { p.Version = constructVersion(p.Srcinfo.Pkgver, p.Srcinfo.Pkgrel, p.Srcinfo.Epoch) p.DBPackage = p.DBPackage.Update().SetPackages(packages2slice(p.Srcinfo.Packages)).SaveX(ctx) + // skip haskell packages, since they cannot be optimized currently (no -O3 & march has no effect as far as I know) + if Contains(p.Srcinfo.MakeDepends, "ghc") || Contains(p.Srcinfo.MakeDepends, "haskell-ghc") || + Contains(p.Srcinfo.Depends, "ghc") || Contains(p.Srcinfo.Depends, "haskell-ghc") { + buildManager.repoPurge[p.FullRepo] <- []*ProtoPackage{p} + return time.Since(start), nil + } + isLatest, local, syncVersion, err := p.isMirrorLatest(alpmHandle) if err != nil { switch err.(type) { default: - return 0, fmt.Errorf("error solving deps: %w", err) + return time.Since(start), fmt.Errorf("error solving deps: %w", err) case MultipleStateFilesError: log.Infof("skipped %s: multiple PKGBUILDs for dependency found: %v", p.Srcinfo.Pkgbase, err) p.DBPackage = p.DBPackage.Update().SetStatus(dbpackage.StatusSkipped).SetSkipReason("multiple PKGBUILD for dep. found").SaveX(ctx) - return 0, err + return time.Since(start), err case UnableToSatisfyError: log.Infof("skipped %s: unable to resolve dependencies: %v", p.Srcinfo.Pkgbase, err) p.DBPackage = p.DBPackage.Update().SetStatus(dbpackage.StatusSkipped).SetSkipReason("unable to resolve dependencies").SaveX(ctx) - return 0, err + return time.Since(start), err } } @@ -147,14 +154,14 @@ func (p *ProtoPackage) build(ctx context.Context) (time.Duration, error) { // and then after build from ALHP. Best case we prevent a not buildable package from staying in the repos // in an outdated version. if time.Since(local.BuildDate()).Hours() >= 48 && p.DBPackage.RepoVersion != "" { - return 0, errors.New("overdue package waiting") + return time.Since(start), errors.New("overdue package waiting") } } else { log.Infof("delayed %s: not all dependencies are up to date or resolvable", p.Srcinfo.Pkgbase) p.DBPackage.Update().SetStatus(dbpackage.StatusDelayed).SetSkipReason("waiting for mirror").ExecX(ctx) } - return 0, ErrorNotEligible + return time.Since(start), ErrorNotEligible } log.Infof("[P] build starting: %s->%s->%s", p.FullRepo, p.Pkgbase, p.Version) diff --git a/utils.go b/utils.go index 02ec3cf..6b62b6d 100644 --- a/utils.go +++ b/utils.go @@ -242,6 +242,22 @@ func movePackagesLive(fullRepo string) error { continue } + rawState, err := os.ReadFile(filepath.Join(conf.Basedir.Work, stateDir, dbPkg.Repository.String()+"-"+conf.Arch, dbPkg.Pkgbase)) + if err != nil { + log.Warningf("[MOVE] state not found for %s->%s: %v", fullRepo, dbPkg.Pkgbase, err) + _ = os.Remove(file) + _ = os.Remove(file + ".sig") + continue + } + + state, err := parseState(string(rawState)) + if err != nil { + log.Warningf("[MOVE] error parsing state file for %s->%s: %v", fullRepo, dbPkg.Pkgbase, err) + _ = os.Remove(file) + _ = os.Remove(file + ".sig") + continue + } + err = os.Rename(file, filepath.Join(conf.Basedir.Repo, fullRepo, "os", conf.Arch, filepath.Base(file))) if err != nil { return err @@ -256,6 +272,7 @@ func movePackagesLive(fullRepo string) error { PkgFiles: []string{filepath.Join(conf.Basedir.Repo, fullRepo, "os", conf.Arch, filepath.Base(file))}, Version: pkg.Version(), March: march, + State: state, }) }