speedup, add name field

This commit is contained in:
Aine 2023-03-24 22:31:33 +02:00
parent c00433661f
commit e87b3ee1ae
No known key found for this signature in database
GPG key ID: 34969C908CCA2804

26
main.go
View file

@ -6,6 +6,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
"sync"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@ -14,6 +15,7 @@ type RequirementsFile []RequirementsEntry
type RequirementsEntry struct { type RequirementsEntry struct {
Src string `yaml:"src"` Src string `yaml:"src"`
Version string `yaml:"version"` Version string `yaml:"version"`
Name string `yaml:"name,omitempty"`
} }
var requirementsPath string var requirementsPath string
@ -32,13 +34,22 @@ func main() {
func updateRequirements(path string) { func updateRequirements(path string) {
entries := parseRequirements(path) entries := parseRequirements(path)
var wg sync.WaitGroup
wg.Add(len(entries))
for i, entry := range entries { for i, entry := range entries {
newVersion := updateRequirementEntry(entry) go func(i int, entry RequirementsEntry, wg *sync.WaitGroup) {
newVersion := getNewVersion(entry.Src, entry.Version)
if newVersion != "" { if newVersion != "" {
log.Println(entry.Src, entry.Version, "->", newVersion) log.Println(entry.Src, entry.Version, "->", newVersion)
entries[i].Version = newVersion entry.Version = newVersion
entries[i] = entry
} }
wg.Done()
}(i, entry, &wg)
} }
wg.Wait()
outb, err := yaml.Marshal(entries) outb, err := yaml.Marshal(entries)
if err != nil { if err != nil {
log.Println("ERROR: ", err) log.Println("ERROR: ", err)
@ -63,17 +74,17 @@ func parseRequirements(path string) RequirementsFile {
return req return req
} }
func updateRequirementEntry(entry RequirementsEntry) string { func getNewVersion(src, version string) string {
if ignoredVersions[entry.Version] { if ignoredVersions[version] {
return "" return ""
} }
// not a git repo // not a git repo
if !strings.Contains(entry.Src, "https") && !strings.Contains(entry.Src, "git") { if !strings.Contains(src, "git") {
return "" return ""
} }
repo := strings.Replace(entry.Src, "git+https", "https", 1) repo := strings.Replace(src, "git+https", "https", 1)
tags, err := execute("git ls-remote -tq --sort=-version:refname " + repo) tags, err := execute("git ls-remote -tq --sort=-version:refname " + repo)
if err != nil { if err != nil {
log.Println("ERROR: ", err) log.Println("ERROR: ", err)
@ -90,7 +101,8 @@ func updateRequirementEntry(entry RequirementsEntry) string {
return "" return ""
} }
last := strings.Replace(lastline[tagidx:], "refs/tags/", "", 1) last := strings.Replace(lastline[tagidx:], "refs/tags/", "", 1)
if last != entry.Version { last = strings.Replace(last, "^{}", "", 1) // NOTE: very weird case with some github repos, didn't find out why it does that
if last != version {
return last return last
} }