commit - fac10d65517b52cbfcfb48d395832524025afbeb
commit + 8a4b7c017983246797ee7a4cd56c6a6175126ca7
blob - ebe4369672e9aef95dc2e4b1ed23a552f83e7e53
blob + 19956a7dd143d738e70e4c28290741634b4abb00
--- Jira/acme.go
+++ Jira/acme.go
import (
"bytes"
"errors"
+ "flag"
"fmt"
"io"
"io/fs"
if !ok {
win.Errf("cannot search with filesystem type %T", fsys)
}
- win.PrintTabbed("Search "+query+"\n\n")
+ win.PrintTabbed("Search " + query + "\n\n")
issues, err := f.client.SearchIssues(query)
if err != nil {
win.Errf("search %q: %v", query, err)
return u, p, nil
}
-// TODO(otl): don't hardcode lol
-const host string = "audinate.atlassian.net"
+var hostFlag = flag.String("h", "jira.atlassian.com", "")
func main() {
+ flag.Parse()
home, err := os.UserHomeDir()
if err != nil {
log.Fatalf("find user config dir: %v", err)
}
credPath := path.Join(home, ".config/atlassian/jira")
- if len(os.Args) == 2 {
- credPath = os.Args[1]
- } else if len(os.Args) > 2 {
+ if len(flag.Args()) == 1 {
+ credPath = flag.Args()[0]
+ } else if len(flag.Args()) > 2 {
fmt.Fprintln(os.Stderr, usage)
os.Exit(2)
}
// srv := newFakeServer("testdata")
// defer srv.Close()
- u, err := url.Parse("https://" + host + "/rest/api/2")
+ u, err := url.Parse("https://" + *hostFlag + "/rest/api/2")
if err != nil {
log.Fatalf("parse api root url: %v", err)
}
blob - 7d5e3e863c132c13bf3adc9b01b52763e98c655c
blob + 9f2ca6d5ec44a9f54ca4f17c2e40776f3e915c97
--- Jira/jira.go
+++ Jira/jira.go
Created time.Time
Updated time.Time
Comments []Comment
- Subtasks []Issue
+ Links []Issue
+ Subtasks []Issue
}
type Project struct {
type User struct {
Name string `json:"name"`
- Email string `json:"emailAddress"`
+ Email string `json:"emailAddress"`
DisplayName string `json:"displayName"`
}
type alias Issue
iaux := &struct {
- Created string
- Updated string
- Comment map[string]json.RawMessage
+ Created string
+ Updated string
+ Comment map[string]json.RawMessage
+ IssueLinks []struct {
+ InwardIssue *Issue
+ OutwardIssue *Issue
+ }
*alias
}{
alias: (*alias)(issue),
return fmt.Errorf("unmarshal comments: %w", err)
}
}
+ for _, l := range iaux.IssueLinks {
+ if l.InwardIssue != nil {
+ issue.Links = append(issue.Links, *l.InwardIssue)
+ }
+ if l.OutwardIssue != nil {
+ issue.Links = append(issue.Links, *l.OutwardIssue)
+ }
+ }
return nil
}
blob - ca18c7050d18fc42f8b01338c381089a8dccba07
blob + 9d7a88427bd487c8a301a98162ef2b36961e2ee8
--- Jira/jira_test.go
+++ Jira/jira_test.go
import (
"encoding/json"
- "fmt"
"os"
"testing"
)
}
}
+/*
func TestSubtasks(t *testing.T) {
f, err := os.Open("testdata/subtasks")
if err != nil {
}
fmt.Println(is.Subtasks)
}
+*/
blob - 516fb01ba5686ddaf74cba85cb90712b7da5aba6
blob + 2883317a3ad95736195ab1c971d64ba2af462f85
--- Jira/print.go
+++ Jira/print.go
func printIssue(i *Issue) string {
buf := &strings.Builder{}
fmt.Fprintln(buf, "From:", i.Reporter)
+ fmt.Fprintln(buf, "Date:", i.Created.Format(time.RFC1123Z))
if i.Assignee.String() != "" {
fmt.Fprintln(buf, "Assignee:", i.Assignee)
}
fmt.Fprintf(buf, "Archived-At: <%s>\n", u)
}
fmt.Fprintf(buf, "Archived-At: <%s>\n", i.URL)
- fmt.Fprintln(buf, "Date:", i.Updated.Format(time.RFC1123Z))
fmt.Fprintln(buf, "Status:", i.Status.Name)
+ if len(i.Links) > 0 {
+ s := make([]string, len(i.Links))
+ for j := range i.Links {
+ s[j] = i.Links[j].Key
+ }
+ fmt.Fprintln(buf, "References:", strings.Join(s, ", "))
+ }
if len(i.Subtasks) > 0 {
s := make([]string, len(i.Subtasks))
for j := range i.Subtasks {