From 16133212fce301e67785de21404b4a45ab3e4f9d Mon Sep 17 00:00:00 2001 From: khmarbaise Date: Mon, 7 Dec 2020 20:29:48 +0800 Subject: [PATCH] Add `times ls` (#272) add `times ls` Fix #242 Move `list` code into times/list.go to make it more in line with the rest of the code. add `times ls` reformatted code. Signed-off-by: Karl Heinz Marbaise Removed version check as suggested through the review. Co-authored-by: Karl Heinz Marbaise Reviewed-on: https://gitea.com/gitea/tea/pulls/272 Reviewed-by: Norwin Reviewed-by: 6543 <6543@obermui.de> Co-Authored-By: khmarbaise Co-Committed-By: khmarbaise --- cmd/times.go | 77 +------------------------------------ cmd/times/list.go | 97 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 75 deletions(-) create mode 100644 cmd/times/list.go diff --git a/cmd/times.go b/cmd/times.go index 01da736..fbb0d31 100644 --- a/cmd/times.go +++ b/cmd/times.go @@ -5,18 +5,7 @@ package cmd import ( - "fmt" - "strings" - "time" - - "code.gitea.io/tea/cmd/flags" "code.gitea.io/tea/cmd/times" - "code.gitea.io/tea/modules/config" - "code.gitea.io/tea/modules/print" - "code.gitea.io/tea/modules/utils" - - "code.gitea.io/sdk/gitea" - "github.com/araddon/dateparse" "github.com/urfave/cli/v2" ) @@ -34,72 +23,10 @@ var CmdTrackedTimes = cli.Command{ ×.CmdTrackedTimesAdd, ×.CmdTrackedTimesDelete, ×.CmdTrackedTimesReset, + ×.CmdTrackedTimesList, }, - Flags: append([]cli.Flag{ - &cli.StringFlag{ - Name: "from", - Aliases: []string{"f"}, - Usage: "Show only times tracked after this date", - }, - &cli.StringFlag{ - Name: "until", - Aliases: []string{"u"}, - Usage: "Show only times tracked before this date", - }, - &cli.BoolFlag{ - Name: "total", - Aliases: []string{"t"}, - Usage: "Print the total duration at the end", - }, - }, flags.AllDefaultFlags...), } func runTrackedTimes(ctx *cli.Context) error { - login, owner, repo := config.InitCommand(flags.GlobalRepoValue, flags.GlobalLoginValue, flags.GlobalRemoteValue) - client := login.Client() - - if err := client.CheckServerVersionConstraint(">= 1.11"); err != nil { - return err - } - - var times []*gitea.TrackedTime - var err error - - user := ctx.Args().First() - fmt.Println(ctx.Command.ArgsUsage) - if user == "" { - // get all tracked times on the repo - times, _, err = client.GetRepoTrackedTimes(owner, repo) - } else if strings.HasPrefix(user, "#") { - // get all tracked times on the specified issue - issue, err := utils.ArgToIndex(user) - if err != nil { - return err - } - times, _, err = client.ListTrackedTimes(owner, repo, issue, gitea.ListTrackedTimesOptions{}) - } else { - // get all tracked times by the specified user - times, _, err = client.GetUserTrackedTimes(owner, repo, user) - } - - if err != nil { - return err - } - - var from, until time.Time - if ctx.String("from") != "" { - from, err = dateparse.ParseLocal(ctx.String("from")) - if err != nil { - return err - } - } - if ctx.String("until") != "" { - until, err = dateparse.ParseLocal(ctx.String("until")) - if err != nil { - return err - } - } - - print.TrackedTimesList(times, flags.GlobalOutputValue, from, until, ctx.Bool("total")) - return nil + return times.RunTimesList(ctx) } diff --git a/cmd/times/list.go b/cmd/times/list.go new file mode 100644 index 0000000..62c1887 --- /dev/null +++ b/cmd/times/list.go @@ -0,0 +1,97 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package times + +import ( + "fmt" + "strings" + "time" + + "code.gitea.io/tea/cmd/flags" + "code.gitea.io/tea/modules/config" + "code.gitea.io/tea/modules/print" + "code.gitea.io/tea/modules/utils" + + "code.gitea.io/sdk/gitea" + "github.com/araddon/dateparse" + "github.com/urfave/cli/v2" +) + +// CmdTrackedTimesList represents a sub command of times to list them +var CmdTrackedTimesList = cli.Command{ + Name: "ls", + Aliases: []string{"list"}, + Action: RunTimesList, + Usage: "Operate on tracked times of a repository's issues & pulls", + Description: `Operate on tracked times of a repository's issues & pulls. + Depending on your permissions on the repository, only your own tracked + times might be listed.`, + ArgsUsage: "[username | #issue]", + + Flags: append([]cli.Flag{ + &cli.StringFlag{ + Name: "from", + Aliases: []string{"f"}, + Usage: "Show only times tracked after this date", + }, + &cli.StringFlag{ + Name: "until", + Aliases: []string{"u"}, + Usage: "Show only times tracked before this date", + }, + &cli.BoolFlag{ + Name: "total", + Aliases: []string{"t"}, + Usage: "Print the total duration at the end", + }, + }, flags.AllDefaultFlags...), +} + +// RunTimesList list repositories +func RunTimesList(ctx *cli.Context) error { + login, owner, repo := config.InitCommand(flags.GlobalRepoValue, flags.GlobalLoginValue, flags.GlobalRemoteValue) + client := login.Client() + + var times []*gitea.TrackedTime + var err error + + user := ctx.Args().First() + fmt.Println(ctx.Command.ArgsUsage) + if user == "" { + // get all tracked times on the repo + times, _, err = client.GetRepoTrackedTimes(owner, repo) + } else if strings.HasPrefix(user, "#") { + // get all tracked times on the specified issue + issue, err := utils.ArgToIndex(user) + if err != nil { + return err + } + times, _, err = client.ListTrackedTimes(owner, repo, issue, gitea.ListTrackedTimesOptions{}) + } else { + // get all tracked times by the specified user + times, _, err = client.GetUserTrackedTimes(owner, repo, user) + } + + if err != nil { + return err + } + + var from, until time.Time + if ctx.String("from") != "" { + from, err = dateparse.ParseLocal(ctx.String("from")) + if err != nil { + return err + } + } + if ctx.String("until") != "" { + until, err = dateparse.ParseLocal(ctx.String("until")) + if err != nil { + return err + } + } + + print.TrackedTimesList(times, flags.GlobalOutputValue, from, until, ctx.Bool("total")) + return nil +}