diff options
Diffstat (limited to 'plumbing/client/common.go')
-rw-r--r-- | plumbing/client/common.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/plumbing/client/common.go b/plumbing/client/common.go new file mode 100644 index 0000000..6a99339 --- /dev/null +++ b/plumbing/client/common.go @@ -0,0 +1,48 @@ +// Package clients includes the implementation for diferent transport protocols +// +// go-git needs the packfile and the refs of the repo. The +// `NewGitUploadPackService` function returns an object that allows to +// download them. +// +// go-git supports HTTP and SSH (see `Protocols`) for downloading the packfile +// and the refs, but you can also install your own protocols (see +// `InstallProtocol` below). +// +// Each protocol has its own implementation of +// `NewGitUploadPackService`, but you should generally not use them +// directly, use this package's `NewGitUploadPackService` instead. +package clients + +import ( + "fmt" + + "gopkg.in/src-d/go-git.v4/plumbing/client/common" + "gopkg.in/src-d/go-git.v4/plumbing/client/http" + "gopkg.in/src-d/go-git.v4/plumbing/client/ssh" +) + +type GitUploadPackServiceFactory func(common.Endpoint) common.GitUploadPackService + +// Protocols are the protocols supported by default. +var Protocols = map[string]GitUploadPackServiceFactory{ + "http": http.NewGitUploadPackService, + "https": http.NewGitUploadPackService, + "ssh": ssh.NewGitUploadPackService, +} + +// InstallProtocol adds or modifies an existing protocol. +func InstallProtocol(scheme string, f GitUploadPackServiceFactory) { + Protocols[scheme] = f +} + +// NewGitUploadPackService returns the appropriate upload pack service +// among of the set of known protocols: HTTP, SSH. See `InstallProtocol` +// to add or modify protocols. +func NewGitUploadPackService(endpoint common.Endpoint) (common.GitUploadPackService, error) { + f, ok := Protocols[endpoint.Scheme] + if !ok { + return nil, fmt.Errorf("unsupported scheme %q", endpoint.Scheme) + } + + return f(endpoint), nil +} |