mirror of
https://gitea.com/gitea/tea.git
synced 2024-12-22 09:05:06 +01:00
9efee7bf99
generalize list printing with dynamic fields refactor print.IssuesList to use tableFromItems() preparatory refactor print.IssuesList: allow printing labels move formatters to formatters.go expose more printable fields on issue add generic flags.FieldsFlag add fields flag to tea issues, tea ms issues validate provided fields add strict username, or formatted user fields change default fields tea issues -> replace updated with labels tea ms issues -> replace author with labels, reorder Validate provided fields Co-authored-by: Norwin Roosen <git@nroo.de> Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/312 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: 6543 <6543@obermui.de> Co-Authored-By: Norwin <noerw@noreply.gitea.io> Co-Committed-By: Norwin <noerw@noreply.gitea.io>
116 lines
2.6 KiB
Go
116 lines
2.6 KiB
Go
// 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 repos
|
|
|
|
import (
|
|
"code.gitea.io/tea/cmd/flags"
|
|
"code.gitea.io/tea/modules/context"
|
|
"code.gitea.io/tea/modules/print"
|
|
|
|
"code.gitea.io/sdk/gitea"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
// CmdReposListFlags contains all flags needed for repo listing
|
|
var CmdReposListFlags = append([]cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: "watched",
|
|
Aliases: []string{"w"},
|
|
Required: false,
|
|
Usage: "List your watched repos instead",
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "starred",
|
|
Aliases: []string{"s"},
|
|
Required: false,
|
|
Usage: "List your starred repos instead",
|
|
},
|
|
flags.FieldsFlag(print.RepoFields, []string{
|
|
"owner", "name", "type", "ssh",
|
|
}),
|
|
&typeFilterFlag,
|
|
&flags.PaginationPageFlag,
|
|
&flags.PaginationLimitFlag,
|
|
}, flags.LoginOutputFlags...)
|
|
|
|
// CmdReposList represents a sub command of repos to list them
|
|
var CmdReposList = cli.Command{
|
|
Name: "list",
|
|
Aliases: []string{"ls"},
|
|
Usage: "List repositories you have access to",
|
|
Description: "List repositories you have access to",
|
|
Action: RunReposList,
|
|
Flags: CmdReposListFlags,
|
|
}
|
|
|
|
// RunReposList list repositories
|
|
func RunReposList(cmd *cli.Context) error {
|
|
ctx := context.InitCommand(cmd)
|
|
client := ctx.Login.Client()
|
|
|
|
typeFilter, err := getTypeFilter(cmd)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var rps []*gitea.Repository
|
|
if ctx.Bool("starred") {
|
|
user, _, err := client.GetMyUserInfo()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
rps, _, err = client.SearchRepos(gitea.SearchRepoOptions{
|
|
ListOptions: ctx.GetListOptions(),
|
|
StarredByUserID: user.ID,
|
|
})
|
|
} else if ctx.Bool("watched") {
|
|
rps, _, err = client.GetMyWatchedRepos() // TODO: this does not expose pagination..
|
|
} else {
|
|
rps, _, err = client.ListMyRepos(gitea.ListReposOptions{
|
|
ListOptions: ctx.GetListOptions(),
|
|
})
|
|
}
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
reposFiltered := rps
|
|
if typeFilter != gitea.RepoTypeNone {
|
|
reposFiltered = filterReposByType(rps, typeFilter)
|
|
}
|
|
|
|
fields, err := flags.GetFields(cmd, print.RepoFields)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
print.ReposList(reposFiltered, ctx.Output, fields)
|
|
return nil
|
|
}
|
|
|
|
func filterReposByType(repos []*gitea.Repository, t gitea.RepoType) []*gitea.Repository {
|
|
var filtered []*gitea.Repository
|
|
for _, r := range repos {
|
|
switch t {
|
|
case gitea.RepoTypeFork:
|
|
if !r.Fork {
|
|
continue
|
|
}
|
|
case gitea.RepoTypeMirror:
|
|
if !r.Mirror {
|
|
continue
|
|
}
|
|
case gitea.RepoTypeSource:
|
|
if r.Fork || r.Mirror {
|
|
continue
|
|
}
|
|
}
|
|
|
|
filtered = append(filtered, r)
|
|
}
|
|
return filtered
|
|
}
|