Add interactive mode for tea milestone create #310

Merged
6543 merged 4 commits from YakoYakoYokuYoku/tea:interactive-ms into master 2020-12-17 18:50:08 +00:00
3 changed files with 33 additions and 32 deletions
Showing only changes of commit 2be9a124f2 - Show all commits

@ -11,9 +11,9 @@ import (
"code.gitea.io/tea/modules/context" "code.gitea.io/tea/modules/context"
"code.gitea.io/tea/modules/interact" "code.gitea.io/tea/modules/interact"
"code.gitea.io/tea/modules/task" "code.gitea.io/tea/modules/task"
"code.gitea.io/tea/modules/utils"
"code.gitea.io/sdk/gitea" "code.gitea.io/sdk/gitea"
"github.com/araddon/dateparse"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
) )
@ -36,8 +36,9 @@ var CmdMilestonesCreate = cli.Command{
Usage: "milestone description to create", Usage: "milestone description to create",
}, },
&cli.StringFlag{ &cli.StringFlag{
Name: "deadline", Name: "deadline",
Usage: "set milestone deadline (default is no due date)", Aliases: []string{"expires", "x"},
Usage: "set milestone deadline (default is no due date)",
}, },
&cli.StringFlag{ &cli.StringFlag{
Name: "state", Name: "state",
@ -53,11 +54,11 @@ func runMilestonesCreate(cmd *cli.Context) error {
date := ctx.String("deadline") date := ctx.String("deadline")
deadline := &time.Time{} deadline := &time.Time{}
if date != "" { if date != "" {
t, err := utils.GetIso8601Date(date) t, err := dateparse.ParseAny(date)
if err == nil { if err == nil {
return err return err
} }
deadline = t deadline = &t
} }
state := gitea.StateOpen state := gitea.StateOpen
@ -66,7 +67,7 @@ func runMilestonesCreate(cmd *cli.Context) error {
} }
if ctx.NumFlags() == 0 { if ctx.NumFlags() == 0 {
return interact.CreateMilestone(ctx.Login, ctx.Owner, ctx.Repo, deadline, state) return interact.CreateMilestone(ctx.Login, ctx.Owner, ctx.Repo)
} }
return task.CreateMilestone( return task.CreateMilestone(

@ -5,19 +5,21 @@
package interact package interact
import ( import (
"fmt"
"time" "time"
"code.gitea.io/tea/modules/config" "code.gitea.io/tea/modules/config"
"code.gitea.io/tea/modules/task" "code.gitea.io/tea/modules/task"
"code.gitea.io/tea/modules/utils"
"code.gitea.io/sdk/gitea" "code.gitea.io/sdk/gitea"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/araddon/dateparse"
) )
// CreateMilestone interactively creates a milestone // CreateMilestone interactively creates a milestone
func CreateMilestone(login *config.Login, owner, repo string, deadline *time.Time, state gitea.StateType) error { func CreateMilestone(login *config.Login, owner, repo string) error {
var title, description, dueDate string var title, description, dueDate string
var deadline *time.Time
// owner, repo // owner, repo
owner, repo, err := promptRepoSlug(owner, repo) owner, repo, err := promptRepoSlug(owner, repo)
@ -40,17 +42,29 @@ func CreateMilestone(login *config.Login, owner, repo string, deadline *time.Tim
// deadline // deadline
promptI = &survey.Input{Message: "Milestone deadline [no due date]:"} promptI = &survey.Input{Message: "Milestone deadline [no due date]:"}
if err := survey.AskOne(promptI, &dueDate, nil); err != nil { err = survey.AskOne(
promptI,
&dueDate,
survey.WithValidator(func(input interface{}) error {
if str, ok := input.(string); ok {
if len(str) == 0 {
return nil
}
t, err := dateparse.ParseAny(str)
if err != nil {
return err
}
deadline = &t
} else {
return fmt.Errorf("invalid result type")
}
return nil
}),
)
if err != nil {
return err return err
} }
if dueDate != "" {
deadline, err = utils.GetIso8601Date(dueDate)
if err != nil {
return err
}
} else {
deadline = nil
}
return task.CreateMilestone( return task.CreateMilestone(
login, login,
@ -59,5 +73,5 @@ func CreateMilestone(login *config.Login, owner, repo string, deadline *time.Tim
title, title,
description, description,
deadline, deadline,
state) gitea.StateOpen)
} }

@ -8,7 +8,6 @@ import (
"net/url" "net/url"
"strconv" "strconv"
"strings" "strings"
"time"
) )
// ArgToIndex take issue/pull index as string and return int64 // ArgToIndex take issue/pull index as string and return int64
@ -40,16 +39,3 @@ func GetOwnerAndRepo(repoPath, user string) (string, string) {
} }
return user, repoPath return user, repoPath
} }
// GetIso8601Date parses a date from a string
func GetIso8601Date(date string) (*time.Time, error) {
t, err := time.Parse("2006-01-02", date)
if err != nil {
t, err := time.Parse(time.RFC3339, date)
if err != nil {
return nil, err
}
return &t, nil
}
return &t, nil
}