Skip to content

Commit

Permalink
cmd/gh-downloader: Use a regexp to do version parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexisMontagne committed Aug 5, 2021
1 parent 50637d4 commit 10cb14a
Showing 1 changed file with 40 additions and 22 deletions.
62 changes: 40 additions & 22 deletions cmd/gh-downloader/tag.go
Original file line number Diff line number Diff line change
@@ -1,50 +1,67 @@
package main

import (
"fmt"
"regexp"
"strconv"
"strings"
)

var versionRe = regexp.MustCompile(`((\w+)-)?v?(\d|x).(\d|x).(\d|x)(-(\w+))?`)

type tag struct {
Project string
Major int
Minor int
Patch int
Suffix string
}

func newTag(name string) *tag {
var (
t tag
var ms = versionRe.FindStringSubmatch(name)

version = name
)
if len(ms) != 8 {
return nil
}

if splittedTagName := strings.Split(name, "-"); len(splittedTagName) > 1 {
t.Project = strings.Join(splittedTagName[:len(splittedTagName)-1], "-")
version = splittedTagName[len(splittedTagName)-1]
return &tag{
Project: ms[2],
Major: parseVersionNumber(ms[3]),
Minor: parseVersionNumber(ms[4]),
Patch: parseVersionNumber(ms[5]),
Suffix: ms[7],
}
}

if n, err := fmt.Sscanf(
strings.TrimPrefix(version, "v"),
"%d.%d.%d",
&t.Major,
&t.Minor,
&t.Patch,
); n != 3 || err != nil {
return nil
func parseVersionNumber(sv string) int {
if v, err := strconv.Atoi(sv); err == nil {
return v
}

return &t
return -1
}

func (t1 *tag) Less(t2 *tag) bool {
if t1.Project != t2.Project {
return false
return strings.Compare(t1.Project, t2.Project) < 0
}

if t1.Major != t2.Major {
return t1.Major < t2.Major
}

if t1.Minor != t2.Minor {
return t1.Minor < t2.Minor
}

if t1.Patch != t2.Patch {
return t1.Patch < t2.Patch
}

if t1.Suffix == "" || t2.Suffix == "" {
return t2.Suffix == ""
}

return t1.Major < t2.Major ||
(t1.Major == t2.Major && t1.Minor < t2.Minor) ||
(t1.Major == t2.Major && t1.Minor == t2.Minor && t1.Patch < t2.Patch)
return strings.Compare(t1.Suffix, t2.Suffix) < 0
}

func filterReleases(rs releases, scheme string) releases {
Expand All @@ -65,7 +82,8 @@ func filterReleases(rs releases, scheme string) releases {
if r.Project == schemeTag.Project &&
(schemeTag.Major == -1 || schemeTag.Major == r.Major) &&
(schemeTag.Minor == -1 || schemeTag.Minor == r.Minor) &&
(schemeTag.Patch == -1 || schemeTag.Patch == r.Patch) {
(schemeTag.Patch == -1 || schemeTag.Patch == r.Patch) &&
(schemeTag.Suffix == "*" || schemeTag.Suffix == r.Suffix) {
filteredReleases = append(filteredReleases, release)
}
}
Expand Down

0 comments on commit 10cb14a

Please sign in to comment.