From d58e64a9108a9933e6157f8a2b138f4ad340385a Mon Sep 17 00:00:00 2001 From: Jeffrey Lo Date: Tue, 15 Mar 2022 13:31:24 -0400 Subject: [PATCH] Add support for GHORG_IGNORE_PATH (#194) Enable users to pass a path to an ignore file via the environment/config variable at GHORG_IGNORE_PATH. --- cmd/clone.go | 9 ++------- cmd/root.go | 5 +++-- configs/configs.go | 12 +++++++----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/cmd/clone.go b/cmd/clone.go index afb5168..5cbde82 100644 --- a/cmd/clone.go +++ b/cmd/clone.go @@ -28,7 +28,6 @@ var cloneCmd = &cobra.Command{ } func cloneFunc(cmd *cobra.Command, argz []string) { - if cmd.Flags().Changed("path") { absolutePath := configs.EnsureTrailingSlashOnFilePath((cmd.Flag("path").Value.String())) os.Setenv("GHORG_ABSOLUTE_PATH_TO_CLONE_TO", absolutePath) @@ -160,7 +159,6 @@ func cloneFunc(cmd *cobra.Command, argz []string) { } else { os.Setenv("GHORG_BITBUCKET_OAUTH_TOKEN", cmd.Flag("token").Value.String()) } - } else if os.Getenv("GHORG_SCM_TYPE") == "gitea" { os.Setenv("GHORG_GITEA_TOKEN", cmd.Flag("token").Value.String()) } @@ -241,7 +239,7 @@ func getCloneUrls(isOrg bool) ([]scm.Repo, error) { func createDirIfNotExist() { if _, err := os.Stat(os.Getenv("GHORG_ABSOLUTE_PATH_TO_CLONE_TO") + parentFolder); os.IsNotExist(err) { - err = os.MkdirAll(os.Getenv("GHORG_ABSOLUTE_PATH_TO_CLONE_TO"), 0700) + err = os.MkdirAll(os.Getenv("GHORG_ABSOLUTE_PATH_TO_CLONE_TO"), 0o700) if err != nil { panic(err) } @@ -393,7 +391,6 @@ func printDryRun(repos []scm.Repo) { // CloneAllRepos clones all repos func CloneAllRepos(git git.Gitter, cloneTargets []scm.Repo) { - // Filter repos that have attributes that don't need specific scm api calls if os.Getenv("GHORG_MATCH_REGEX") != "" { colorlog.PrintInfo("Filtering repos down by including regex matches...") @@ -468,7 +465,6 @@ func CloneAllRepos(git git.Gitter, cloneTargets []scm.Repo) { createDirIfNotExist() l, err := strconv.Atoi(os.Getenv("GHORG_CONCURRENCY")) - if err != nil { log.Fatal("Could not determine GHORG_CONCURRENCY") } @@ -534,7 +530,6 @@ func CloneAllRepos(git git.Gitter, cloneTargets []scm.Repo) { } else { err := git.Checkout(repo) - if err != nil { e := fmt.Sprintf("Could not checkout out %s, branch may not exist, no changes made Repo: %s Error: %v", repo.CloneBranch, repo.URL, err) cloneInfos = append(cloneInfos, e) @@ -687,7 +682,7 @@ func PrintConfigs() { colorlog.PrintInfo("* Wikis : " + os.Getenv("GHORG_CLONE_WIKI")) } if configs.GhorgIgnoreDetected() { - colorlog.PrintInfo("* Ghorgignore : true") + colorlog.PrintInfo("* Ghorgignore : " + configs.GhorgIgnoreLocation()) } if os.Getenv("GHORG_MATCH_REGEX") != "" { colorlog.PrintInfo("* Regex Match : " + os.Getenv("GHORG_MATCH_REGEX")) diff --git a/cmd/root.go b/cmd/root.go index 3ef53bf..a6fcb57 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -57,7 +57,6 @@ var rootCmd = &cobra.Command{ // reads in configuration file and updates anything not set to default func getOrSetDefaults(envVar string) { - if envVar == "GHORG_COLOR" { if color == "enabled" { os.Setenv("GHORG_COLOR", "enabled") @@ -80,6 +79,8 @@ func getOrSetDefaults(envVar string) { switch envVar { case "GHORG_ABSOLUTE_PATH_TO_CLONE_TO": os.Setenv(envVar, configs.GetAbsolutePathToCloneTo()) + case "GHORG_IGNORE_PATH": + os.Setenv(envVar, configs.GhorgIgnoreLocation()) case "GHORG_CLONE_PROTOCOL": os.Setenv(envVar, "https") case "GHORG_CLONE_TYPE": @@ -184,13 +185,13 @@ func InitConfig() { getOrSetDefaults("GHORG_MATCH_PREFIX") getOrSetDefaults("GHORG_EXCLUDE_MATCH_PREFIX") getOrSetDefaults("GHORG_GITLAB_GROUP_EXCLUDE_MATCH_REGEX") + getOrSetDefaults("GHORG_IGNORE_PATH") if os.Getenv("GHORG_DEBUG") != "" { viper.Debug() fmt.Println("Viper config file used:", viper.ConfigFileUsed()) fmt.Printf("GHORG_CONFIG SET TO: %s\n", os.Getenv("GHORG_CONFIG")) } - } func init() { diff --git a/configs/configs.go b/configs/configs.go index 647c923..b27b233 100644 --- a/configs/configs.go +++ b/configs/configs.go @@ -102,16 +102,18 @@ func GetCorrectFilePathSeparator() string { // GhorgIgnoreLocation returns the path of users ghorgignore func GhorgIgnoreLocation() string { + ignoreLocation := os.Getenv("GHORG_IGNORE_PATH") + if ignoreLocation != "" { + return ignoreLocation + } + return filepath.Join(GhorgDir(), "ghorgignore") } -// GhorgIgnoreDetected identify if a ghorgignore file exists in users .config/ghorg directory +// GhorgIgnoreDetected returns true if a ghorgignore file exists. func GhorgIgnoreDetected() bool { _, err := os.Stat(GhorgIgnoreLocation()) - if os.IsNotExist(err) { - return false - } - return true + return !os.IsNotExist(err) } // GhorgDir returns the ghorg directory path