grim/youtrack-import
Clone
Summary
Browse
Changes
Graph
move the trac tickets code to it's own file
draft
2020-07-03, Gary Kramlich
a515c4b3d465
Parents
f9b83503c010
Children
d70c81dc02fc
move the trac tickets code to it's own file
2 files changed, 121 insertions(+), 120 deletions(-)
+0
-120
trac/db.go
+121
-0
trac/tickets.go
--- a/trac/db.go Fri Jul 03 20:06:06 2020 -0500
+++ b/trac/db.go Fri Jul 03 20:12:12 2020 -0500
@@ -2,54 +2,9 @@
import (
"database/sql"
- "strings"
"time"
-
- "keep.imfreedom.org/grim/youtrack-import/youtrack"
-)
-
-const (
- fieldResolution = "resolution"
)
-type ticket struct {
- ID int `db:"id"`
- Type string `db:"type"`
- Time int64 `db:"time"`
- ChangeTime int64 `db:"changetime"`
- Component sql.NullString `db:"component"`
- Severity sql.NullString `db:"severity"`
- Priority sql.NullString `db:"priority"`
- Owner sql.NullString `db:"owner"`
- Reporter sql.NullString `db:"reporter"`
- CarbonCopy sql.NullString `db:"cc"`
- Version sql.NullString `db:"version"`
- Milestone sql.NullString `db:"milestone"`
- Status string `db:"status"`
- Resolution sql.NullString `db:"resolution"`
- Summary string `db:"summary"`
- Description string `db:"description"`
- Keywords sql.NullString `db:"keywords"`
-
- Changes []ticketChange
- Customs []ticketCustom
-}
-
-type ticketChange struct {
- Ticket int `db:"ticket"`
- Time int64 `db:"time"`
- Author sql.NullString `db:"author"`
- Field string `db:"field"`
- OldValue sql.NullString `db:"oldvalue"`
- NewValue sql.NullString `db:"newvalue"`
-}
-
-type ticketCustom struct {
- Ticket int `db:"ticket"`
- Name sql.NullString `db:"name"`
- Value sql.NullString `db`
-}
-
func convertTime(t int64) time.Time {
secs := t / 1000000
mils := t % 1000000
@@ -64,78 +19,3 @@
return ""
}
-
-func (t *ticket) toYoutrack() (*youtrack.Issue, error) {
- issue := &youtrack.Issue{
- Number: t.ID,
- Summary: t.Summary,
- Description: t.Description,
- Created: convertTime(t.Time),
- Updated: convertTime(t.ChangeTime),
- Reporter: convertString(t.Reporter),
- Assignee: convertString(t.Owner),
- Markdown: false,
- Version: convertString(t.Version),
- Subsystem: convertString(t.Component),
- Priority: convertString(t.Priority),
- Type: t.Type,
- State: t.Status,
- }
-
- // convert the trac cc to a string slice
- watchers := strings.Split(convertString(t.CarbonCopy), ",")
- for idx, watcher := range watchers {
- watchers[idx] = strings.TrimSpace(watcher)
- }
- issue.Watchers = watchers
-
- // walk through the changes and update fields as necessary
- for _, change := range t.Changes {
- switch change.Field {
- case "resolution":
- if convertString(change.NewValue) == "fixed" {
- issue.Resolved = convertTime(change.Time)
- }
- case "summary":
- issue.UpdatedBy = convertString(change.Author)
- case "description":
- issue.UpdatedBy = convertString(change.Author)
- }
- }
-
- return issue, nil
-}
-
-func (e *environment) loadTickets() ([]*ticket, error) {
- var err error
-
- tickets := []*ticket{}
- err = e.db.Select(&tickets, "SELECT * FROM ticket ORDER BY id")
- if err != nil {
- return nil, err
- }
-
- for _, ticket := range tickets {
- // Load all of the ticket changes.
- err = e.db.Select(
- &ticket.Changes,
- `SELECT * FROM ticket_change WHERE ticket = $1 ORDER BY time`,
- ticket.ID,
- )
- if err != nil {
- return nil, err
- }
-
- // Load all of the ticket custom fields.
- err = e.db.Select(
- &ticket.Customs,
- `SELECT * FROM ticket_custom WHERE ticket = $1`,
- ticket.ID,
- )
- if err != nil {
- return nil, err
- }
- }
-
- return tickets, nil
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trac/tickets.go Fri Jul 03 20:12:12 2020 -0500
@@ -0,0 +1,121 @@
+package trac
+
+import (
+ "database/sql"
+ "strings"
+
+ "keep.imfreedom.org/grim/youtrack-import/youtrack"
+)
+
+type ticket struct {
+ ID int `db:"id"`
+ Type string `db:"type"`
+ Time int64 `db:"time"`
+ ChangeTime int64 `db:"changetime"`
+ Component sql.NullString `db:"component"`
+ Severity sql.NullString `db:"severity"`
+ Priority sql.NullString `db:"priority"`
+ Owner sql.NullString `db:"owner"`
+ Reporter sql.NullString `db:"reporter"`
+ CarbonCopy sql.NullString `db:"cc"`
+ Version sql.NullString `db:"version"`
+ Milestone sql.NullString `db:"milestone"`
+ Status string `db:"status"`
+ Resolution sql.NullString `db:"resolution"`
+ Summary string `db:"summary"`
+ Description string `db:"description"`
+ Keywords sql.NullString `db:"keywords"`
+
+ Changes []ticketChange
+ Customs []ticketCustom
+}
+
+type ticketChange struct {
+ Ticket int `db:"ticket"`
+ Time int64 `db:"time"`
+ Author sql.NullString `db:"author"`
+ Field string `db:"field"`
+ OldValue sql.NullString `db:"oldvalue"`
+ NewValue sql.NullString `db:"newvalue"`
+}
+
+type ticketCustom struct {
+ Ticket int `db:"ticket"`
+ Name sql.NullString `db:"name"`
+ Value sql.NullString `db`
+}
+
+func (t *ticket) toYoutrack() (*youtrack.Issue, error) {
+ issue := &youtrack.Issue{
+ Number: t.ID,
+ Summary: t.Summary,
+ Description: t.Description,
+ Created: convertTime(t.Time),
+ Updated: convertTime(t.ChangeTime),
+ Reporter: convertString(t.Reporter),
+ Assignee: convertString(t.Owner),
+ Markdown: false,
+ Version: convertString(t.Version),
+ Subsystem: convertString(t.Component),
+ Priority: convertString(t.Priority),
+ Type: t.Type,
+ State: t.Status,
+ }
+
+ // convert the trac cc to a string slice
+ watchers := strings.Split(convertString(t.CarbonCopy), ",")
+ for idx, watcher := range watchers {
+ watchers[idx] = strings.TrimSpace(watcher)
+ }
+ issue.Watchers = watchers
+
+ // walk through the changes and update fields as necessary
+ for _, change := range t.Changes {
+ switch change.Field {
+ case "resolution":
+ if convertString(change.NewValue) == "fixed" {
+ issue.Resolved = convertTime(change.Time)
+ }
+ case "summary":
+ issue.UpdatedBy = convertString(change.Author)
+ case "description":
+ issue.UpdatedBy = convertString(change.Author)
+ }
+ }
+
+ return issue, nil
+}
+
+func (e *environment) loadTickets() ([]*ticket, error) {
+ var err error
+
+ tickets := []*ticket{}
+ err = e.db.Select(&tickets, "SELECT * FROM ticket ORDER BY id")
+ if err != nil {
+ return nil, err
+ }
+
+ for _, ticket := range tickets {
+ // Load all of the ticket changes.
+ err = e.db.Select(
+ &ticket.Changes,
+ `SELECT * FROM ticket_change WHERE ticket = $1 ORDER BY time`,
+ ticket.ID,
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ // Load all of the ticket custom fields.
+ err = e.db.Select(
+ &ticket.Customs,
+ `SELECT * FROM ticket_custom WHERE ticket = $1`,
+ ticket.ID,
+ )
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ return tickets, nil
+}