From bf98b6096fd1e813ebadbb1f71d4b2d4e48bdb4b Mon Sep 17 00:00:00 2001 From: Alberto Cortés Date: Wed, 16 Dec 2015 19:41:29 +0100 Subject: Add client selection based on repo URL scheme --- clients/common.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'clients/common.go') diff --git a/clients/common.go b/clients/common.go index fcbacf5..b2e906d 100644 --- a/clients/common.go +++ b/clients/common.go @@ -1,10 +1,31 @@ package clients import ( + "fmt" + "net/url" + "gopkg.in/src-d/go-git.v2/clients/common" + "gopkg.in/src-d/go-git.v2/clients/file" "gopkg.in/src-d/go-git.v2/clients/http" + "gopkg.in/src-d/go-git.v2/clients/ssh" ) -func NewGitUploadPackService() common.GitUploadPackService { - return http.NewGitUploadPackService() +// NewGitUploadPackService returns the appropiate upload pack service +// among of the set of supported protocols: HTTP, SSH or file. +// TODO: should this get a scheme as an argument instead of an URL? +func NewGitUploadPackService(repoURL string) (common.GitUploadPackService, error) { + u, err := url.Parse(repoURL) + if err != nil { + return nil, fmt.Errorf("invalid url %q", repoURL) + } + switch u.Scheme { + case "http", "https": + return http.NewGitUploadPackService(), nil + case "ssh": + return ssh.NewGitUploadPackService(), nil + case "file": + return file.NewGitUploadPackService(), nil + default: + return nil, fmt.Errorf("unsupported scheme %q", u.Scheme) + } } -- cgit