summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-27 15:03:18 -0500
committerJeff Carr <[email protected]>2025-10-27 15:20:23 -0500
commit48dd4e6cb7d8107f12d21ef3b980427b2f3e517a (patch)
tree0a3d8bb013a5b5805a4837f6ad2a187fef676545
parente746a70f9a213795a823afe4a36f97a68b27e071 (diff)
hopefully really checks the versions nowv0.0.33
-rw-r--r--doIncoming.go139
1 files changed, 135 insertions, 4 deletions
diff --git a/doIncoming.go b/doIncoming.go
index bca869a..b3ab324 100644
--- a/doIncoming.go
+++ b/doIncoming.go
@@ -2,8 +2,10 @@ package main
import (
"errors"
+ "fmt"
"os"
"path/filepath"
+ "strconv"
"strings"
"go.wit.com/lib/config"
@@ -38,11 +40,138 @@ func moveOutOfIncoming(fullname string, repopath string) error {
return nil
}
+// newver(0.25.101-1+b10)
+// a == 0
+// b == 25
+// c == 101
+// pnum == 1
+// bnum == 10
+type vers struct {
+ a int // major
+ b int
+ c int
+ pnum int
+ bnum int
+}
+
+func tokenVersions(ver string) (*vers, error) {
+ var err error
+ tok := new(vers)
+ parts := strings.Split(ver, "-")
+ if len(parts) != 2 {
+ return nil, errors.New(fmt.Sprintf("len != 2 %v", parts))
+ }
+ abc := strings.Split(parts[0], ".")
+ if len(abc) != 3 {
+ return nil, errors.New(fmt.Sprintf("len != 3 parts(%v) abc(%v)", parts, abc))
+ }
+ tok.a, err = strconv.Atoi(abc[0])
+ if err != nil {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ tok.b, err = strconv.Atoi(abc[1])
+ if err != nil {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ tok.c, err = strconv.Atoi(abc[2])
+ if err != nil {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ bb := strings.Split(parts[1], "+")
+ if len(bb) != 2 {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ tok.pnum, err = strconv.Atoi(bb[0])
+ if err != nil {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ tok.bnum, err = strconv.Atoi(strings.TrimPrefix(bb[1], "b"))
+ if err != nil {
+ return nil, errors.Join(err, errors.New(fmt.Sprintf("parts(%v) abc(%v)", parts, abc)))
+ }
+ return tok, nil
+}
+
+// compares newver(0.25.101-1+b10) curver(0.25.101-5+b1)
+func compareVersions(newver string, curver string) (bool, error) {
+ newtok, err1 := tokenVersions(newver)
+ curtok, err2 := tokenVersions(curver)
+ if (newtok == nil) || (curtok == nil) {
+ s := log.Sprintf("token on the railroad failed (%v) to curver (%v) err(%v)(%v)", newtok, curtok, err1, err2)
+ return false, errors.New(s)
+ }
+ // log.Printf("compare (%v) to (%v)\n", newtok, curtok)
+ if curtok.a > newtok.a {
+ return false, errors.New(log.Sprintf("A.x.x lower (%v) to curver (%v)", newver, curver))
+ }
+ if curtok.b > newtok.b {
+ return false, errors.New(log.Sprintf("x.B.x lower (%v) to curver (%v)", newver, curver))
+ }
+ if curtok.c > newtok.c {
+ return false, errors.New(log.Sprintf("x.x.C lower (%v) to curver (%v)", newver, curver))
+ }
+ if curtok.pnum > newtok.pnum {
+ return false, errors.New(log.Sprintf("patch # lower (%v) to curver (%v)", newver, curver))
+ }
+ if curtok.bnum > newtok.bnum {
+ return false, errors.New(log.Sprintf("build # lower (%v) to curver (%v)", newver, curver))
+ }
+ if curtok.bnum == newtok.bnum {
+ return false, errors.New(log.Sprintf("build is equal (%v) to curver (%v)", newver, curver))
+ }
+ return true, nil
+}
+
+func moveToBad(packageName string, fullname string, err error) string {
+ _, filename := filepath.Split(fullname)
+ baddir := filepath.Join(me.pb.BaseDir, "badincoming")
+ os.MkdirAll(baddir, 0755)
+ newbadname := filepath.Join(baddir, filename)
+ os.Rename(fullname, newbadname)
+ return newbadname
+}
+
+// true if package is actually newer
+func checkAgainstNewest(fullname string, newest *zoopb.Packages) bool {
+ _, filename := filepath.Split(fullname)
+ parts := strings.Split(filename, "_")
+ if len(parts) != 3 {
+ // todo: add more filename checking here (check for ".deb")
+ // return errors.New(log.Sprintf("bad filenae %s", filename))
+ return false
+ }
+ packageName := parts[0]
+ version := parts[1]
+ p := newest.FindByPackage(packageName)
+ if p == nil {
+ log.Info("NEW PACKAGE NAME", packageName, version, fullname)
+ return false
+ }
+ _, filename = filepath.Split(p.Filename)
+ parts = strings.Split(filename, "_")
+ if len(parts) != 3 {
+ // this should never happen
+ return false
+ }
+ curversion := parts[1]
+ if ok, err := compareVersions(version, curversion); ok {
+ log.Printf("IS NEW: %s err=(%v)\n", packageName, err)
+ } else {
+ // log.Printf("IS BAD: %s err=(%v)\n", packageName, err)
+ badname := moveToBad(packageName, fullname, err)
+ log.Printf("IS BAD: %s err=(%v) %s\n", packageName, err, badname)
+ }
+
+ return false
+}
+
func doIncoming(pb *zoopb.Packages) (string, error) {
if err := os.Chdir(me.pb.BaseDir); err != nil {
return "no dir " + me.pb.BaseDir, err
}
+ newest := doGetNewest("amd64")
+
globPattern := "/home/mirrors/wit/incoming/*.deb"
files, err := filepath.Glob(globPattern)
if err != nil {
@@ -50,8 +179,9 @@ func doIncoming(pb *zoopb.Packages) (string, error) {
}
for _, filename := range files {
- // log.Info("need to move", filename)
- moveOutOfIncoming(filename, "pool/main")
+ if checkAgainstNewest(filename, newest) {
+ moveOutOfIncoming(filename, "pool/main")
+ }
}
globPattern = "/home/mirrors/wit/incoming-devel/*.deb"
@@ -61,8 +191,9 @@ func doIncoming(pb *zoopb.Packages) (string, error) {
}
for _, filename := range files {
- // log.Info("need to move", filename)
- moveOutOfIncoming(filename, "pool/main")
+ if checkAgainstNewest(filename, newest) {
+ moveOutOfIncoming(filename, "pool/main")
+ }
}
s := log.Sprintf("scanned (%d) in incoming", len(files))