Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 1b72ad7

Browse files
committed
remote and repository base on ConfigStore
1 parent daa6b64 commit 1b72ad7

File tree

6 files changed

+87
-95
lines changed

6 files changed

+87
-95
lines changed

common.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,18 @@ package git
33
import (
44
"io"
55
"strings"
6+
7+
"gopkg.in/src-d/go-git.v4/config"
8+
"gopkg.in/src-d/go-git.v4/core"
69
)
710

11+
// Storage storage of objects and references
12+
type Storage interface {
13+
ConfigStorage() config.ConfigStorage
14+
ObjectStorage() core.ObjectStorage
15+
ReferenceStorage() core.ReferenceStorage
16+
}
17+
818
// countLines returns the number of lines in a string à la git, this is
919
// The newline character is assumed to be '\n'. The empty string
1020
// contains 0 lines. If the last line of the string doesn't end with a

config/config.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package config
22

3-
type Config interface {
4-
Remote(name string) *RemoteConfig
5-
Remotes() []*RemoteConfig
6-
SetRemote(*RemoteConfig)
3+
import "errors"
4+
5+
var (
6+
ErrRemoteConfigNotFound = errors.New("remote config not found")
7+
)
8+
9+
type ConfigStorage interface {
10+
Remote(name string) (*RemoteConfig, error)
11+
Remotes() ([]*RemoteConfig, error)
12+
SetRemote(*RemoteConfig) error
713
}
814

915
type RemoteConfig struct {

core/storage.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@ import "errors"
55
//ErrStop is used to stop a ForEach function in an Iter
66
var ErrStop = errors.New("stop iter")
77

8-
// Storage storage of objects and references
9-
type Storage interface {
10-
ObjectStorage() ObjectStorage
11-
ReferenceStorage() ReferenceStorage
12-
}
13-
148
// ObjectStorage generic storage of objects
159
type ObjectStorage interface {
1610
NewObject() Object

remote.go

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,56 +12,40 @@ import (
1212

1313
// Remote represents a connection to a remote repository
1414
type Remote struct {
15-
config *config.RemoteConfig
16-
17-
Name string
18-
Endpoint common.Endpoint
19-
Auth common.AuthMethod
15+
Config *config.RemoteConfig
2016

17+
s Storage
18+
// cache fields, there during the connection is open
2119
upSrv common.GitUploadPackService
2220
upInfo *common.GitUploadPackInfo
2321
}
2422

2523
// NewRemote returns a new Remote, using as client http.DefaultClient
26-
func NewRemote(name, url string) (*Remote, error) {
27-
return NewAuthenticatedRemote(name, url, nil)
24+
func NewRemote(s Storage, c *config.RemoteConfig) *Remote {
25+
return &Remote{Config: c, s: s}
2826
}
2927

30-
// NewAuthenticatedRemote returns a new Remote using the given AuthMethod, using as
31-
// client http.DefaultClient
32-
func NewAuthenticatedRemote(name, url string, auth common.AuthMethod) (*Remote, error) {
33-
endpoint, err := common.NewEndpoint(url)
34-
if err != nil {
35-
return nil, err
36-
}
37-
38-
upSrv, err := clients.NewGitUploadPackService(endpoint)
39-
if err != nil {
40-
return nil, err
28+
// Connect with the endpoint
29+
func (r *Remote) Connect() error {
30+
if err := r.connectUploadPackService(); err != nil {
31+
return err
4132
}
4233

43-
return &Remote{
44-
Endpoint: endpoint,
45-
Name: name,
46-
Auth: auth,
47-
upSrv: upSrv,
48-
}, nil
34+
return r.retrieveUpInfo()
4935
}
5036

51-
// Connect with the endpoint
52-
func (r *Remote) Connect() error {
53-
var err error
54-
if r.Auth == nil {
55-
err = r.upSrv.Connect()
56-
} else {
57-
err = r.upSrv.ConnectWithAuth(r.Auth)
37+
func (r *Remote) connectUploadPackService() error {
38+
endpoint, err := common.NewEndpoint(r.Config.URL)
39+
if err != nil {
40+
return err
5841
}
5942

43+
r.upSrv, err = clients.NewGitUploadPackService(endpoint)
6044
if err != nil {
6145
return err
6246
}
6347

64-
return r.retrieveUpInfo()
48+
return r.upSrv.Connect()
6549
}
6650

6751
func (r *Remote) retrieveUpInfo() error {
@@ -84,7 +68,7 @@ func (r *Remote) Capabilities() *common.Capabilities {
8468
}
8569

8670
// Fetch returns a reader using the request
87-
func (r *Remote) Fetch(s core.Storage, o *RemoteFetchOptions) (err error) {
71+
func (r *Remote) Fetch(o *RemoteFetchOptions) (err error) {
8872
if err := o.Validate(); err != nil {
8973
return err
9074
}
@@ -94,7 +78,7 @@ func (r *Remote) Fetch(s core.Storage, o *RemoteFetchOptions) (err error) {
9478
return err
9579
}
9680

97-
req, err := r.buildRequest(s.ReferenceStorage(), o, refs)
81+
req, err := r.buildRequest(r.s.ReferenceStorage(), o, refs)
9882
if err != nil {
9983
return err
10084
}
@@ -105,11 +89,11 @@ func (r *Remote) Fetch(s core.Storage, o *RemoteFetchOptions) (err error) {
10589
}
10690

10791
defer checkClose(reader, &err)
108-
if err := r.updateObjectStorage(s.ObjectStorage(), reader); err != nil {
92+
if err := r.updateObjectStorage(r.s.ObjectStorage(), reader); err != nil {
10993
return err
11094
}
11195

112-
return r.updateLocalReferenceStorage(s.ReferenceStorage(), o.RefSpec, refs)
96+
return r.updateLocalReferenceStorage(r.s.ReferenceStorage(), o.RefSpec, refs)
11397
}
11498

11599
func (r *Remote) getWantedReferences(spec config.RefSpec) ([]*core.Reference, error) {
@@ -204,7 +188,12 @@ func (r *Remote) Refs() core.ReferenceIter {
204188
return i
205189
}
206190

191+
// Disconnect from the remote and save the config
207192
func (r *Remote) Disconnect() error {
193+
if err := r.s.ConfigStorage().SetRemote(r.Config); err != nil {
194+
return err
195+
}
196+
208197
r.upInfo = nil
209198
return r.upSrv.Disconnect()
210199
}

remote_test.go

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package git
22

33
import (
4-
"gopkg.in/src-d/go-git.v4/clients/http"
4+
"gopkg.in/src-d/go-git.v4/config"
55
"gopkg.in/src-d/go-git.v4/core"
66
"gopkg.in/src-d/go-git.v4/storage/memory"
77

@@ -14,76 +14,71 @@ type RemoteSuite struct {
1414

1515
var _ = Suite(&RemoteSuite{})
1616

17-
func (s *RemoteSuite) TestNewRemote(c *C) {
18-
r, err := NewRemote("foo", RepositoryFixture)
17+
func (s *RemoteSuite) TestConnect(c *C) {
18+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
19+
20+
err := r.Connect()
1921
c.Assert(err, IsNil)
20-
c.Assert(r.Name, Equals, "foo")
21-
c.Assert(r.Endpoint.String(), Equals, RepositoryFixture)
2222
}
2323

2424
func (s *RemoteSuite) TestNewRemoteInvalidEndpoint(c *C) {
25-
r, err := NewRemote("foo", "qux")
25+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: "qux"})
26+
27+
err := r.Connect()
2628
c.Assert(err, NotNil)
27-
c.Assert(r, IsNil)
2829
}
2930

3031
func (s *RemoteSuite) TestNewRemoteInvalidSchemaEndpoint(c *C) {
31-
r, err := NewRemote("foo", "qux://foo")
32+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: "qux://foo"})
33+
34+
err := r.Connect()
3235
c.Assert(err, NotNil)
33-
c.Assert(r, IsNil)
3436
}
3537

38+
/*
3639
func (s *RemoteSuite) TestNewAuthenticatedRemote(c *C) {
3740
a := &http.BasicAuth{}
3841
r, err := NewAuthenticatedRemote("foo", RepositoryFixture, a)
3942
c.Assert(err, IsNil)
4043
c.Assert(r.Name, Equals, "foo")
4144
c.Assert(r.Endpoint.String(), Equals, RepositoryFixture)
4245
c.Assert(r.Auth, Equals, a)
43-
}
44-
45-
func (s *RemoteSuite) TestConnect(c *C) {
46-
r, err := NewRemote("foo", RepositoryFixture)
47-
c.Assert(err, IsNil)
48-
c.Assert(r.Connect(), IsNil)
49-
}
46+
}*/
5047

5148
func (s *RemoteSuite) TestInfo(c *C) {
52-
r, err := NewRemote("foo", RepositoryFixture)
53-
c.Assert(err, IsNil)
49+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
50+
r.upSrv = &MockGitUploadPackService{}
51+
5452
c.Assert(r.Info(), IsNil)
5553
c.Assert(r.Connect(), IsNil)
5654
c.Assert(r.Info(), NotNil)
5755
c.Assert(r.Info().Capabilities.Get("ofs-delta"), NotNil)
5856
}
5957

6058
func (s *RemoteSuite) TestDefaultBranch(c *C) {
61-
r, err := NewRemote("foo", RepositoryFixture)
59+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
6260
r.upSrv = &MockGitUploadPackService{}
6361

64-
c.Assert(err, IsNil)
6562
c.Assert(r.Connect(), IsNil)
6663
c.Assert(r.Head().Name(), Equals, core.ReferenceName("refs/heads/master"))
6764
}
6865

6966
func (s *RemoteSuite) TestCapabilities(c *C) {
70-
r, err := NewRemote("foo", RepositoryFixture)
67+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
7168
r.upSrv = &MockGitUploadPackService{}
7269

73-
c.Assert(err, IsNil)
7470
c.Assert(r.Connect(), IsNil)
7571
c.Assert(r.Capabilities().Get("agent").Values, HasLen, 1)
7672
}
7773

7874
func (s *RemoteSuite) TestFetch(c *C) {
79-
r, err := NewRemote("foo", RepositoryFixture)
75+
sto := memory.NewStorage()
76+
r := NewRemote(sto, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
8077
r.upSrv = &MockGitUploadPackService{}
8178

82-
c.Assert(err, IsNil)
8379
c.Assert(r.Connect(), IsNil)
8480

85-
sto := memory.NewStorage()
86-
err = r.Fetch(sto, &RemoteFetchOptions{
81+
err := r.Fetch(&RemoteFetchOptions{
8782
RefSpec: DefaultRefSpec,
8883
})
8984

@@ -92,21 +87,19 @@ func (s *RemoteSuite) TestFetch(c *C) {
9287
}
9388

9489
func (s *RemoteSuite) TestHead(c *C) {
95-
r, err := NewRemote("foo", RepositoryFixture)
90+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
9691
r.upSrv = &MockGitUploadPackService{}
97-
c.Assert(err, IsNil)
9892

99-
err = r.Connect()
93+
err := r.Connect()
10094
c.Assert(err, IsNil)
10195
c.Assert(r.Head().Hash(), Equals, core.NewHash("6ecf0ef2c2dffb796033e5a02219af86ec6584e5"))
10296
}
10397

10498
func (s *RemoteSuite) TestRef(c *C) {
105-
r, err := NewRemote("foo", RepositoryFixture)
99+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
106100
r.upSrv = &MockGitUploadPackService{}
107-
c.Assert(err, IsNil)
108101

109-
err = r.Connect()
102+
err := r.Connect()
110103
c.Assert(err, IsNil)
111104

112105
ref, err := r.Ref(core.HEAD, false)
@@ -119,11 +112,10 @@ func (s *RemoteSuite) TestRef(c *C) {
119112
}
120113

121114
func (s *RemoteSuite) TestRefs(c *C) {
122-
r, err := NewRemote("foo", RepositoryFixture)
115+
r := NewRemote(nil, &config.RemoteConfig{Name: "foo", URL: RepositoryFixture})
123116
r.upSrv = &MockGitUploadPackService{}
124-
c.Assert(err, IsNil)
125117

126-
err = r.Connect()
118+
err := r.Connect()
127119
c.Assert(err, IsNil)
128120
c.Assert(r.Refs(), NotNil)
129121
}

0 commit comments

Comments
 (0)