Explorar o código

use exit code 126 on 'unknown-flag' errors (#723)

Zachary Rice %!s(int64=4) %!d(string=hai) anos
pai
achega
5e51da600b
Modificáronse 1 ficheiros con 22 adicións e 5 borrados
  1. 22 5
      cmd/root.go

+ 22 - 5
cmd/root.go

@@ -52,7 +52,7 @@ func initLog() {
 	zerolog.SetGlobalLevel(zerolog.InfoLevel)
 	ll, err := rootCmd.Flags().GetString("log-level")
 	if err != nil {
-		log.Fatal().Err(err)
+		log.Fatal().Msg(err.Error())
 	}
 	switch strings.ToLower(ll) {
 	case "debug":
@@ -74,7 +74,7 @@ func initConfig() {
 	fmt.Fprintf(os.Stderr, banner)
 	cfgPath, err := rootCmd.Flags().GetString("config")
 	if err != nil {
-		log.Fatal().Err(err)
+		log.Fatal().Msg(err.Error())
 	}
 	if cfgPath != "" {
 		viper.SetConfigFile(cfgPath)
@@ -82,12 +82,25 @@ func initConfig() {
 	} else {
 		source, err := rootCmd.Flags().GetString("source")
 		if err != nil {
-			log.Fatal().Err(err)
+			log.Fatal().Msg(err.Error())
 		}
+		fileInfo, err := os.Stat(source)
+		if err != nil {
+			log.Fatal().Msg(err.Error())
+		}
+
+		if !fileInfo.IsDir() {
+			log.Debug().Msgf("Unable to write default gitleaks config to %s since --source=%s is a file, using default config",
+				filepath.Join(source, ".gitleaks.toml"), source)
+			viper.SetConfigType("toml")
+			viper.ReadConfig(strings.NewReader(config.DefaultConfig))
+			return
+		}
+
 		if _, err := os.Stat(filepath.Join(source, ".gitleaks.toml")); os.IsNotExist(err) {
 			log.Debug().Msgf("No gitleaks config found, writing default gitleaks config to %s", filepath.Join(source, ".gitleaks.toml"))
 			if err := os.WriteFile(filepath.Join(source, ".gitleaks.toml"), []byte(config.DefaultConfig), os.ModePerm); err != nil {
-				log.Debug().Msgf("Unable to write default gitleaks config to %s", filepath.Join(source, ".gitleaks.toml, using default config"))
+				log.Debug().Msgf("Unable to write default gitleaks config to %s, using default config", filepath.Join(source, ".gitleaks.toml"))
 				viper.SetConfigType("toml")
 				viper.ReadConfig(strings.NewReader(config.DefaultConfig))
 				return
@@ -107,6 +120,10 @@ func initConfig() {
 
 func Execute() {
 	if err := rootCmd.Execute(); err != nil {
-		log.Fatal().Err(err)
+		if strings.Contains(err.Error(), "unknown flag") {
+			// exit code 126: Command invoked cannot execute
+			os.Exit(126)
+		}
+		log.Fatal().Msg(err.Error())
 	}
 }