Add pull command
This commit is contained in:
parent
7829bbca13
commit
2f6d27d831
5 changed files with 76 additions and 3 deletions
|
@ -87,9 +87,6 @@ func (a *App) PublishNextInGithub(dryRun bool) (bool, error) {
|
|||
}
|
||||
|
||||
ticket.GithubLink = issue.GetNumber()
|
||||
if user := issue.GetUser(); user != nil {
|
||||
ticket.GithubAssignee = user.GetLogin()
|
||||
}
|
||||
ticket.GithubStatus = issue.GetState()
|
||||
if err := a.Save(); err != nil {
|
||||
return false, err
|
||||
|
|
34
app/jira.go
34
app/jira.go
|
@ -183,3 +183,37 @@ func (a *App) PublishBatchInJira(batch int, dryRun bool) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *App) GetTicketsFromJiraEpic() ([]*model.Ticket, error) {
|
||||
jql := fmt.Sprintf("project = %s AND type = %s AND \"Epic Link\" = %s", a.Campaign.Jira.Project, a.Campaign.Jira.IssueType, a.Campaign.Jira.Epic)
|
||||
|
||||
page := 0
|
||||
maxPerPage := 50
|
||||
issues := []jira.Issue{}
|
||||
for {
|
||||
opts := &jira.SearchOptions{StartAt: maxPerPage * page, MaxResults: maxPerPage}
|
||||
pageIssues, _, err := a.JiraClient.Issue.Search(jql, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
issues = append(issues, pageIssues...)
|
||||
if len(pageIssues) < maxPerPage {
|
||||
break
|
||||
}
|
||||
page++
|
||||
}
|
||||
|
||||
tickets := []*model.Ticket{}
|
||||
for _, issue := range issues {
|
||||
// ToDo: if they have github link, fill and fetch github data
|
||||
ticket := &model.Ticket{
|
||||
JiraLink: issue.Key,
|
||||
JiraStatus: issue.Fields.Status.Name,
|
||||
Summary: issue.Fields.Summary,
|
||||
Description: issue.Fields.Description,
|
||||
}
|
||||
tickets = append(tickets, ticket)
|
||||
}
|
||||
return tickets, nil
|
||||
}
|
||||
|
|
31
cmd/pull.go
Normal file
31
cmd/pull.go
Normal file
|
@ -0,0 +1,31 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"git.ctrlz.es/mgdelacroix/campaigner/app"
|
||||
)
|
||||
|
||||
func PullCmd() *cobra.Command {
|
||||
return &cobra.Command{
|
||||
Use: "pull",
|
||||
Short: "Imports tickets from Jira",
|
||||
Long: "Imports all tickets from a Jira epic issue. This command is only intended to use when the Jira tickets are already created and we want to use campaigner to import and manage them",
|
||||
Args: cobra.NoArgs,
|
||||
Run: withApp(pullCmdF),
|
||||
}
|
||||
}
|
||||
|
||||
func pullCmdF(a *app.App, cmd *cobra.Command, _ []string) {
|
||||
tickets, err := a.GetTicketsFromJiraEpic()
|
||||
if err != nil {
|
||||
ErrorAndExit(cmd, err)
|
||||
}
|
||||
|
||||
a.Campaign.AddTickets(tickets, false)
|
||||
|
||||
if err := a.Save(); err != nil {
|
||||
ErrorAndExit(cmd, err)
|
||||
}
|
||||
cmd.Printf("%d tickets have been added\n", len(tickets))
|
||||
}
|
|
@ -45,6 +45,7 @@ func RootCmd() *cobra.Command {
|
|||
InitCmd(),
|
||||
StatusCmd(),
|
||||
PublishCmd(),
|
||||
PullCmd(),
|
||||
SyncCmd(),
|
||||
)
|
||||
|
||||
|
|
|
@ -76,10 +76,17 @@ func (c *Campaign) AddTickets(tickets []*Ticket, fileOnly bool) {
|
|||
}
|
||||
|
||||
func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) {
|
||||
datalessTickets := []*Ticket{}
|
||||
ticketMap := map[string]*Ticket{}
|
||||
for _, t := range c.Tickets {
|
||||
filename, _ := t.Data["filename"].(string)
|
||||
lineNo, _ := t.Data["lineNo"].(int)
|
||||
|
||||
if filename == "" {
|
||||
datalessTickets = append(datalessTickets, t)
|
||||
continue
|
||||
}
|
||||
|
||||
if fileOnly {
|
||||
ticketMap[filename] = t
|
||||
} else {
|
||||
|
@ -88,6 +95,9 @@ func (c *Campaign) RemoveDuplicateTickets(fileOnly bool) {
|
|||
}
|
||||
|
||||
cleanTickets := []*Ticket{}
|
||||
// dataless tickets are added first as they come from already
|
||||
// existing tickets in Jira
|
||||
cleanTickets = append(cleanTickets, datalessTickets...)
|
||||
for _, t := range ticketMap {
|
||||
cleanTickets = append(cleanTickets, t)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue