lfsapi: introduce interface for initializing a Client

This commit is contained in:
rick olson 2017-10-25 15:33:20 -06:00
parent 226d5e4759
commit ec092d0f4f
31 changed files with 229 additions and 247 deletions

@ -71,7 +71,7 @@ func getAPIClient() *lfsapi.Client {
defer global.Unlock()
if apiClient == nil {
c, err := lfsapi.NewClient(cfg.Os, cfg.Git)
c, err := lfsapi.NewClient(cfg)
if err != nil {
ExitWithError(err)
}

@ -272,6 +272,14 @@ func (c *Configuration) Cleanup() error {
return c.fs.Cleanup()
}
func (c *Configuration) OSEnv() Environment {
return c.Os
}
func (c *Configuration) GitEnv() Environment {
return c.Git
}
func (c *Configuration) GitConfig() *git.Configuration {
return c.gitConfig
}

@ -19,7 +19,7 @@ func Environ(cfg *config.Configuration, manifest *tq.Manifest) []string {
osEnviron := os.Environ()
env := make([]string, 0, len(osEnviron)+7)
api, err := lfsapi.NewClient(cfg.Os, cfg.Git)
api, err := lfsapi.NewClient(cfg)
if err != nil {
// TODO(@ttaylorr): don't panic
panic(err.Error())

@ -72,7 +72,7 @@ func TestDoWithAuthApprove(t *testing.T) {
defer srv.Close()
creds := newMockCredentialHelper()
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/repo/lfs",
}))
require.Nil(t, err)
@ -141,12 +141,11 @@ func TestDoWithAuthReject(t *testing.T) {
creds.Approve(invalidCreds)
assert.True(t, creds.IsApproved(invalidCreds))
c := &Client{
Credentials: creds,
Endpoints: NewEndpointFinder(UniqTestEnv(map[string]string{
"lfs.url": srv.URL,
})),
}
c, _ := NewClient(nil)
c.Credentials = creds
c.Endpoints = NewEndpointFinder(testEnv(map[string]string{
"lfs.url": srv.URL,
}))
req, err := http.NewRequest("POST", srv.URL, nil)
require.Nil(t, err)
@ -532,7 +531,7 @@ func TestGetCreds(t *testing.T) {
req.Header.Set(key, value)
}
ef := NewEndpointFinder(UniqTestEnv(test.Config))
ef := NewEndpointFinder(testEnv(test.Config))
endpoint, access, creds, credsURL, err := getCreds(credHelper, netrcFinder, ef, test.Remote, req)
if !assert.Nil(t, err) {
continue

@ -58,7 +58,7 @@ func getRootCAsForHost(c *Client, host string) *x509.CertPool {
return appendRootCAsForHostFromPlatform(pool, host)
}
func appendRootCAsForHostFromGitconfig(osEnv Env, gitEnv Env, pool *x509.CertPool, host string) *x509.CertPool {
func appendRootCAsForHostFromGitconfig(osEnv, gitEnv config.Environment, pool *x509.CertPool, host string) *x509.CertPool {
// Accumulate certs from all these locations:
// GIT_SSL_CAINFO first

@ -60,7 +60,7 @@ func TestCertFromSSLCAInfoConfig(t *testing.T) {
// Test http.<url>.sslcainfo
for _, hostName := range sslCAInfoConfigHostNames {
hostKey := fmt.Sprintf("http.https://%v.sslcainfo", hostName)
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
hostKey: tempfile.Name(),
}))
assert.Nil(t, err)
@ -82,7 +82,7 @@ func TestCertFromSSLCAInfoConfig(t *testing.T) {
}
// Test http.sslcainfo
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"http.sslcainfo": tempfile.Name(),
}))
assert.Nil(t, err)
@ -103,9 +103,9 @@ func TestCertFromSSLCAInfoEnv(t *testing.T) {
assert.Nil(t, err, "Error writing temp cert file")
tempfile.Close()
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"GIT_SSL_CAINFO": tempfile.Name(),
}), nil)
}, nil))
assert.Nil(t, err)
// Should match any host at all
@ -123,7 +123,7 @@ func TestCertFromSSLCAPathConfig(t *testing.T) {
err = ioutil.WriteFile(filepath.Join(tempdir, "cert1.pem"), []byte(testCert), 0644)
assert.Nil(t, err, "Error creating cert file")
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"http.sslcapath": tempdir,
}))
@ -144,9 +144,9 @@ func TestCertFromSSLCAPathEnv(t *testing.T) {
err = ioutil.WriteFile(filepath.Join(tempdir, "cert1.pem"), []byte(testCert), 0644)
assert.Nil(t, err, "Error creating cert file")
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"GIT_SSL_CAPATH": tempdir,
}), nil)
}, nil))
assert.Nil(t, err)
// Should match any host at all
@ -157,16 +157,16 @@ func TestCertFromSSLCAPathEnv(t *testing.T) {
}
func TestCertVerifyDisabledGlobalEnv(t *testing.T) {
empty := &Client{}
empty, _ := NewClient(nil)
httpClient := empty.httpClient("anyhost.com")
tr, ok := httpClient.Transport.(*http.Transport)
if assert.True(t, ok) {
assert.False(t, tr.TLSClientConfig.InsecureSkipVerify)
}
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"GIT_SSL_NO_VERIFY": "1",
}), nil)
}, nil))
assert.Nil(t, err)
@ -178,14 +178,14 @@ func TestCertVerifyDisabledGlobalEnv(t *testing.T) {
}
func TestCertVerifyDisabledGlobalConfig(t *testing.T) {
def := &Client{}
def, _ := NewClient(nil)
httpClient := def.httpClient("anyhost.com")
tr, ok := httpClient.Transport.(*http.Transport)
if assert.True(t, ok) {
assert.False(t, tr.TLSClientConfig.InsecureSkipVerify)
}
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"http.sslverify": "false",
}))
assert.Nil(t, err)
@ -198,7 +198,7 @@ func TestCertVerifyDisabledGlobalConfig(t *testing.T) {
}
func TestCertVerifyDisabledHostConfig(t *testing.T) {
def := &Client{}
def, _ := NewClient(nil)
httpClient := def.httpClient("specifichost.com")
tr, ok := httpClient.Transport.(*http.Transport)
if assert.True(t, ok) {
@ -211,7 +211,7 @@ func TestCertVerifyDisabledHostConfig(t *testing.T) {
assert.False(t, tr.TLSClientConfig.InsecureSkipVerify)
}
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"http.https://specifichost.com/.sslverify": "false",
}))
assert.Nil(t, err)

@ -210,11 +210,11 @@ func (c *Client) httpClient(host string) *http.Client {
defer c.clientMu.Unlock()
if c.gitEnv == nil {
c.gitEnv = make(TestEnv)
c.gitEnv = make(testEnv)
}
if c.osEnv == nil {
c.osEnv = make(TestEnv)
c.osEnv = make(testEnv)
}
if c.hostClients == nil {

@ -111,7 +111,7 @@ func TestClientRedirect(t *testing.T) {
srv3Https = srv3.URL
srv3Http = fmt.Sprintf("http://%s", srv3InsecureListener.Addr().String())
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
fmt.Sprintf("http.%s.sslverify", srv3Https): "false",
fmt.Sprintf("http.%s/.sslverify", srv3Https): "false",
fmt.Sprintf("http.%s.sslverify", srv3Http): "false",
@ -176,7 +176,7 @@ func TestClientRedirect(t *testing.T) {
}
func TestNewClient(t *testing.T) {
c, err := NewClient(UniqTestEnv(map[string]string{}), UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"lfs.dialtimeout": "151",
"lfs.keepalive": "152",
"lfs.tlstimeout": "153",
@ -191,12 +191,12 @@ func TestNewClient(t *testing.T) {
}
func TestNewClientWithGitSSLVerify(t *testing.T) {
c, err := NewClient(nil, nil)
c, err := NewClient(nil)
assert.Nil(t, err)
assert.False(t, c.SkipSSLVerify)
for _, value := range []string{"true", "1", "t"} {
c, err = NewClient(UniqTestEnv(map[string]string{}), UniqTestEnv(map[string]string{
c, err = NewClient(NewContext(nil, map[string]string{
"http.sslverify": value,
}))
t.Logf("http.sslverify: %q", value)
@ -205,7 +205,7 @@ func TestNewClientWithGitSSLVerify(t *testing.T) {
}
for _, value := range []string{"false", "0", "f"} {
c, err = NewClient(UniqTestEnv(map[string]string{}), UniqTestEnv(map[string]string{
c, err = NewClient(NewContext(nil, map[string]string{
"http.sslverify": value,
}))
t.Logf("http.sslverify: %q", value)
@ -215,23 +215,23 @@ func TestNewClientWithGitSSLVerify(t *testing.T) {
}
func TestNewClientWithOSSSLVerify(t *testing.T) {
c, err := NewClient(nil, nil)
c, err := NewClient(nil)
assert.Nil(t, err)
assert.False(t, c.SkipSSLVerify)
for _, value := range []string{"false", "0", "f"} {
c, err = NewClient(UniqTestEnv(map[string]string{
c, err = NewClient(NewContext(map[string]string{
"GIT_SSL_NO_VERIFY": value,
}), UniqTestEnv(map[string]string{}))
}, nil))
t.Logf("GIT_SSL_NO_VERIFY: %q", value)
assert.Nil(t, err)
assert.False(t, c.SkipSSLVerify)
}
for _, value := range []string{"true", "1", "t"} {
c, err = NewClient(UniqTestEnv(map[string]string{
c, err = NewClient(NewContext(map[string]string{
"GIT_SSL_NO_VERIFY": value,
}), UniqTestEnv(map[string]string{}))
}, nil))
t.Logf("GIT_SSL_NO_VERIFY: %q", value)
assert.Nil(t, err)
assert.True(t, c.SkipSSLVerify)
@ -247,7 +247,7 @@ func TestNewRequest(t *testing.T) {
}
for _, test := range tests {
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"lfs.url": test[0],
}))
require.Nil(t, err)
@ -260,7 +260,7 @@ func TestNewRequest(t *testing.T) {
}
func TestNewRequestWithBody(t *testing.T) {
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"lfs.url": "https://example.com",
}))
require.Nil(t, err)

@ -37,7 +37,7 @@ type EndpointFinder interface {
}
type endpointGitFinder struct {
git Env
git config.Environment
gitProtocol string
aliasMu sync.Mutex
@ -48,7 +48,7 @@ type endpointGitFinder struct {
urlConfig *config.URLConfig
}
func NewEndpointFinder(git Env) EndpointFinder {
func NewEndpointFinder(git config.Environment) EndpointFinder {
e := &endpointGitFinder{
gitProtocol: "https",
aliases: make(map[string]string),
@ -277,7 +277,7 @@ func (e *endpointGitFinder) ReplaceUrlAlias(rawurl string) string {
return rawurl
}
func initAliases(e *endpointGitFinder, git Env) {
func initAliases(e *endpointGitFinder, git config.Environment) {
prefix := "url."
suffix := ".insteadof"
for gitkey, gitval := range git.All() {

@ -7,7 +7,7 @@ import (
)
func TestEndpointDefaultsToOrigin(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.lfsurl": "abc",
}))
@ -18,7 +18,7 @@ func TestEndpointDefaultsToOrigin(t *testing.T) {
}
func TestEndpointOverridesOrigin(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.url": "abc",
"remote.origin.lfsurl": "def",
}))
@ -30,7 +30,7 @@ func TestEndpointOverridesOrigin(t *testing.T) {
}
func TestEndpointNoOverrideDefaultRemote(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.lfsurl": "abc",
"remote.other.lfsurl": "def",
}))
@ -42,7 +42,7 @@ func TestEndpointNoOverrideDefaultRemote(t *testing.T) {
}
func TestEndpointUseAlternateRemote(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.lfsurl": "abc",
"remote.other.lfsurl": "def",
}))
@ -54,7 +54,7 @@ func TestEndpointUseAlternateRemote(t *testing.T) {
}
func TestEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "https://example.com/foo/bar",
}))
@ -65,7 +65,7 @@ func TestEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
}))
@ -76,7 +76,7 @@ func TestBareEndpointAddsLfsSuffix(t *testing.T) {
}
func TestEndpointSeparateClonePushUrl(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
"remote.origin.pushurl": "https://readwrite.com/foo/bar.git",
}))
@ -93,7 +93,7 @@ func TestEndpointSeparateClonePushUrl(t *testing.T) {
}
func TestEndpointOverriddenSeparateClonePushLfsUrl(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
"remote.origin.pushurl": "https://readwrite.com/foo/bar.git",
"remote.origin.lfsurl": "https://examplelfs.com/foo/bar",
@ -112,7 +112,7 @@ func TestEndpointOverriddenSeparateClonePushLfsUrl(t *testing.T) {
}
func TestEndpointGlobalSeparateLfsPush(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.url": "https://readonly.com/foo/bar",
"lfs.pushurl": "https://write.com/foo/bar",
}))
@ -129,7 +129,7 @@ func TestEndpointGlobalSeparateLfsPush(t *testing.T) {
}
func TestSSHEndpointOverridden(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "git@example.com:foo/bar",
"remote.origin.lfsurl": "lfs",
}))
@ -142,7 +142,7 @@ func TestSSHEndpointOverridden(t *testing.T) {
}
func TestSSHEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "ssh://git@example.com/foo/bar",
}))
@ -154,7 +154,7 @@ func TestSSHEndpointAddsLfsSuffix(t *testing.T) {
}
func TestSSHCustomPortEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "ssh://git@example.com:9000/foo/bar",
}))
@ -166,7 +166,7 @@ func TestSSHCustomPortEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareSSHEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "git@example.com:foo/bar.git",
}))
@ -178,7 +178,7 @@ func TestBareSSHEndpointAddsLfsSuffix(t *testing.T) {
}
func TestSSHEndpointFromGlobalLfsUrl(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.url": "git@example.com:foo/bar.git",
}))
@ -190,7 +190,7 @@ func TestSSHEndpointFromGlobalLfsUrl(t *testing.T) {
}
func TestHTTPEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "http://example.com/foo/bar",
}))
@ -202,7 +202,7 @@ func TestHTTPEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "http://example.com/foo/bar.git",
}))
@ -214,7 +214,7 @@ func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) {
}
func TestGitEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "git://example.com/foo/bar",
}))
@ -226,7 +226,7 @@ func TestGitEndpointAddsLfsSuffix(t *testing.T) {
}
func TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "git://example.com/foo/bar",
"lfs.gitprotocol": "http",
}))
@ -239,7 +239,7 @@ func TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) {
}
func TestBareGitEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"remote.origin.url": "git://example.com/foo/bar.git",
}))
@ -266,7 +266,7 @@ func TestAccessConfig(t *testing.T) {
}
for value, expected := range tests {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.url": "http://example.com",
"lfs.http://example.com.access": value,
"lfs.https://example.com.access": "bad",
@ -285,7 +285,7 @@ func TestAccessConfig(t *testing.T) {
// Test again but with separate push url
for value, expected := range tests {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.url": "http://example.com",
"lfs.pushurl": "http://examplepush.com",
"lfs.http://example.com.access": value,
@ -312,7 +312,7 @@ func TestAccessAbsentConfig(t *testing.T) {
}
func TestSetAccess(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{}))
finder := NewEndpointFinder(testEnv(map[string]string{}))
assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com"))
finder.SetAccess("http://example.com", NTLMAccess)
@ -320,7 +320,7 @@ func TestSetAccess(t *testing.T) {
}
func TestChangeAccess(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.http://example.com.access": "basic",
}))
@ -330,7 +330,7 @@ func TestChangeAccess(t *testing.T) {
}
func TestDeleteAccessWithNone(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.http://example.com.access": "basic",
}))
@ -340,7 +340,7 @@ func TestDeleteAccessWithNone(t *testing.T) {
}
func TestDeleteAccessWithEmptyString(t *testing.T) {
finder := NewEndpointFinder(UniqTestEnv(map[string]string{
finder := NewEndpointFinder(testEnv(map[string]string{
"lfs.http://example.com.access": "basic",
}))

@ -47,18 +47,29 @@ type Client struct {
LoggingStats bool // DEPRECATED
// only used for per-host ssl certs
gitEnv Env
osEnv Env
gitEnv config.Environment
osEnv config.Environment
uc *config.URLConfig
}
func NewClient(osEnv Env, gitEnv Env) (*Client, error) {
if osEnv == nil {
osEnv = make(TestEnv)
}
type Context interface {
OSEnv() config.Environment
GitEnv() config.Environment
}
func NewClient(ctx Context) (*Client, error) {
if ctx == nil {
return newClient(nil, nil)
}
return newClient(ctx.OSEnv(), ctx.GitEnv())
}
func newClient(osEnv, gitEnv config.Environment) (*Client, error) {
if osEnv == nil {
osEnv = make(testEnv)
}
if gitEnv == nil {
gitEnv = make(TestEnv)
gitEnv = make(testEnv)
}
netrc, netrcfile, err := ParseNetrc(osEnv)
@ -96,11 +107,11 @@ func NewClient(osEnv Env, gitEnv Env) (*Client, error) {
return c, nil
}
func (c *Client) GitEnv() Env {
func (c *Client) GitEnv() config.Environment {
return c.gitEnv
}
func (c *Client) OSEnv() Env {
func (c *Client) OSEnv() config.Environment {
return c.osEnv
}
@ -135,31 +146,45 @@ func DecodeJSON(res *http.Response, obj interface{}) error {
return nil
}
// Env is an interface for the config.Environment methods that this package
// relies on.
type Env interface {
Get(string) (string, bool)
GetAll(string) []string
Int(string, int) int
Bool(string, bool) bool
All() map[string][]string
type testContext struct {
osEnv config.Environment
gitEnv config.Environment
}
type UniqTestEnv map[string]string
func (c *testContext) OSEnv() config.Environment {
return c.osEnv
}
func (e UniqTestEnv) Get(key string) (v string, ok bool) {
func (c *testContext) GitEnv() config.Environment {
return c.gitEnv
}
func NewContext(osEnv, gitEnv map[string]string) Context {
c := &testContext{}
if osEnv != nil {
c.osEnv = testEnv(osEnv)
}
if gitEnv != nil {
c.gitEnv = testEnv(gitEnv)
}
return c
}
type testEnv map[string]string
func (e testEnv) Get(key string) (v string, ok bool) {
v, ok = e[key]
return
}
func (e UniqTestEnv) GetAll(key string) []string {
func (e testEnv) GetAll(key string) []string {
if v, ok := e.Get(key); ok {
return []string{v}
}
return make([]string, 0)
}
func (e UniqTestEnv) Int(key string, def int) (val int) {
func (e testEnv) Int(key string, def int) (val int) {
s, _ := e.Get(key)
if len(s) == 0 {
return def
@ -173,7 +198,7 @@ func (e UniqTestEnv) Int(key string, def int) (val int) {
return i
}
func (e UniqTestEnv) Bool(key string, def bool) (val bool) {
func (e testEnv) Bool(key string, def bool) (val bool) {
s, _ := e.Get(key)
if len(s) == 0 {
return def
@ -189,61 +214,10 @@ func (e UniqTestEnv) Bool(key string, def bool) (val bool) {
}
}
func (e UniqTestEnv) All() map[string][]string {
func (e testEnv) All() map[string][]string {
m := make(map[string][]string)
for k, _ := range e {
m[k] = e.GetAll(k)
}
return m
}
// TestEnv is a basic config.Environment implementation. Only used in tests, or
// as a zero value to NewClient().
type TestEnv map[string][]string
func (e TestEnv) Get(key string) (string, bool) {
all := e.GetAll(key)
if len(all) == 0 {
return "", false
}
return all[len(all)-1], true
}
func (e TestEnv) GetAll(key string) []string {
return e[key]
}
func (e TestEnv) Int(key string, def int) (val int) {
s, _ := e.Get(key)
if len(s) == 0 {
return def
}
i, err := strconv.Atoi(s)
if err != nil {
return def
}
return i
}
func (e TestEnv) Bool(key string, def bool) (val bool) {
s, _ := e.Get(key)
if len(s) == 0 {
return def
}
switch strings.ToLower(s) {
case "true", "1", "on", "yes", "t":
return true
case "false", "0", "off", "no", "f":
return false
default:
return false
}
}
func (e TestEnv) All() map[string][]string {
return e
}

@ -5,13 +5,14 @@ import (
"path/filepath"
"github.com/bgentry/go-netrc/netrc"
"github.com/git-lfs/git-lfs/config"
)
type NetrcFinder interface {
FindMachine(string) *netrc.Machine
}
func ParseNetrc(osEnv Env) (NetrcFinder, string, error) {
func ParseNetrc(osEnv config.Environment) (NetrcFinder, string, error) {
home, _ := osEnv.Get("HOME")
if len(home) == 0 {
return &noFinder{}, "", nil

@ -77,7 +77,7 @@ func TestNTLMAuth(t *testing.T) {
require.Nil(t, err)
credHelper := newMockCredentialHelper()
cli, err := NewClient(nil, UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/ntlm",
"lfs." + srv.URL + "/ntlm.access": "ntlm",
}))
@ -103,7 +103,7 @@ func TestNTLMAuth(t *testing.T) {
}
func TestNtlmClientSession(t *testing.T) {
cli, err := NewClient(nil, nil)
cli, err := NewClient(nil)
require.Nil(t, err)
creds := Creds{"username": "MOOSEDOMAIN\\canadian", "password": "MooseAntlersYeah"}
@ -120,7 +120,7 @@ func TestNtlmClientSession(t *testing.T) {
}
func TestNtlmClientSessionBadCreds(t *testing.T) {
cli, err := NewClient(nil, nil)
cli, err := NewClient(nil)
require.Nil(t, err)
creds := Creds{"username": "badusername", "password": "MooseAntlersYeah"}
_, err = cli.ntlmClientSession(creds)

@ -48,7 +48,7 @@ func proxyFromClient(c *Client) func(req *http.Request) (*url.URL, error) {
}
}
func getProxyServers(u *url.URL, urlCfg *config.URLConfig, osEnv Env) (httpsProxy string, httpProxy string, noProxy string) {
func getProxyServers(u *url.URL, urlCfg *config.URLConfig, osEnv config.Environment) (httpsProxy string, httpProxy string, noProxy string) {
if urlCfg != nil {
httpProxy, _ = urlCfg.Get("http", u.String(), "proxy")
if strings.HasPrefix(httpProxy, "https://") {

@ -9,9 +9,9 @@ import (
)
func TestHttpsProxyFromGitConfig(t *testing.T) {
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"HTTPS_PROXY": "https://proxy-from-env:8080",
}), UniqTestEnv(map[string]string{
}, map[string]string{
"http.proxy": "https://proxy-from-git-config:8080",
}))
require.Nil(t, err)
@ -25,7 +25,7 @@ func TestHttpsProxyFromGitConfig(t *testing.T) {
}
func TestProxyForURL(t *testing.T) {
c, err := NewClient(nil, UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(nil, map[string]string{
"http.proxy": "https://proxy-for-everyone:8080",
"http.https://some-host.com:123.proxy": "https://proxy-for-some-host:8080",
}))
@ -40,9 +40,9 @@ func TestProxyForURL(t *testing.T) {
}
func TestHttpProxyFromGitConfig(t *testing.T) {
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"HTTPS_PROXY": "https://proxy-from-env:8080",
}), UniqTestEnv(map[string]string{
}, map[string]string{
"http.proxy": "http://proxy-from-git-config:8080",
}))
require.Nil(t, err)
@ -56,9 +56,9 @@ func TestHttpProxyFromGitConfig(t *testing.T) {
}
func TestProxyFromEnvironment(t *testing.T) {
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"HTTPS_PROXY": "https://proxy-from-env:8080",
}), nil)
}, nil))
require.Nil(t, err)
req, err := http.NewRequest("GET", "https://some-host.com:123/foo/bar", nil)
@ -70,7 +70,7 @@ func TestProxyFromEnvironment(t *testing.T) {
}
func TestProxyIsNil(t *testing.T) {
c := &Client{}
c, _ := NewClient(nil)
req, err := http.NewRequest("GET", "http://some-host.com:123/foo/bar", nil)
require.Nil(t, err)
@ -81,9 +81,9 @@ func TestProxyIsNil(t *testing.T) {
}
func TestProxyNoProxy(t *testing.T) {
c, err := NewClient(UniqTestEnv(map[string]string{
c, err := NewClient(NewContext(map[string]string{
"NO_PROXY": "some-host",
}), UniqTestEnv(map[string]string{
}, map[string]string{
"http.proxy": "https://proxy-from-git-config:8080",
}))
require.Nil(t, err)

@ -29,7 +29,7 @@ func TestAuthErrWithBody(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL+"/test", nil)
assert.Nil(t, err)
c := &Client{}
c, _ := NewClient(nil)
_, err = c.Do(req)
assert.NotNil(t, err)
assert.True(t, errors.IsAuthError(err))
@ -55,7 +55,7 @@ func TestFatalWithBody(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL+"/test", nil)
assert.Nil(t, err)
c := &Client{}
c, _ := NewClient(nil)
_, err = c.Do(req)
assert.NotNil(t, err)
assert.True(t, errors.IsFatalError(err))
@ -64,7 +64,7 @@ func TestFatalWithBody(t *testing.T) {
}
func TestWithNonFatal500WithBody(t *testing.T) {
c := &Client{}
c, _ := NewClient(nil)
var called uint32
@ -116,7 +116,7 @@ func TestAuthErrWithoutBody(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL+"/test", nil)
assert.Nil(t, err)
c := &Client{}
c, _ := NewClient(nil)
_, err = c.Do(req)
assert.NotNil(t, err)
assert.True(t, errors.IsAuthError(err))
@ -140,7 +140,7 @@ func TestFatalWithoutBody(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL+"/test", nil)
assert.Nil(t, err)
c := &Client{}
c, _ := NewClient(nil)
_, err = c.Do(req)
assert.NotNil(t, err)
assert.True(t, errors.IsFatalError(err))
@ -149,7 +149,7 @@ func TestFatalWithoutBody(t *testing.T) {
}
func TestWithNonFatal500WithoutBody(t *testing.T) {
c := &Client{}
c, _ := NewClient(nil)
var called uint32

@ -60,7 +60,7 @@ func TestRequestWithRetries(t *testing.T) {
}))
defer srv.Close()
c, err := NewClient(nil, nil)
c, err := NewClient(nil)
require.NoError(t, err)
req, err := http.NewRequest("POST", srv.URL, nil)

@ -10,6 +10,7 @@ import (
"strings"
"time"
"github.com/git-lfs/git-lfs/config"
"github.com/git-lfs/git-lfs/tools"
"github.com/rubyist/tracerx"
)
@ -69,7 +70,7 @@ func (r *sshAuthResponse) IsExpiredWithin(d time.Duration) (time.Time, bool) {
}
type sshAuthClient struct {
os Env
os config.Environment
}
func (c *sshAuthClient) Resolve(e Endpoint, method string) (sshAuthResponse, error) {
@ -105,7 +106,7 @@ func (c *sshAuthClient) Resolve(e Endpoint, method string) (sshAuthResponse, err
return res, err
}
func sshGetLFSExeAndArgs(osEnv Env, e Endpoint, method string) (string, []string) {
func sshGetLFSExeAndArgs(osEnv config.Environment, e Endpoint, method string) (string, []string) {
exe, args := sshGetExeAndArgs(osEnv, e)
operation := endpointOperation(e, method)
args = append(args, fmt.Sprintf("git-lfs-authenticate %s %s", e.SshPath, operation))
@ -115,7 +116,7 @@ func sshGetLFSExeAndArgs(osEnv Env, e Endpoint, method string) (string, []string
// Return the executable name for ssh on this machine and the base args
// Base args includes port settings, user/host, everything pre the command to execute
func sshGetExeAndArgs(osEnv Env, e Endpoint) (exe string, baseargs []string) {
func sshGetExeAndArgs(osEnv config.Environment, e Endpoint) (exe string, baseargs []string) {
isPlink := false
isTortoise := false

@ -213,7 +213,7 @@ func (r *fakeResolver) Resolve(e Endpoint, method string) (sshAuthResponse, erro
}
func TestSSHGetLFSExeAndArgs(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{}), nil)
cli, err := NewClient(nil)
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -256,10 +256,10 @@ func TestSSHGetLFSExeAndArgs(t *testing.T) {
}
func TestSSHGetExeAndArgsSsh(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": "",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -271,10 +271,10 @@ func TestSSHGetExeAndArgsSsh(t *testing.T) {
}
func TestSSHGetExeAndArgsSshCustomPort(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": "",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -289,10 +289,10 @@ func TestSSHGetExeAndArgsSshCustomPort(t *testing.T) {
func TestSSHGetExeAndArgsPlink(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "plink.exe")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -306,10 +306,10 @@ func TestSSHGetExeAndArgsPlink(t *testing.T) {
func TestSSHGetExeAndArgsPlinkCustomPort(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "plink")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -324,10 +324,10 @@ func TestSSHGetExeAndArgsPlinkCustomPort(t *testing.T) {
func TestSSHGetExeAndArgsTortoisePlink(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "tortoiseplink.exe")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -341,10 +341,10 @@ func TestSSHGetExeAndArgsTortoisePlink(t *testing.T) {
func TestSSHGetExeAndArgsTortoisePlinkCustomPort(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "tortoiseplink")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "",
"GIT_SSH": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -357,10 +357,10 @@ func TestSSHGetExeAndArgsTortoisePlinkCustomPort(t *testing.T) {
}
func TestSSHGetExeAndArgsSshCommandPrecedence(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "sshcmd",
"GIT_SSH": "bad",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -372,9 +372,9 @@ func TestSSHGetExeAndArgsSshCommandPrecedence(t *testing.T) {
}
func TestSSHGetExeAndArgsSshCommandArgs(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "sshcmd --args 1",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -386,9 +386,9 @@ func TestSSHGetExeAndArgsSshCommandArgs(t *testing.T) {
}
func TestSSHGetExeAndArgsSshCommandArgsWithMixedQuotes(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "sshcmd foo 'bar \"baz\"'",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -400,9 +400,9 @@ func TestSSHGetExeAndArgsSshCommandArgsWithMixedQuotes(t *testing.T) {
}
func TestSSHGetExeAndArgsSshCommandCustomPort(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": "sshcmd",
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -415,9 +415,9 @@ func TestSSHGetExeAndArgsSshCommandCustomPort(t *testing.T) {
}
func TestSSHGetLFSExeAndArgsWithCustomSSH(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH": "not-ssh",
}), nil)
}, nil))
require.Nil(t, err)
u, err := url.Parse("ssh://git@host.com:12345/repo")
@ -435,7 +435,7 @@ func TestSSHGetLFSExeAndArgsWithCustomSSH(t *testing.T) {
}
func TestSSHGetLFSExeAndArgsInvalidOptionsAsHost(t *testing.T) {
cli, err := NewClient(nil, nil)
cli, err := NewClient(nil)
require.Nil(t, err)
u, err := url.Parse("ssh://-oProxyCommand=gnome-calculator/repo")
@ -453,9 +453,9 @@ func TestSSHGetLFSExeAndArgsInvalidOptionsAsHost(t *testing.T) {
}
func TestSSHGetLFSExeAndArgsInvalidOptionsAsHostWithCustomSSH(t *testing.T) {
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH": "not-ssh",
}), nil)
}, nil))
require.Nil(t, err)
u, err := url.Parse("ssh://--oProxyCommand=gnome-calculator/repo")
@ -473,7 +473,7 @@ func TestSSHGetLFSExeAndArgsInvalidOptionsAsHostWithCustomSSH(t *testing.T) {
}
func TestSSHGetExeAndArgsInvalidOptionsAsHost(t *testing.T) {
cli, err := NewClient(nil, nil)
cli, err := NewClient(nil)
require.Nil(t, err)
u, err := url.Parse("ssh://-oProxyCommand=gnome-calculator")
@ -491,7 +491,7 @@ func TestSSHGetExeAndArgsInvalidOptionsAsHost(t *testing.T) {
}
func TestSSHGetExeAndArgsInvalidOptionsAsPath(t *testing.T) {
cli, err := NewClient(nil, nil)
cli, err := NewClient(nil)
require.Nil(t, err)
u, err := url.Parse("ssh://git@git-host.com/-oProxyCommand=gnome-calculator")
@ -533,9 +533,9 @@ func TestParseBareSSHUrl(t *testing.T) {
func TestSSHGetExeAndArgsPlinkCommand(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "plink.exe")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -549,9 +549,9 @@ func TestSSHGetExeAndArgsPlinkCommand(t *testing.T) {
func TestSSHGetExeAndArgsPlinkCommandCustomPort(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "plink")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -566,9 +566,9 @@ func TestSSHGetExeAndArgsPlinkCommandCustomPort(t *testing.T) {
func TestSSHGetExeAndArgsTortoisePlinkCommand(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "tortoiseplink.exe")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")
@ -582,9 +582,9 @@ func TestSSHGetExeAndArgsTortoisePlinkCommand(t *testing.T) {
func TestSSHGetExeAndArgsTortoisePlinkCommandCustomPort(t *testing.T) {
plink := filepath.Join("Users", "joebloggs", "bin", "tortoiseplink")
cli, err := NewClient(UniqTestEnv(map[string]string{
cli, err := NewClient(NewContext(map[string]string{
"GIT_SSH_COMMAND": plink,
}), nil)
}, nil))
require.Nil(t, err)
endpoint := cli.Endpoints.Endpoint("download", "")

@ -33,7 +33,8 @@ func TestStatsWithKey(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{ConcurrentTransfers: 5}
c, _ := NewClient(nil)
c.ConcurrentTransfers = 5
c.LogHTTPStats(nopCloser(out))
req, err := http.NewRequest("POST", srv.URL, nil)
@ -98,7 +99,8 @@ func TestStatsWithoutKey(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{ConcurrentTransfers: 5}
c, _ := NewClient(nil)
c.ConcurrentTransfers = 5
c.LogHTTPStats(nopCloser(out))
req, err := http.NewRequest("POST", srv.URL, nil)
@ -139,7 +141,8 @@ func TestStatsDisabled(t *testing.T) {
}))
defer srv.Close()
c := &Client{ConcurrentTransfers: 5}
c, _ := NewClient(nil)
c.ConcurrentTransfers = 5
req, err := http.NewRequest("POST", srv.URL, nil)
req = c.LogRequest(req, "stats-test")

@ -37,10 +37,9 @@ func TestVerboseEnabled(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{
Verbose: true,
VerboseOut: out,
}
c, _ := NewClient(nil)
c.Verbose = true
c.VerboseOut = out
req, err := http.NewRequest("POST", srv.URL, nil)
req.Header.Set("Authorization", "Basic ABC")
@ -94,10 +93,9 @@ func TestVerboseWithBinaryBody(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{
Verbose: true,
VerboseOut: out,
}
c, _ := NewClient(nil)
c.Verbose = true
c.VerboseOut = out
buf := bytes.NewBufferString("binary-request")
req, err := http.NewRequest("POST", srv.URL, buf)
@ -152,11 +150,10 @@ func TestVerboseEnabledWithDebugging(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{
Verbose: true,
VerboseOut: out,
DebuggingVerbose: true,
}
c, _ := NewClient(nil)
c.Verbose = true
c.VerboseOut = out
c.DebuggingVerbose = true
req, err := http.NewRequest("POST", srv.URL, nil)
req.Header.Set("Authorization", "Basic ABC")
@ -211,11 +208,10 @@ func TestVerboseDisabled(t *testing.T) {
defer srv.Close()
out := &bytes.Buffer{}
c := &Client{
Verbose: false,
VerboseOut: out,
DebuggingVerbose: true,
}
c, _ := NewClient(nil)
c.Verbose = false
c.VerboseOut = out
c.DebuggingVerbose = true
req, err := http.NewRequest("POST", srv.URL, nil)
req.Header.Set("Authorization", "Basic ABC")

@ -52,7 +52,7 @@ func TestAPILock(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)
@ -100,7 +100,7 @@ func TestAPIUnlock(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)
@ -144,7 +144,7 @@ func TestAPISearch(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)
@ -199,7 +199,7 @@ func TestAPIVerifiableLocks(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)

@ -48,7 +48,7 @@ func TestRefreshCache(t *testing.T) {
srv.Close()
}()
lfsclient, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
lfsclient, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
"user.name": "Fred",
"user.email": "fred@bloggs.com",
@ -119,7 +119,7 @@ func TestGetVerifiableLocks(t *testing.T) {
defer srv.Close()
lfsclient, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
lfsclient, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
"user.name": "Fred",
"user.email": "fred@bloggs.com",

@ -30,7 +30,7 @@ func main() {
scanner := bufio.NewScanner(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
errWriter := bufio.NewWriter(os.Stderr)
apiClient, err := lfsapi.NewClient(cfg.Os, cfg.Git)
apiClient, err := lfsapi.NewClient(cfg)
if err != nil {
writeToStderr("Error creating api client: "+err.Error(), errWriter)
os.Exit(1)

@ -148,7 +148,7 @@ func buildManifest(r *test.Repo) (*tq.Manifest, error) {
endp = finder.NewEndpoint(apiUrl)
}
apiClient, err := lfsapi.NewClient(r.OSEnv(), r.GitEnv())
apiClient, err := lfsapi.NewClient(r)
apiClient.Endpoints = &constantEndpoint{
e: endp,
EndpointFinder: apiClient.Endpoints,

@ -54,7 +54,7 @@ func TestAPIBatch(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)
@ -110,7 +110,7 @@ func TestAPIBatchOnlyBasic(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": srv.URL + "/api",
}))
require.Nil(t, err)
@ -128,7 +128,7 @@ func TestAPIBatchOnlyBasic(t *testing.T) {
}
func TestAPIBatchEmptyObjects(t *testing.T) {
c, err := lfsapi.NewClient(nil, nil)
c, err := lfsapi.NewClient(nil)
require.Nil(t, err)
tqc := &tqClient{Client: c}

@ -10,7 +10,7 @@ import (
func TestCustomTransferBasicConfig(t *testing.T) {
path := "/path/to/binary"
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.customtransfer.testsimple.path": path,
}))
require.Nil(t, err)
@ -36,7 +36,7 @@ func TestCustomTransferBasicConfig(t *testing.T) {
func TestCustomTransferDownloadConfig(t *testing.T) {
path := "/path/to/binary"
args := "-c 1 --whatever"
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.customtransfer.testdownload.path": path,
"lfs.customtransfer.testdownload.args": args,
"lfs.customtransfer.testdownload.concurrent": "false",
@ -62,7 +62,7 @@ func TestCustomTransferDownloadConfig(t *testing.T) {
func TestCustomTransferUploadConfig(t *testing.T) {
path := "/path/to/binary"
args := "-c 1 --whatever"
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.customtransfer.testupload.path": path,
"lfs.customtransfer.testupload.args": args,
"lfs.customtransfer.testupload.concurrent": "false",
@ -88,7 +88,7 @@ func TestCustomTransferUploadConfig(t *testing.T) {
func TestCustomTransferBothConfig(t *testing.T) {
path := "/path/to/binary"
args := "-c 1 --whatever --yeah"
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.customtransfer.testboth.path": path,
"lfs.customtransfer.testboth.args": args,
"lfs.customtransfer.testboth.concurrent": "yes",

@ -55,7 +55,7 @@ func (m *Manifest) batchClient() *tqClient {
func NewManifest(f *fs.Filesystem, apiClient *lfsapi.Client, operation, remote string) *Manifest {
if apiClient == nil {
cli, err := lfsapi.NewClient(nil, nil)
cli, err := lfsapi.NewClient(nil)
if err != nil {
tracerx.Printf("unable to init tq.Manifest: %s", err)
return nil

@ -9,7 +9,7 @@ import (
)
func TestManifestIsConfigurable(t *testing.T) {
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.transfer.maxretries": "3",
}))
require.Nil(t, err)
@ -19,7 +19,7 @@ func TestManifestIsConfigurable(t *testing.T) {
}
func TestManifestChecksNTLM(t *testing.T) {
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.url": "http://foo",
"lfs.http://foo.access": "ntlm",
"lfs.concurrenttransfers": "3",
@ -31,7 +31,7 @@ func TestManifestChecksNTLM(t *testing.T) {
}
func TestManifestClampsValidValues(t *testing.T) {
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.transfer.maxretries": "-1",
}))
require.Nil(t, err)
@ -41,7 +41,7 @@ func TestManifestClampsValidValues(t *testing.T) {
}
func TestManifestIgnoresNonInts(t *testing.T) {
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.transfer.maxretries": "not_an_int",
}))
require.Nil(t, err)

@ -118,7 +118,7 @@ func testAdapterRegAndOverride(t *testing.T) {
}
func testAdapterRegButBasicOnly(t *testing.T) {
cli, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv(map[string]string{
cli, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.basictransfersonly": "yes",
}))
require.Nil(t, err)

@ -13,7 +13,7 @@ import (
)
func TestVerifyWithoutAction(t *testing.T) {
c := &lfsapi.Client{}
c, _ := lfsapi.NewClient(nil)
tr := &Transfer{
Oid: "abc",
Size: 123,
@ -44,9 +44,9 @@ func TestVerifySuccess(t *testing.T) {
}))
defer srv.Close()
c, err := lfsapi.NewClient(nil, lfsapi.UniqTestEnv{
c, err := lfsapi.NewClient(lfsapi.NewContext(nil, map[string]string{
"lfs.transfer.maxverifies": "1",
})
}))
require.Nil(t, err)
tr := &Transfer{
Oid: "abcd1234",