issues

Github, Jira, Gitlab issues from Plan 9's acme
Log | Files | Refs | README | LICENSE

print.go (2377B)


      1 package jira
      2 
      3 import (
      4 	"fmt"
      5 	"net/url"
      6 	"path"
      7 	"strings"
      8 	"time"
      9 )
     10 
     11 func printIssues(issues []Issue) string {
     12 	buf := &strings.Builder{}
     13 	for _, ii := range issues {
     14 		name := strings.Replace(ii.Key, "-", "/", 1)
     15 		fmt.Fprintf(buf, "%s/issue\t%s\n", name, ii.Summary)
     16 	}
     17 	return buf.String()
     18 }
     19 
     20 func printIssue(i *Issue) string {
     21 	buf := &strings.Builder{}
     22 	if i.Reporter != nil {
     23 		fmt.Fprintln(buf, "From:", i.Reporter)
     24 	}
     25 	fmt.Fprintln(buf, "Date:", i.Created.Format(time.RFC1123Z))
     26 	if !i.Due.IsZero() {
     27 		fmt.Fprintln(buf, "Due:", i.Due.Format(time.RFC1123Z))
     28 	}
     29 	if i.Assignee != nil {
     30 		fmt.Fprintln(buf, "Assignee:", i.Assignee)
     31 	}
     32 	if u, err := url.Parse(i.URL); err == nil {
     33 		u.Path = path.Join("browse", i.Key)
     34 		fmt.Fprintf(buf, "Archived-At: <%s>\n", u)
     35 	}
     36 	fmt.Fprintf(buf, "Archived-At: <%s>\n", i.URL)
     37 	fmt.Fprintln(buf, "Status:", i.Status.Name)
     38 	if len(i.Links) > 0 {
     39 		s := make([]string, len(i.Links))
     40 		for j := range i.Links {
     41 			s[j] = i.Links[j].Key
     42 		}
     43 		fmt.Fprintln(buf, "References:", strings.Join(s, ", "))
     44 	}
     45 	if len(i.Subtasks) > 0 {
     46 		s := make([]string, len(i.Subtasks))
     47 		for j := range i.Subtasks {
     48 			s[j] = i.Subtasks[j].Key
     49 		}
     50 		fmt.Fprintln(buf, "Subtasks:", strings.Join(s, ", "))
     51 	}
     52 	fmt.Fprintln(buf, "Subject:", i.Summary)
     53 	fmt.Fprintln(buf)
     54 
     55 	if i.Description != "" {
     56 		fmt.Fprintln(buf, strings.ReplaceAll(i.Description, "\r", ""))
     57 	}
     58 	if len(i.Comments) == 0 {
     59 		return buf.String()
     60 	}
     61 	fmt.Fprintln(buf)
     62 	for _, c := range i.Comments {
     63 		date := c.Created
     64 		if !c.Updated.IsZero() {
     65 			date = c.Updated
     66 		}
     67 		fmt.Fprintf(buf, "%s\t%s\t%s (%s)\n", c.ID, summarise(c.Body, 36), c.Author.Name, date.Format(time.DateTime))
     68 	}
     69 	return buf.String()
     70 }
     71 
     72 func printComment(c *Comment) string {
     73 	buf := &strings.Builder{}
     74 	date := c.Created
     75 	if !c.Updated.IsZero() {
     76 		date = c.Updated
     77 	}
     78 	fmt.Fprintln(buf, "From:", c.Author)
     79 	fmt.Fprintln(buf, "Date:", date.Format(time.RFC1123Z))
     80 	fmt.Fprintln(buf)
     81 	fmt.Fprintln(buf, strings.TrimSpace(c.Body))
     82 	return buf.String()
     83 }
     84 
     85 func summarise(body string, length int) string {
     86 	if len(body) < length {
     87 		body = strings.ReplaceAll(body, "\n", " ")
     88 		return strings.TrimSpace(body)
     89 	}
     90 	body = body[:length]
     91 	body = strings.ReplaceAll(body, "\r", "")
     92 	body = strings.ReplaceAll(body, "\n", " ")
     93 	body = strings.TrimSpace(body)
     94 	body = strings.ReplaceAll(body, "  ", " ")
     95 	return body + "..."
     96 }