diff --git a/cmd/gitcloner/gogit/cloner.go b/cmd/gitcloner/gogit/cloner.go index 8f181498..7a655de5 100644 --- a/cmd/gitcloner/gogit/cloner.go +++ b/cmd/gitcloner/gogit/cloner.go @@ -6,6 +6,7 @@ import ( "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/plumbing/protocol/packp/capability" "github.com/go-git/go-git/v5/plumbing/transport" httpgit "github.com/go-git/go-git/v5/plumbing/transport/http" gossh "github.com/go-git/go-git/v5/plumbing/transport/ssh" @@ -37,6 +38,12 @@ func NewCloner() *Cloner { } func (c *Cloner) CloneRepo(opts *cmd.Options) error { + // Azure DevOps requires capabilities multi_ack / multi_ack_detailed, + // which are not fully implemented and by default are included in + // transport.UnsupportedCapabilities. + transport.UnsupportedCapabilities = []capability.Capability{ + capability.ThinPack, + } auth, err := createAuthFromOpts(opts) if err != nil { return err diff --git a/cmd/gitcloner/gogit/cloner_test.go b/cmd/gitcloner/gogit/cloner_test.go index 9f9a3cd4..84aa5295 100644 --- a/cmd/gitcloner/gogit/cloner_test.go +++ b/cmd/gitcloner/gogit/cloner_test.go @@ -5,6 +5,9 @@ import ( "os" "testing" + "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" httpgit "github.com/go-git/go-git/v5/plumbing/transport/http" gossh "github.com/go-git/go-git/v5/plumbing/transport/ssh" @@ -172,6 +175,10 @@ udiSlDctMM/X3ZM2JN5M1rtAJ2WR3ZQtmWbOjZAbG2Eq if !cmp.Equal(cloneOptsCalled, test.expectedCloneOpts, sshKeyComparer) { t.Fatalf("expected options %v, got %v", test.expectedCloneOpts, cloneOptsCalled) } + + if !cmp.Equal(transport.UnsupportedCapabilities, []capability.Capability{capability.ThinPack}) { + t.Errorf("expected transport.UnsupportedCapabilities []capability.Capability{capability.ThinPack}, got %v", transport.UnsupportedCapabilities) + } }) } }