From c319d927087f104bc73c3098bac93df2ba9d7036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Sun, 15 Dec 2024 14:24:11 +0100 Subject: [PATCH 1/4] allow to specify nested folder for git repository directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #314 Signed-off-by: Sebastian Hoß --- internal/provider/data_source_remote_test.go | 34 ++++++++++++++++++++ internal/provider/git_repository.go | 24 ++++++++++---- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/internal/provider/data_source_remote_test.go b/internal/provider/data_source_remote_test.go index 6adf9de..80847bc 100644 --- a/internal/provider/data_source_remote_test.go +++ b/internal/provider/data_source_remote_test.go @@ -9,6 +9,8 @@ import ( "fmt" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/metio/terraform-provider-git/internal/testutils" + "os" + "path/filepath" "regexp" "testing" ) @@ -111,3 +113,35 @@ func TestDataSourceGitRemote_MissingRepository(t *testing.T) { }, }) } + +func TestDataSourceGitRemote_Issue314(t *testing.T) { + t.Parallel() + directory, repository := testutils.CreateRepository(t) + nested := filepath.Join(directory, "nested") + err := os.MkdirAll(nested, os.ModePerm) + if err != nil { + t.Errorf("cannot create nested directory: %v", err) + } + remote := "example" + testutils.CreateRemote(t, repository, remote) + + resource.UnitTest(t, resource.TestCase{ + ProtoV6ProviderFactories: testutils.ProviderFactories(), + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(` + data "git_remote" "test" { + directory = "%s" + name = "%s" + } + `, nested, remote), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("data.git_remote.test", "directory", nested), + resource.TestCheckResourceAttr("data.git_remote.test", "id", remote), + resource.TestCheckResourceAttr("data.git_remote.test", "name", remote), + resource.TestCheckResourceAttr("data.git_remote.test", "urls.#", "1"), + ), + }, + }, + }) +} diff --git a/internal/provider/git_repository.go b/internal/provider/git_repository.go index 09a27be..21b5337 100644 --- a/internal/provider/git_repository.go +++ b/internal/provider/git_repository.go @@ -15,13 +15,25 @@ import ( ) func openRepository(ctx context.Context, directory string, diag *diag.Diagnostics) *git.Repository { - repository, err := git.PlainOpen(directory) + repository, err := git.PlainOpenWithOptions(directory, &git.PlainOpenOptions{ + DetectDotGit: false, + EnableDotGitCommonDir: false, + }) if err != nil { - diag.AddError( - "Cannot open repository", - "Could not open git repository ["+directory+"] because of: "+err.Error(), - ) - return nil + // we are trying to open the repository again, this time by searching upward for a .git folder + // this is necessary to support 'directory' values that point to any location within a git repository + // we cannot always enable this detection mechanism because it fails for bare repositories. + repository, err = git.PlainOpenWithOptions(directory, &git.PlainOpenOptions{ + DetectDotGit: true, + EnableDotGitCommonDir: false, + }) + if err != nil { + diag.AddError( + "Cannot open repository", + "Could not open git repository ["+directory+"] because of: "+err.Error(), + ) + return nil + } } tflog.Trace(ctx, "opened repository", map[string]interface{}{ "directory": directory, From 8db37eb3845a15cc41a7e0e040bab50f90821582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Sun, 15 Dec 2024 14:31:58 +0100 Subject: [PATCH 2/4] fix tests in GH action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sebastian Hoß --- internal/provider/resource_push_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/provider/resource_push_test.go b/internal/provider/resource_push_test.go index 62f6a6e..4672457 100644 --- a/internal/provider/resource_push_test.go +++ b/internal/provider/resource_push_test.go @@ -101,7 +101,7 @@ func TestResourceGitPush_Directory_Invalid(t *testing.T) { { Config: fmt.Sprintf(` resource "git_push" "test" { - directory = "does/not/exist" + directory = "/does/not/exist" refspecs = ["%s"] } `, "master:master"), From dc8aba93e666641380e4edfb1431fef14aa6c9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Sun, 15 Dec 2024 14:33:00 +0100 Subject: [PATCH 3/4] add version: 2 for goreleaser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sebastian Hoß --- .goreleaser.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 626310d..59eb620 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,6 +1,7 @@ # SPDX-FileCopyrightText: The terraform-provider-git Authors # SPDX-License-Identifier: 0BSD +version: 2 before: hooks: - go mod tidy @@ -50,5 +51,5 @@ release: - glob: 'terraform-registry-manifest.json' name_template: '{{ .ProjectName }}_{{ .Version }}_manifest.json' changelog: - skip: false + disable: false use: github-native From 99936918faec1cf38cd24a0b6cf825d461f38a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Sun, 15 Dec 2024 14:42:04 +0100 Subject: [PATCH 4/4] fix test on windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sebastian Hoß --- internal/provider/data_source_remote_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/provider/data_source_remote_test.go b/internal/provider/data_source_remote_test.go index 80847bc..5807fa4 100644 --- a/internal/provider/data_source_remote_test.go +++ b/internal/provider/data_source_remote_test.go @@ -134,9 +134,9 @@ func TestDataSourceGitRemote_Issue314(t *testing.T) { directory = "%s" name = "%s" } - `, nested, remote), + `, filepath.ToSlash(nested), remote), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.git_remote.test", "directory", nested), + resource.TestCheckResourceAttr("data.git_remote.test", "directory", filepath.ToSlash(nested)), resource.TestCheckResourceAttr("data.git_remote.test", "id", remote), resource.TestCheckResourceAttr("data.git_remote.test", "name", remote), resource.TestCheckResourceAttr("data.git_remote.test", "urls.#", "1"),