aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Sjoding <joshua.sjoding@scjalliance.com>2016-02-15 19:44:25 -0800
committerJoshua Sjoding <joshua.sjoding@scjalliance.com>2016-02-15 19:44:25 -0800
commit45478768e1fa49030b574aec13390fb2d9479836 (patch)
treeae7a36bc8ab034d660191d3321b63865fa2f0560
parentdf3481d67f83782c7f29071f5b5e0e83f3435885 (diff)
parentb682f0fbf014cf912fa94f3120fb3626ea7c4325 (diff)
downloadgo-git-45478768e1fa49030b574aec13390fb2d9479836.tar.gz
Merge remote-tracking branch 'upstream/master' into generic-object-storage
-rw-r--r--clients/common.go39
-rw-r--r--clients/common_test.go21
-rw-r--r--clients/http/git_upload_pack.go3
-rw-r--r--clients/http/git_upload_pack_test.go12
-rw-r--r--clients/ssh/auth_method_test.go20
-rw-r--r--clients/ssh/git_upload_pack.go3
-rw-r--r--clients/ssh/git_upload_pack_test.go38
-rw-r--r--core/object.go8
8 files changed, 75 insertions, 69 deletions
diff --git a/clients/common.go b/clients/common.go
index ce36dd1..039404d 100644
--- a/clients/common.go
+++ b/clients/common.go
@@ -20,31 +20,33 @@ import (
"gopkg.in/src-d/go-git.v2/clients/ssh"
)
-// ServiceFromURLFunc defines a service returning function for a given
-// URL.
-type ServiceFromURLFunc func(url string) common.GitUploadPackService
-
// DefaultProtocols are the protocols supported by default.
-// Wrapping is needed because you can not cast a function that
-// returns an implementation of an interface to a function that
-// returns the interface.
-var DefaultProtocols = map[string]ServiceFromURLFunc{
- "http": func(s string) common.GitUploadPackService { return http.NewGitUploadPackService(s) },
- "https": func(s string) common.GitUploadPackService { return http.NewGitUploadPackService(s) },
- "ssh": func(s string) common.GitUploadPackService { return ssh.NewGitUploadPackService(s) },
+var DefaultProtocols = map[string]common.GitUploadPackService{
+ "http": http.NewGitUploadPackService(),
+ "https": http.NewGitUploadPackService(),
+ "ssh": ssh.NewGitUploadPackService(),
}
// KnownProtocols holds the current set of known protocols. Initially
// it gets its contents from `DefaultProtocols`. See `InstallProtocol`
// below to add or modify this variable.
-var KnownProtocols = make(map[string]ServiceFromURLFunc, len(DefaultProtocols))
+var KnownProtocols = make(map[string]common.GitUploadPackService, len(DefaultProtocols))
func init() {
for k, v := range DefaultProtocols {
- KnownProtocols[k] = v
+ InstallProtocol(k, v)
}
}
+// InstallProtocol adds or modifies an existing protocol.
+func InstallProtocol(scheme string, service common.GitUploadPackService) {
+ if service == nil {
+ panic("nil service")
+ }
+
+ KnownProtocols[scheme] = service
+}
+
// NewGitUploadPackService returns the appropiate upload pack service
// among of the set of known protocols: HTTP, SSH. See `InstallProtocol`
// to add or modify protocols.
@@ -53,17 +55,10 @@ func NewGitUploadPackService(repoURL string) (common.GitUploadPackService, error
if err != nil {
return nil, fmt.Errorf("invalid url %q", repoURL)
}
- srvFn, ok := KnownProtocols[u.Scheme]
+ service, ok := KnownProtocols[u.Scheme]
if !ok {
return nil, fmt.Errorf("unsupported scheme %q", u.Scheme)
}
- return srvFn(repoURL), nil
-}
-// InstallProtocol adds or modifies an existing protocol.
-func InstallProtocol(scheme string, serviceFn ServiceFromURLFunc) {
- if serviceFn == nil {
- panic("nil service")
- }
- KnownProtocols[scheme] = serviceFn
+ return service, nil
}
diff --git a/clients/common_test.go b/clients/common_test.go
index ff9ca32..c3b766b 100644
--- a/clients/common_test.go
+++ b/clients/common_test.go
@@ -37,7 +37,7 @@ func (s *SuiteCommon) TestNewGitUploadPackService(c *C) {
type dummyProtocolService struct{}
-func newDummyProtocolService(url string) common.GitUploadPackService {
+func newDummyProtocolService() common.GitUploadPackService {
return &dummyProtocolService{}
}
@@ -59,23 +59,24 @@ func (s *dummyProtocolService) Fetch(r *common.GitUploadPackRequest) (io.ReadClo
func (s *SuiteCommon) TestInstallProtocol(c *C) {
var tests = [...]struct {
- scheme string
- serviceFn ServiceFromURLFunc
- panic bool
+ scheme string
+ service common.GitUploadPackService
+ panic bool
}{
{"panic", nil, true},
- {"newscheme", newDummyProtocolService, false},
- {"http", newDummyProtocolService, false},
+ {"newscheme", newDummyProtocolService(), false},
+ {"http", newDummyProtocolService(), false},
}
for i, t := range tests {
if t.panic {
- fmt.Println(t.serviceFn == nil)
- c.Assert(func() { InstallProtocol(t.scheme, t.serviceFn) }, PanicMatches, `nil service`)
+ fmt.Println(t.service == nil)
+ c.Assert(func() { InstallProtocol(t.scheme, t.service) }, PanicMatches, `nil service`)
continue
}
- InstallProtocol(t.scheme, t.serviceFn)
- c.Assert(typeAsString(KnownProtocols[t.scheme]), Equals, typeAsString(t.serviceFn), Commentf("%d) wrong service", i))
+
+ InstallProtocol(t.scheme, t.service)
+ c.Assert(typeAsString(KnownProtocols[t.scheme]), Equals, typeAsString(t.service), Commentf("%d) wrong service", i))
// reset to default protocols after installing
if v, ok := DefaultProtocols[t.scheme]; ok {
InstallProtocol(t.scheme, v)
diff --git a/clients/http/git_upload_pack.go b/clients/http/git_upload_pack.go
index 4b06c72..2d38d42 100644
--- a/clients/http/git_upload_pack.go
+++ b/clients/http/git_upload_pack.go
@@ -18,8 +18,7 @@ type GitUploadPackService struct {
auth HTTPAuthMethod
}
-func NewGitUploadPackService(url string) *GitUploadPackService {
- // url ignored
+func NewGitUploadPackService() *GitUploadPackService {
return &GitUploadPackService{
Client: http.DefaultClient,
}
diff --git a/clients/http/git_upload_pack_test.go b/clients/http/git_upload_pack_test.go
index b479155..f9ec424 100644
--- a/clients/http/git_upload_pack_test.go
+++ b/clients/http/git_upload_pack_test.go
@@ -15,13 +15,13 @@ var _ = Suite(&SuiteRemote{})
const RepositoryFixture = "https://github.com/tyba/git-fixture"
func (s *SuiteRemote) TestConnect(c *C) {
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.Connect(RepositoryFixture), IsNil)
}
func (s *SuiteRemote) TestConnectWithAuth(c *C) {
auth := &BasicAuth{}
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(RepositoryFixture, auth), IsNil)
c.Assert(r.auth, Equals, auth)
}
@@ -32,12 +32,12 @@ func (*mockAuth) Name() string { return "" }
func (*mockAuth) String() string { return "" }
func (s *SuiteRemote) TestConnectWithAuthWrongType(c *C) {
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(RepositoryFixture, &mockAuth{}), Equals, InvalidAuthMethodErr)
}
func (s *SuiteRemote) TestDefaultBranch(c *C) {
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.Connect(RepositoryFixture), IsNil)
info, err := r.Info()
@@ -46,7 +46,7 @@ func (s *SuiteRemote) TestDefaultBranch(c *C) {
}
func (s *SuiteRemote) TestCapabilities(c *C) {
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.Connect(RepositoryFixture), IsNil)
info, err := r.Info()
@@ -55,7 +55,7 @@ func (s *SuiteRemote) TestCapabilities(c *C) {
}
func (s *SuiteRemote) TestFetch(c *C) {
- r := NewGitUploadPackService(RepositoryFixture)
+ r := NewGitUploadPackService()
c.Assert(r.Connect(RepositoryFixture), IsNil)
req := &common.GitUploadPackRequest{}
diff --git a/clients/ssh/auth_method_test.go b/clients/ssh/auth_method_test.go
index ca4558d..a87c950 100644
--- a/clients/ssh/auth_method_test.go
+++ b/clients/ssh/auth_method_test.go
@@ -13,7 +13,7 @@ type SuiteCommon struct{}
var _ = Suite(&SuiteCommon{})
-func (s *SuiteRemote) TestKeyboardInteractiveName(c *C) {
+func (s *SuiteCommon) TestKeyboardInteractiveName(c *C) {
a := &KeyboardInteractive{
User: "test",
Challenge: nil,
@@ -21,7 +21,7 @@ func (s *SuiteRemote) TestKeyboardInteractiveName(c *C) {
c.Assert(a.Name(), Equals, KeyboardInteractiveName)
}
-func (s *SuiteRemote) TestKeyboardInteractiveString(c *C) {
+func (s *SuiteCommon) TestKeyboardInteractiveString(c *C) {
a := &KeyboardInteractive{
User: "test",
Challenge: nil,
@@ -29,7 +29,7 @@ func (s *SuiteRemote) TestKeyboardInteractiveString(c *C) {
c.Assert(a.String(), Equals, fmt.Sprintf("user: test, name: %s", KeyboardInteractiveName))
}
-func (s *SuiteRemote) TestPasswordName(c *C) {
+func (s *SuiteCommon) TestPasswordName(c *C) {
a := &Password{
User: "test",
Pass: "",
@@ -37,7 +37,7 @@ func (s *SuiteRemote) TestPasswordName(c *C) {
c.Assert(a.Name(), Equals, PasswordName)
}
-func (s *SuiteRemote) TestPasswordString(c *C) {
+func (s *SuiteCommon) TestPasswordString(c *C) {
a := &Password{
User: "test",
Pass: "",
@@ -45,7 +45,7 @@ func (s *SuiteRemote) TestPasswordString(c *C) {
c.Assert(a.String(), Equals, fmt.Sprintf("user: test, name: %s", PasswordName))
}
-func (s *SuiteRemote) TestPasswordCallbackName(c *C) {
+func (s *SuiteCommon) TestPasswordCallbackName(c *C) {
a := &PasswordCallback{
User: "test",
Callback: nil,
@@ -53,7 +53,7 @@ func (s *SuiteRemote) TestPasswordCallbackName(c *C) {
c.Assert(a.Name(), Equals, PasswordCallbackName)
}
-func (s *SuiteRemote) TestPasswordCallbackString(c *C) {
+func (s *SuiteCommon) TestPasswordCallbackString(c *C) {
a := &PasswordCallback{
User: "test",
Callback: nil,
@@ -61,7 +61,7 @@ func (s *SuiteRemote) TestPasswordCallbackString(c *C) {
c.Assert(a.String(), Equals, fmt.Sprintf("user: test, name: %s", PasswordCallbackName))
}
-func (s *SuiteRemote) TestPublicKeysName(c *C) {
+func (s *SuiteCommon) TestPublicKeysName(c *C) {
a := &PublicKeys{
User: "test",
Signer: nil,
@@ -69,7 +69,7 @@ func (s *SuiteRemote) TestPublicKeysName(c *C) {
c.Assert(a.Name(), Equals, PublicKeysName)
}
-func (s *SuiteRemote) TestPublicKeysString(c *C) {
+func (s *SuiteCommon) TestPublicKeysString(c *C) {
a := &PublicKeys{
User: "test",
Signer: nil,
@@ -77,7 +77,7 @@ func (s *SuiteRemote) TestPublicKeysString(c *C) {
c.Assert(a.String(), Equals, fmt.Sprintf("user: test, name: %s", PublicKeysName))
}
-func (s *SuiteRemote) TestPublicKeysCallbackName(c *C) {
+func (s *SuiteCommon) TestPublicKeysCallbackName(c *C) {
a := &PublicKeysCallback{
User: "test",
Callback: nil,
@@ -85,7 +85,7 @@ func (s *SuiteRemote) TestPublicKeysCallbackName(c *C) {
c.Assert(a.Name(), Equals, PublicKeysCallbackName)
}
-func (s *SuiteRemote) TestPublicKeysCallbackString(c *C) {
+func (s *SuiteCommon) TestPublicKeysCallbackString(c *C) {
a := &PublicKeysCallback{
User: "test",
Callback: nil,
diff --git a/clients/ssh/git_upload_pack.go b/clients/ssh/git_upload_pack.go
index 4a4021d..09cb5ab 100644
--- a/clients/ssh/git_upload_pack.go
+++ b/clients/ssh/git_upload_pack.go
@@ -42,8 +42,7 @@ type GitUploadPackService struct {
// NewGitUploadPackService initialises a GitUploadPackService.
// TODO: remove this, as the struct is zero-value safe.
-func NewGitUploadPackService(url string) *GitUploadPackService {
- // url ignored
+func NewGitUploadPackService() *GitUploadPackService {
return &GitUploadPackService{}
}
diff --git a/clients/ssh/git_upload_pack_test.go b/clients/ssh/git_upload_pack_test.go
index 8626b50..673e0fc 100644
--- a/clients/ssh/git_upload_pack_test.go
+++ b/clients/ssh/git_upload_pack_test.go
@@ -25,7 +25,7 @@ const (
)
func (s *SuiteRemote) TestConnect(c *C) {
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.Connect(fixRepo), Equals, ErrAuthRequired)
}
@@ -57,12 +57,18 @@ func (c *sshAgentConn) close() error {
return c.pipe.Close()
}
+func (s *SuiteRemote) SetUpSuite(c *C) {
+ if os.Getenv("SSH_AUTH_SOCK") == "" {
+ c.Skip("SSH_AUTH_SOCK is not set")
+ }
+}
+
func (s *SuiteRemote) TestConnectWithPublicKeysCallback(c *C) {
agent, err := newSSHAgentConn()
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
defer func() { c.Assert(r.Disconnect(), IsNil) }()
c.Assert(r.connected, Equals, true)
@@ -70,17 +76,17 @@ func (s *SuiteRemote) TestConnectWithPublicKeysCallback(c *C) {
}
func (s *SuiteRemote) TestConnectBadVcs(c *C) {
- r := NewGitUploadPackService(fixRepoBadVcs)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepoBadVcs, nil), ErrorMatches, fmt.Sprintf(".*%s.*", fixRepoBadVcs))
}
func (s *SuiteRemote) TestConnectNonGit(c *C) {
- r := NewGitUploadPackService(fixRepoNonGit)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepoNonGit, nil), Equals, ErrUnsupportedVCS)
}
func (s *SuiteRemote) TestConnectNonGithub(c *C) {
- r := NewGitUploadPackService(fixGitRepoNonGithub)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixGitRepoNonGithub, nil), Equals, ErrUnsupportedRepo)
}
@@ -92,7 +98,7 @@ func (*mockAuth) Name() string { return "" }
func (*mockAuth) String() string { return "" }
func (s *SuiteRemote) TestConnectWithAuthWrongType(c *C) {
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, &mockAuth{}), Equals, ErrInvalidAuthMethod)
c.Assert(r.connected, Equals, false)
}
@@ -102,7 +108,7 @@ func (s *SuiteRemote) TestAlreadyConnected(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
defer func() { c.Assert(r.Disconnect(), IsNil) }()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), Equals, ErrAlreadyConnected)
@@ -114,14 +120,14 @@ func (s *SuiteRemote) TestDisconnect(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
c.Assert(r.Disconnect(), IsNil)
c.Assert(r.connected, Equals, false)
}
func (s *SuiteRemote) TestDisconnectedWhenNonConnected(c *C) {
- r := NewGitUploadPackService("Dear Twinkle")
+ r := NewGitUploadPackService()
c.Assert(r.Disconnect(), Equals, ErrNotConnected)
}
@@ -130,7 +136,7 @@ func (s *SuiteRemote) TestAlreadyDisconnected(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
c.Assert(r.Disconnect(), IsNil)
c.Assert(r.Disconnect(), Equals, ErrNotConnected)
@@ -142,7 +148,7 @@ func (s *SuiteRemote) TestServeralConnections(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
c.Assert(r.Disconnect(), IsNil)
@@ -158,7 +164,7 @@ func (s *SuiteRemote) TestServeralConnections(c *C) {
}
func (s *SuiteRemote) TestInfoNotConnected(c *C) {
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
_, err := r.Info()
c.Assert(err, Equals, ErrNotConnected)
}
@@ -168,7 +174,7 @@ func (s *SuiteRemote) TestDefaultBranch(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
defer func() { c.Assert(r.Disconnect(), IsNil) }()
@@ -182,7 +188,7 @@ func (s *SuiteRemote) TestCapabilities(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
defer func() { c.Assert(r.Disconnect(), IsNil) }()
@@ -192,7 +198,7 @@ func (s *SuiteRemote) TestCapabilities(c *C) {
}
func (s *SuiteRemote) TestFetchNotConnected(c *C) {
- r := NewGitUploadPackService("foo bar")
+ r := NewGitUploadPackService()
pr := &common.GitUploadPackRequest{}
pr.Want(core.NewHash("6ecf0ef2c2dffb796033e5a02219af86ec6584e5"))
_, err := r.Fetch(pr)
@@ -204,7 +210,7 @@ func (s *SuiteRemote) TestFetch(c *C) {
c.Assert(err, IsNil)
defer func() { c.Assert(agent.close(), IsNil) }()
- r := NewGitUploadPackService(fixRepo)
+ r := NewGitUploadPackService()
c.Assert(r.ConnectWithAuth(fixRepo, agent.auth), IsNil)
defer func() { c.Assert(r.Disconnect(), IsNil) }()
diff --git a/core/object.go b/core/object.go
index 2953461..62cb469 100644
--- a/core/object.go
+++ b/core/object.go
@@ -49,8 +49,14 @@ func (t ObjectType) String() string {
return "tree"
case BlobObject:
return "blob"
+ case TagObject:
+ return "tag"
+ case OFSDeltaObject:
+ return "ofs-delta"
+ case REFDeltaObject:
+ return "ref-delta"
default:
- return "-"
+ return "unknown"
}
}