internal/cmd/contributors.go (65 lines of code) (raw):

/* * Copyright 2021-2024 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cmd import ( "fmt" "github.com/JetBrains/qodana-cli/internal/core" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) // contributorsOptions represents contributor command options. type contributorsOptions struct { ProjectDirs []string Days int Output string } // newShowCommand returns a new instance of the show command. func newContributorsCommand() *cobra.Command { options := &contributorsOptions{} cmd := &cobra.Command{ Use: "contributors", Short: "Calculate active project contributors", Long: fmt.Sprintf( ` A command-line helper for Qodana pricing[1] to calculate active contributor(s)[2] in the given local repositories. [1] More information about available Qodana plans can be found at %s `, core.PricingUrl, ), Run: func(cmd *cobra.Command, args []string) { if len(options.ProjectDirs) == 0 { options.ProjectDirs = append(options.ProjectDirs, ".") } contributors := core.GetContributors(options.ProjectDirs, options.Days, false) switch options.Output { case "tabular": core.PrintContributorsTable(contributors, options.Days, len(options.ProjectDirs)) return case "json": out, err := core.ToJSON(contributors) if err != nil { log.Fatalf("Failed to convert to JSON: %s", err) } _, err = fmt.Fprintln(cmd.OutOrStdout(), out) if err != nil { log.Fatalf("Failed to write to stdout: %s", err) } return default: log.Fatalf("Unknown output format: %s", options.Output) } }, } flags := cmd.Flags() flags.StringArrayVarP( &options.ProjectDirs, "project-dir", "i", []string{}, "Project directory, can be specified multiple times to check multiple projects, if not specified, current directory will be used", ) flags.IntVarP( &options.Days, "days", "d", 90, "Number of days since when to calculate the number of active contributors", ) flags.StringVarP(&options.Output, "output", "o", "tabular", "Output format, can be tabular or json") return cmd }