grim/youtrack-import

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
  • +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
    +}