diff --git a/pkg/openstackconfigversion/git_util.go b/pkg/openstackconfigversion/git_util.go index eb8d3f60..466c0045 100644 --- a/pkg/openstackconfigversion/git_util.go +++ b/pkg/openstackconfigversion/git_util.go @@ -30,6 +30,7 @@ import ( git "github.com/go-git/go-git/v5" config "github.com/go-git/go-git/v5/config" "github.com/go-git/go-git/v5/plumbing/format/diff" + "github.com/go-git/go-git/v5/plumbing/protocol/packp/capability" "github.com/go-git/go-git/v5/plumbing/transport" "github.com/go-git/go-git/v5/plumbing/transport/ssh" "github.com/go-git/go-git/v5/storage/memory" @@ -152,6 +153,20 @@ func SyncGit( URL: gitURL, Auth: publicKeys, }) + // if Azure DevOps is used it can fail with as azure is not compatible to go-git, https://github.com/go-git/go-git/pull/613 + // "2023-08-04T13:16:19.264Z INFO controllers.OpenStackConfigGenerator Failed to create Git repo: empty git-upload-pack given" + // retry with workaround setting capability.ThinPack + if err != nil && err == transport.ErrEmptyUploadPackRequest { + log.Info(fmt.Sprintf("set capability.ThinPack transport capability, required for Azure DevOps.")) + transport.UnsupportedCapabilities = []capability.Capability{ + capability.ThinPack, + } + + repo, err = git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ + URL: gitURL, + Auth: publicKeys, + }) + } // Failed to create Git repo: URL field is required if err != nil { log.Info(fmt.Sprintf("Failed to create Git repo: %s\n", err.Error()))