diff options
Diffstat (limited to 'data.go')
-rw-r--r-- | data.go | 87 |
1 files changed, 85 insertions, 2 deletions
@@ -28,6 +28,8 @@ import ( "io" "log" "net/http" + "runtime/debug" + "sort" "strings" "sync" "time" @@ -44,6 +46,7 @@ type Data struct { ctx context.Context Issues Issues + Features Issues Projects Projects Timestamp time.Time Freq time.Duration @@ -128,14 +131,20 @@ func (d *Data) update() { // Filter issues with old target versions out var issues = Issues{} + var features = Issues{} for _, issue := range iss.Issues { if issue.Resolution.Name == "open" && strings.Compare(d.minimumVersion, issue.TargetVersion.Name) < 0 { - issues = append(issues, issue) + if issue.Severity.Name == "feature" { + features = append(features, issue) + } else { + issues = append(issues, issue) + } } } d.Issues = issues - fmt.Println("got", len(issues), "issues") + d.Features = features + fmt.Println("got", len(iss.Issues), "entries: ", len(features), "features and ", len(issues), "issues") } func (d *Data) Loop() { @@ -175,3 +184,77 @@ func (d *Data) printTemplate(w io.Writer, name string) { log.Println(e) } } + +func (d *Data) TargetVersions() (tv []string) { + d.mux.RLock() + defer d.mux.RUnlock() + + var m = map[string]bool{} + for _, s := range d.Issues.TargetVersions() { + m[s] = true + } + for _, s := range d.Features.TargetVersions() { + m[s] = true + } + for s := range m { + tv = append(tv, s) + } + sort.Strings(tv) + return +} + +func (d *Data) Categories() (cs []string) { + d.mux.RLock() + defer d.mux.RUnlock() + + var m = map[string]bool{} + for _, s := range d.Issues.Categories() { + m[s] = true + } + for _, s := range d.Features.Categories() { + m[s] = true + } + for s := range m { + cs = append(cs, s) + } + sort.Strings(cs) + return +} + +func (d *Data) Tags() (ts []string) { + d.mux.RLock() + defer d.mux.RUnlock() + + var m = map[string]bool{} + for _, s := range d.Issues.Tags() { + m[s] = true + } + for _, s := range d.Features.Tags() { + m[s] = true + } + for s := range m { + ts = append(ts, s) + } + sort.Strings(ts) + return +} + +func (d *Data) Commit() string { + var version, timestamp = "<unknown>", "<unknown>" + if info, ok := debug.ReadBuildInfo(); ok { + for _, setting := range info.Settings { + switch setting.Key { + case "vcs.revision": + n := len(setting.Value) + if n > 8 { + n = 8 + } + version = setting.Value[:n] + case "vcs.time": + timestamp = setting.Value + } + } + } + + return version + " from " + timestamp +} |