From e3f62ef37d7d18b3694ed1d53f6c270b6b7c93eb Mon Sep 17 00:00:00 2001 From: tomasmik Date: Fri, 28 Jul 2023 14:52:27 +0300 Subject: [PATCH] Allow to disregard gitignore file --- internal/cmd/module/flags.go | 5 +++++ internal/cmd/module/local_preview.go | 7 ++++++- internal/cmd/module/module.go | 1 + internal/cmd/stack/flags.go | 5 +++++ internal/cmd/stack/local_preview.go | 7 ++++++- internal/cmd/stack/stack.go | 1 + internal/local_preview.go | 28 +++++++++++++++------------- 7 files changed, 39 insertions(+), 15 deletions(-) diff --git a/internal/cmd/module/flags.go b/internal/cmd/module/flags.go index e1a9c91..4d40a9d 100644 --- a/internal/cmd/module/flags.go +++ b/internal/cmd/module/flags.go @@ -35,3 +35,8 @@ var flagVersion = &cli.StringFlag{ Usage: "Semver `version` for the module version. If not provided, the version " + "from the configuration file will be used", } + +var flagDisregardGitignore = &cli.BoolFlag{ + Name: "disregard-gitignore", + Usage: "[Optional] Disregard the .gitignore file when reading files in a directory", +} diff --git a/internal/cmd/module/local_preview.go b/internal/cmd/module/local_preview.go index 915ab9a..1afd31f 100644 --- a/internal/cmd/module/local_preview.go +++ b/internal/cmd/module/local_preview.go @@ -51,7 +51,12 @@ func localPreview() cli.ActionFunc { fp := filepath.Join(os.TempDir(), "spacectl", "local-workspace", fmt.Sprintf("%s.tar.gz", uploadMutation.UploadLocalWorkspace.ID)) - matchFn, err := internal.GetIgnoreMatcherFn(ctx, nil) + ignoreFiles := []string{".terraformignore"} + if !cliCtx.IsSet(flagDisregardGitignore.Name) { + ignoreFiles = append(ignoreFiles, ".gitignore") + } + + matchFn, err := internal.GetIgnoreMatcherFn(ctx, nil, ignoreFiles) if err != nil { return fmt.Errorf("couldn't analyze .gitignore and .terraformignore files") } diff --git a/internal/cmd/module/module.go b/internal/cmd/module/module.go index ae2e0cd..37f3e54 100644 --- a/internal/cmd/module/module.go +++ b/internal/cmd/module/module.go @@ -35,6 +35,7 @@ func Command() *cli.Command { flagNoFindRepositoryRoot, flagNoUpload, flagRunMetadata, + flagDisregardGitignore, }, Action: localPreview(), Before: authenticated.Ensure, diff --git a/internal/cmd/stack/flags.go b/internal/cmd/stack/flags.go index b00bcc9..edc062d 100644 --- a/internal/cmd/stack/flags.go +++ b/internal/cmd/stack/flags.go @@ -124,3 +124,8 @@ var flagOverrideEnvVars = &cli.StringSliceFlag{ Name: "env-var-override", Usage: "[Optional] Environment variables injected into the run at runtime, example: --env-var-override 'foo=bar,bar=baz'", } + +var flagDisregardGitignore = &cli.BoolFlag{ + Name: "disregard-gitignore", + Usage: "[Optional] Disregard the .gitignore file when reading files in a directory", +} diff --git a/internal/cmd/stack/local_preview.go b/internal/cmd/stack/local_preview.go index a72c97b..4915488 100644 --- a/internal/cmd/stack/local_preview.go +++ b/internal/cmd/stack/local_preview.go @@ -66,7 +66,12 @@ func localPreview() cli.ActionFunc { fp := filepath.Join(os.TempDir(), "spacectl", "local-workspace", fmt.Sprintf("%s.tar.gz", uploadMutation.UploadLocalWorkspace.ID)) - matchFn, err := internal.GetIgnoreMatcherFn(ctx, packagePath) + ignoreFiles := []string{".terraformignore"} + if !cliCtx.IsSet(flagDisregardGitignore.Name) { + ignoreFiles = append(ignoreFiles, ".gitignore") + } + + matchFn, err := internal.GetIgnoreMatcherFn(ctx, nil, ignoreFiles) if err != nil { return fmt.Errorf("couldn't analyze .gitignore and .terraformignore files") } diff --git a/internal/cmd/stack/stack.go b/internal/cmd/stack/stack.go index e7c1724..5363915 100644 --- a/internal/cmd/stack/stack.go +++ b/internal/cmd/stack/stack.go @@ -120,6 +120,7 @@ func Command() *cli.Command { flagNoUpload, flagOverrideEnvVars, flagOverrideEnvVarsTF, + flagDisregardGitignore, }, Action: localPreview(), Before: authenticated.Ensure, diff --git a/internal/local_preview.go b/internal/local_preview.go index 677d3ae..e7f83b5 100644 --- a/internal/local_preview.go +++ b/internal/local_preview.go @@ -49,25 +49,27 @@ func MoveToRepositoryRoot() error { // GetIgnoreMatcherFn creates an ignore-matcher for archiving purposes // This function respects gitignore and terraformignore, and // optionally if a projectRoot is provided it only include files from this root -func GetIgnoreMatcherFn(ctx context.Context, projectRoot *string) (func(filePath string) bool, error) { - gitignore, err := ignore.CompileIgnoreFile(".gitignore") - if err != nil && !os.IsNotExist(err) { - return nil, fmt.Errorf("couldn't compile .gitignore file: %w", err) - } - terraformignore, err := ignore.CompileIgnoreFile(".terraformignore") - if err != nil && !os.IsNotExist(err) { - return nil, fmt.Errorf("couldn't compile .terraformignore file: %w", err) +func GetIgnoreMatcherFn(ctx context.Context, projectRoot *string, ignoreFiles []string) (func(filePath string) bool, error) { + ignoreList := make([]*ignore.GitIgnore, 0) + for _, f := range ignoreFiles { + ignoreFile, err := ignore.CompileIgnoreFile(f) + if err != nil && !os.IsNotExist(err) { + return nil, fmt.Errorf("couldn't compile %s file: %w", f, err) + } + + ignoreList = append(ignoreList, ignoreFile) } + customignore := ignore.CompileIgnoreLines(".git", ".terraform") return func(filePath string) bool { if customignore.MatchesPath(filePath) { return false } - if gitignore != nil && gitignore.MatchesPath(filePath) { - return false - } - if terraformignore != nil && terraformignore.MatchesPath(filePath) { - return false + + for _, v := range ignoreList { + if v != nil && v.MatchesPath(filePath) { + return false + } } if projectRoot != nil {