| // 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/clients/common" |
| "gopkg.in/src-d/go-git.v4/clients/http" |
| "gopkg.in/src-d/go-git.v4/clients/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 |
| } |