forked from ALHP/ALHP.GO
added split-package check to housekeeping
This commit is contained in:
3
main.go
3
main.go
@@ -652,9 +652,10 @@ func (b *BuildManager) syncWorker() {
|
|||||||
wg := new(sync.WaitGroup)
|
wg := new(sync.WaitGroup)
|
||||||
for _, repo := range repos {
|
for _, repo := range repos {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
|
splitRepo := strings.Split(repo, "-")
|
||||||
repo := repo
|
repo := repo
|
||||||
go func() {
|
go func() {
|
||||||
err := housekeeping(repo, 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)
|
||||||
}
|
}
|
||||||
|
68
utils.go
68
utils.go
@@ -773,10 +773,11 @@ func (path Package) hasValidSignature() (bool, error) {
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func housekeeping(repo string, wg *sync.WaitGroup) error {
|
func housekeeping(repo string, march string, wg *sync.WaitGroup) error {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
log.Debugf("[%s] Start housekeeping", repo)
|
fullRepo := repo + "-" + march
|
||||||
packages, err := Glob(filepath.Join(conf.Basedir.Repo, repo, "/**/*.pkg.tar.zst"))
|
log.Debugf("[%s] Start housekeeping", fullRepo)
|
||||||
|
packages, err := Glob(filepath.Join(conf.Basedir.Repo, fullRepo, "/**/*.pkg.tar.zst"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -786,7 +787,7 @@ func housekeeping(repo string, wg *sync.WaitGroup) error {
|
|||||||
|
|
||||||
dbPkg, err := mPackage.DBPackage()
|
dbPkg, err := mPackage.DBPackage()
|
||||||
if ent.IsNotFound(err) {
|
if ent.IsNotFound(err) {
|
||||||
log.Infof("[HK/%s] removing orphan %s", repo, filepath.Base(path))
|
log.Infof("[HK/%s] removing orphan %s", fullRepo, filepath.Base(path))
|
||||||
pkg := &BuildPackage{
|
pkg := &BuildPackage{
|
||||||
FullRepo: mPackage.FullRepo(),
|
FullRepo: mPackage.FullRepo(),
|
||||||
PkgFiles: []string{path},
|
PkgFiles: []string{path},
|
||||||
@@ -861,30 +862,65 @@ func housekeeping(repo string, wg *sync.WaitGroup) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check split packages
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check all dbpackages for existence
|
// check all packages from db for existence
|
||||||
dbpackages, err := db.DbPackage.Query().Where(dbpackage.RepositoryEQ(dbpackage.Repository(repo))).All(context.Background())
|
dbPackages, err := db.DbPackage.Query().Where(
|
||||||
|
dbpackage.And(
|
||||||
|
dbpackage.RepositoryEQ(dbpackage.Repository(repo)),
|
||||||
|
dbpackage.March(march),
|
||||||
|
)).All(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dbpkg := range dbpackages {
|
for _, dbPkg := range dbPackages {
|
||||||
pkg := &BuildPackage{
|
pkg := &BuildPackage{
|
||||||
Pkgbase: dbpkg.Pkgbase,
|
Pkgbase: dbPkg.Pkgbase,
|
||||||
Repo: dbpkg.Repository,
|
Repo: dbPkg.Repository,
|
||||||
March: dbpkg.March,
|
March: dbPkg.March,
|
||||||
FullRepo: dbpkg.Repository.String() + "-" + dbpkg.March,
|
FullRepo: dbPkg.Repository.String() + "-" + dbPkg.March,
|
||||||
DbPackage: dbpkg,
|
DbPackage: dbPkg,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !pkg.isAvailable(alpmHandle) {
|
if !pkg.isAvailable(alpmHandle) {
|
||||||
log.Infof("[HK/%s/%s] not found on mirror, removing", pkg.FullRepo, pkg.Pkgbase)
|
log.Infof("[HK/%s/%s] not found on mirror, removing", pkg.FullRepo, pkg.Pkgbase)
|
||||||
err = db.DbPackage.DeleteOne(dbpkg).Exec(context.Background())
|
err = db.DbPackage.DeleteOne(dbPkg).Exec(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
log.Errorf("[HK] Error deleting package %s: %v", dbPkg.Pkgbase, err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if dbPkg.Status == dbpackage.StatusLatest && dbPkg.RepoVersion != "" {
|
||||||
|
missingSplit := false
|
||||||
|
var existingSplits []string
|
||||||
|
for _, splitPkg := range dbPkg.Packages {
|
||||||
|
pkgFile := filepath.Join(conf.Basedir.Repo, fullRepo, "os", conf.Arch,
|
||||||
|
splitPkg+"-"+dbPkg.RepoVersion+"-"+conf.Arch+".pkg.tar.zst")
|
||||||
|
if _, err := os.Stat(pkgFile); os.IsNotExist(err) {
|
||||||
|
missingSplit = true
|
||||||
|
} else if err != nil {
|
||||||
|
log.Warningf("[HK] error reading package-file %s: %v", splitPkg, err)
|
||||||
|
} else {
|
||||||
|
existingSplits = append(existingSplits, pkgFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if missingSplit {
|
||||||
|
log.Infof("[HK] missing split-package for pkgbase %s", dbPkg.Pkgbase)
|
||||||
|
pkg.DbPackage, err = pkg.DbPackage.Update().ClearRepoVersion().ClearHash().SetStatus(dbpackage.StatusQueued).Save(context.Background())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
pkg := &BuildPackage{
|
||||||
|
FullRepo: fullRepo,
|
||||||
|
PkgFiles: existingSplits,
|
||||||
|
March: march,
|
||||||
|
DbPackage: dbPkg,
|
||||||
|
}
|
||||||
|
buildManager.repoPurge[fullRepo] <- []*BuildPackage{pkg}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user