Refactor gitlab to generic remotes

This commit is contained in:
2024-01-15 15:39:35 -05:00
parent da209c53e3
commit d6833a9ea0
21 changed files with 208 additions and 172 deletions

View File

@ -7,8 +7,8 @@ import (
"github.com/pterm/pterm"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes"
cacheProjects "gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes/projects"
)
var aliasAddCmd = &cobra.Command{
@ -21,7 +21,7 @@ var aliasAddCmd = &cobra.Command{
}
func runAddAliasCmd(cmd *cobra.Command, args []string) {
var project *remotes.Project
var project *projects.Project
// Check by flag
if projectID := viper.GetInt("alias.add.projectid"); projectID > 0 {
@ -76,12 +76,12 @@ func addNewAliases(projectID int) {
}
}
func promptAliasesForProject(p *remotes.Project) []string {
func promptAliasesForProject(p *projects.Project) []string {
aliases := cache.GetProjectAliases(p)
if len(aliases) > 0 {
plog.Info("Adding aliases to project", plog.Args(
"project", p.String(),
"existingAliases", projects.ProjectAliasesString(aliases),
"existingAliases", cacheProjects.ProjectAliasesString(aliases),
))
} else {
pterm.Info.Printfln("Adding aliases to %s", p.Name)

View File

@ -6,7 +6,7 @@ import (
"github.com/pterm/pterm"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes/projects"
)
var aliasDeleteCmd = &cobra.Command{
@ -19,7 +19,7 @@ var aliasDeleteCmd = &cobra.Command{
}
func runDeleteAliasCmd(cmd *cobra.Command, args []string) {
var project *remotes.Project
var project *projects.Project
var err error
fzfOpts := &fzfProjectOpts{

View File

@ -3,8 +3,8 @@ package cmd
import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes"
cacheProjects "gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes/projects"
)
var projectCmd = &cobra.Command{
@ -19,7 +19,7 @@ var projectCmd = &cobra.Command{
// Run: projectGoCmdRun,
}
func getProject(args []string) *remotes.Project {
func getProject(args []string) *projects.Project {
gitlabs := viper.GetStringSlice("project.gitlabs")
fzfOpts := &fzfProjectOpts{
Ctx: rootCmd.Context(),
@ -33,7 +33,7 @@ func getProject(args []string) *remotes.Project {
} else {
plog.Debug("Houston, we have a project", plog.Args(
"project", project.String(),
"aliases", projects.ProjectAliasesString(
"aliases", cacheProjects.ProjectAliasesString(
cache.GetProjectAliases(project)),
))
}

View File

@ -7,7 +7,7 @@ import (
"github.com/pterm/pterm"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes/projects"
)
var projectShowCmd = &cobra.Command{
@ -20,7 +20,7 @@ var projectShowCmd = &cobra.Command{
}
func projectShowCmdRun(cmd *cobra.Command, args []string) {
var project *remotes.Project
var project *projects.Project
var inCwd bool
gitlabs := viper.GetStringSlice("project.gitlabs")

View File

@ -4,8 +4,8 @@ import (
"context"
fzf "github.com/ktr0731/go-fuzzyfinder"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes"
cacheProjects "gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/projects"
"gitlab.sweetwater.com/it/devops/tools/gitlab-project-manager/internal/remotes/projects"
"golang.org/x/exp/slices"
)
@ -18,8 +18,8 @@ type fzfProjectOpts struct {
// This will try to find a project by alias if a search term
// is given, otherwise will fuzzy find by project
func fzfFindProject(opts *fzfProjectOpts) *remotes.Project {
var project *remotes.Project
func fzfFindProject(opts *fzfProjectOpts) *projects.Project {
var project *projects.Project
if opts.Search != "" {
project = fzfSearchProjectAliases(opts)
@ -37,8 +37,8 @@ func fzfFindProject(opts *fzfProjectOpts) *remotes.Project {
// If . is given as a project, will open project from the
// current working directory. Otherwise, will attempt to fuzzy-find
// a project given a search term if provided
func fzfCwdOrSearchProjectAliases(opts *fzfProjectOpts) *remotes.Project {
var project *remotes.Project
func fzfCwdOrSearchProjectAliases(opts *fzfProjectOpts) *projects.Project {
var project *projects.Project
if opts.Search == "." {
project, _ = cache.GetProjectFromCwd()
} else {
@ -49,9 +49,9 @@ func fzfCwdOrSearchProjectAliases(opts *fzfProjectOpts) *remotes.Project {
// This will fuzzy search only aliases, preferring an exact
// match if one is given
func fzfSearchProjectAliases(opts *fzfProjectOpts) *remotes.Project {
var project *remotes.Project
var alias *projects.ProjectAlias
func fzfSearchProjectAliases(opts *fzfProjectOpts) *projects.Project {
var project *projects.Project
var alias *cacheProjects.ProjectAlias
if alias = cache.GetAliasByName(opts.Search, opts.Gitlabs...); alias != nil {
project = cache.GetProjectByAlias(alias)
plog.Info("Perfect alias match... flawless")
@ -75,8 +75,8 @@ func fzfSearchProjectAliases(opts *fzfProjectOpts) *remotes.Project {
// a single one. Replaced by fzfProjectFromAliases in fzfSearchProjectAliases
// as merging is preferred, but can be used if it's ever desirable to
// return a single alias from all aliases
func fzfAliasFromAliases(opts *fzfProjectOpts, aliases []*projects.ProjectAlias) *projects.ProjectAlias {
var alias *projects.ProjectAlias
func fzfAliasFromAliases(opts *fzfProjectOpts, aliases []*cacheProjects.ProjectAlias) *cacheProjects.ProjectAlias {
var alias *cacheProjects.ProjectAlias
i, err := fzf.Find(
aliases,
func(i int) string {
@ -95,8 +95,8 @@ func fzfAliasFromAliases(opts *fzfProjectOpts, aliases []*projects.ProjectAlias)
// Given a list of aliases, merge them together and use the resulting
// list of projects to return a project
func fzfProjectFromAliases(opts *fzfProjectOpts, aliases []*projects.ProjectAlias) (
*remotes.Project, error) {
func fzfProjectFromAliases(opts *fzfProjectOpts, aliases []*cacheProjects.ProjectAlias) (
*projects.Project, error) {
mergedProjects := projectsFromAliases(aliases)
if len(mergedProjects) == 1 {
return mergedProjects[0], nil
@ -104,8 +104,8 @@ func fzfProjectFromAliases(opts *fzfProjectOpts, aliases []*projects.ProjectAlia
return fzfProjectFromProjects(opts, mergedProjects)
}
func projectsFromAliases(aliases []*projects.ProjectAlias) []*remotes.Project {
projects := make([]*remotes.Project, 0)
func projectsFromAliases(aliases []*cacheProjects.ProjectAlias) []*projects.Project {
projects := make([]*projects.Project, 0)
ALIASES:
for _, a := range aliases {
@ -123,8 +123,8 @@ ALIASES:
// If opts.MustHaveAlias, will only allow selection of projects
// that have at least one alias defined
func fzfProject(opts *fzfProjectOpts) (*remotes.Project, error) {
var searchableProjects []*remotes.Project
func fzfProject(opts *fzfProjectOpts) (*projects.Project, error) {
var searchableProjects []*projects.Project
if opts.MustHaveAlias {
searchableProjects = cache.GetProjectsWithAliases()
} else {
@ -136,8 +136,8 @@ func fzfProject(opts *fzfProjectOpts) (*remotes.Project, error) {
}
// Takes a list of projects and performs a fuzzyfind
func fzfProjectFromProjects(opts *fzfProjectOpts, projects []*remotes.Project) (
*remotes.Project, error) {
func fzfProjectFromProjects(opts *fzfProjectOpts, projects []*projects.Project) (
*projects.Project, error) {
i, err := fzf.Find(projects,
func(i int) string {
// Display the project along with its aliases
@ -162,16 +162,16 @@ func fzfPreviewWindow(i, w, h int) string {
return cache.ProjectString(p)
}
func filterProjectsWithGitlabs(projects []*remotes.Project, gitlabs ...string) []*remotes.Project {
filteredProjects := make([]*remotes.Project, 0, len(projects))
func filterProjectsWithGitlabs(gitProjects []*projects.Project, gitlabs ...string) []*projects.Project {
filteredProjects := make([]*projects.Project, 0, len(gitProjects))
if len(gitlabs) > 0 {
for _, p := range projects {
for _, p := range gitProjects {
if slices.Contains(gitlabs, p.Remote) {
filteredProjects = append(filteredProjects, p)
}
}
} else {
filteredProjects = projects
filteredProjects = gitProjects
}
return filteredProjects
}