Merge branch 'master' into lfsapi/slight-extraheaders-optimization

This commit is contained in:
risk danger olson 2017-10-03 09:12:57 -07:00 committed by GitHub
commit 0bae5e05d7
13 changed files with 38 additions and 20 deletions

@ -97,7 +97,7 @@ ArgsLoop:
writeablePatterns = append(writeablePatterns, pattern) writeablePatterns = append(writeablePatterns, pattern)
} }
Print("Tracking %q", pattern) Print("Tracking %q", unescapeTrackPattern(encodedArg))
} }
// Now read the whole local attributes file and iterate over the contents, // Now read the whole local attributes file and iterate over the contents,
@ -261,7 +261,7 @@ var (
) )
func escapeTrackPattern(unescaped string) string { func escapeTrackPattern(unescaped string) string {
var escaped string = unescaped var escaped string = strings.Replace(unescaped, `\`, "/", -1)
for from, to := range trackEscapePatterns { for from, to := range trackEscapePatterns {
escaped = strings.Replace(escaped, from, to, -1) escaped = strings.Replace(escaped, from, to, -1)

@ -81,6 +81,15 @@ func getAPIClient() *lfsapi.Client {
return apiClient return apiClient
} }
func closeAPIClient() error {
global.Lock()
defer global.Unlock()
if apiClient == nil {
return nil
}
return apiClient.Close()
}
func newLockClient(remote string) *locking.Client { func newLockClient(remote string) *locking.Client {
storageConfig := config.Config.StorageConfig() storageConfig := config.Config.StorageConfig()
lockClient, err := locking.NewClient(remote, getAPIClient()) lockClient, err := locking.NewClient(remote, getAPIClient())

@ -66,7 +66,7 @@ func Run() {
} }
root.Execute() root.Execute()
getAPIClient().Close() closeAPIClient()
} }
func gitlfsCommand(cmd *cobra.Command, args []string) { func gitlfsCommand(cmd *cobra.Command, args []string) {

@ -44,7 +44,7 @@ be scoped inside the configuration for a remote.
Sets the maximum time, in seconds, that the HTTP client will wait for the Sets the maximum time, in seconds, that the HTTP client will wait for the
next tcp read or write. If < 1, no activity timeout is used at all. next tcp read or write. If < 1, no activity timeout is used at all.
Default: 10 seconds Default: 30 seconds
* `lfs.keepalive` * `lfs.keepalive`

6
glide.lock generated

@ -1,5 +1,5 @@
hash: 7ac0f055e06001b80cc9cfc40de07c103b3b59abec0f3be0fca7cce49b71eec7 hash: e19b925b9eaca9a10a7742b4a4b1dc8047bff437584538dda59f4f10e69fa6ca
updated: 2017-09-19T15:38:52.833333079-06:00 updated: 2017-09-27T12:34:48.032089491-04:00
imports: imports:
- name: github.com/bgentry/go-netrc - name: github.com/bgentry/go-netrc
version: 9fd32a8b3d3d3f9d43c341bfe098430e07609480 version: 9fd32a8b3d3d3f9d43c341bfe098430e07609480
@ -14,7 +14,7 @@ imports:
- name: github.com/pkg/errors - name: github.com/pkg/errors
version: c605e284fe17294bda444b34710735b29d1a9d90 version: c605e284fe17294bda444b34710735b29d1a9d90
- name: github.com/rubyist/tracerx - name: github.com/rubyist/tracerx
version: d7bcc0bc315bed2a841841bee5dbecc8d7d7582f version: 787959303086f44a8c361240dfac53d3e9d53ed2
- name: github.com/spf13/cobra - name: github.com/spf13/cobra
version: c55cdf33856a08e4822738728b41783292812889 version: c55cdf33856a08e4822738728b41783292812889
- name: github.com/spf13/pflag - name: github.com/spf13/pflag

@ -11,7 +11,7 @@ import:
- package: github.com/olekukonko/ts - package: github.com/olekukonko/ts
version: ecf753e7c962639ab5a1fb46f7da627d4c0a04b8 version: ecf753e7c962639ab5a1fb46f7da627d4c0a04b8
- package: github.com/rubyist/tracerx - package: github.com/rubyist/tracerx
version: d7bcc0bc315bed2a841841bee5dbecc8d7d7582f version: 787959303086f44a8c361240dfac53d3e9d53ed2
- package: github.com/spf13/cobra - package: github.com/spf13/cobra
version: c55cdf33856a08e4822738728b41783292812889 version: c55cdf33856a08e4822738728b41783292812889
- package: github.com/spf13/pflag - package: github.com/spf13/pflag

@ -251,7 +251,7 @@ func (c *Client) httpClient(host string) *http.Client {
MaxIdleConnsPerHost: concurrentTransfers, MaxIdleConnsPerHost: concurrentTransfers,
} }
activityTimeout := 10 activityTimeout := 30
if v, ok := c.uc.Get("lfs", fmt.Sprintf("https://%v", host), "activitytimeout"); ok { if v, ok := c.uc.Get("lfs", fmt.Sprintf("https://%v", host), "activitytimeout"); ok {
if i, err := strconv.Atoi(v); err == nil { if i, err := strconv.Atoi(v); err == nil {
activityTimeout = i activityTimeout = i

@ -22,6 +22,8 @@ type credsConfig struct {
// See: https://git-scm.com/docs/gitcredentials#_requesting_credentials // See: https://git-scm.com/docs/gitcredentials#_requesting_credentials
// for more. // for more.
AskPass string `os:"GIT_ASKPASS" git:"core.askpass" os:"SSH_ASKPASS"` AskPass string `os:"GIT_ASKPASS" git:"core.askpass" os:"SSH_ASKPASS"`
// Helper is a string defining the credential helper that Git should use.
Helper string `git:"credential.helper"`
// Cached is a boolean determining whether or not to enable the // Cached is a boolean determining whether or not to enable the
// credential cacher. // credential cacher.
Cached bool `git:"lfs.cachecredentials"` Cached bool `git:"lfs.cachecredentials"`
@ -42,7 +44,7 @@ func getCredentialHelper(cfg *config.Configuration) (CredentialHelper, error) {
} }
var hs []CredentialHelper var hs []CredentialHelper
if len(ccfg.AskPass) > 0 { if len(ccfg.Helper) == 0 && len(ccfg.AskPass) > 0 {
hs = append(hs, &AskPassCredentialHelper{ hs = append(hs, &AskPassCredentialHelper{
Program: ccfg.AskPass, Program: ccfg.AskPass,
}) })
@ -118,7 +120,7 @@ func (h CredentialHelpers) Reject(what Creds) error {
} }
// Approve implements CredentialHelper.Approve and approves the given Creds // Approve implements CredentialHelper.Approve and approves the given Creds
// "what" amongst all knonw CredentialHelpers. If any `CredentialHelper`s // "what" amongst all known CredentialHelpers. If any `CredentialHelper`s
// returned a non-nil error, no further `CredentialHelper`s are notified, so as // returned a non-nil error, no further `CredentialHelper`s are notified, so as
// to prevent inconsistent state. // to prevent inconsistent state.
func (h CredentialHelpers) Approve(what Creds) error { func (h CredentialHelpers) Approve(what Creds) error {

@ -64,9 +64,9 @@ func NewClient(osEnv Env, gitEnv Env) (*Client, error) {
gitEnv = make(TestEnv) gitEnv = make(TestEnv)
} }
netrc, err := ParseNetrc(osEnv) netrc, netrcfile, err := ParseNetrc(osEnv)
if err != nil { if err != nil {
return nil, err return nil, errors.Wrap(err, fmt.Sprintf("bad netrc file %s", netrcfile))
} }
httpsProxy, httpProxy, noProxy := getProxyServers(osEnv, gitEnv) httpsProxy, httpProxy, noProxy := getProxyServers(osEnv, gitEnv)

@ -11,18 +11,19 @@ type NetrcFinder interface {
FindMachine(string) *netrc.Machine FindMachine(string) *netrc.Machine
} }
func ParseNetrc(osEnv Env) (NetrcFinder, error) { func ParseNetrc(osEnv Env) (NetrcFinder, string, error) {
home, _ := osEnv.Get("HOME") home, _ := osEnv.Get("HOME")
if len(home) == 0 { if len(home) == 0 {
return &noFinder{}, nil return &noFinder{}, "", nil
} }
nrcfilename := filepath.Join(home, netrcBasename) nrcfilename := filepath.Join(home, netrcBasename)
if _, err := os.Stat(nrcfilename); err != nil { if _, err := os.Stat(nrcfilename); err != nil {
return &noFinder{}, nil return &noFinder{}, nrcfilename, nil
} }
return netrc.ParseFile(nrcfilename) f, err := netrc.ParseFile(nrcfilename)
return f, nrcfilename, err
} }
type noFinder struct{} type noFinder struct{}

@ -19,6 +19,7 @@ begin_test "askpass: push with GIT_ASKPASS"
# $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth) # $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth)
export LFS_ASKPASS_USERNAME="user" export LFS_ASKPASS_USERNAME="user"
export LFS_ASKPASS_PASSWORD="pass" export LFS_ASKPASS_PASSWORD="pass"
git config "credential.helper" ""
GIT_ASKPASS="lfs-askpass" SSH_ASKPASS="dont-call-me" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log GIT_ASKPASS="lfs-askpass" SSH_ASKPASS="dont-call-me" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log
GITSERVER_USER="$(printf $GITSERVER | sed -e 's/http:\/\//http:\/\/user@/')" GITSERVER_USER="$(printf $GITSERVER | sed -e 's/http:\/\//http:\/\/user@/')"
@ -53,6 +54,7 @@ begin_test "askpass: push with core.askPass"
# $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth) # $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth)
export LFS_ASKPASS_PASSWORD="pass" export LFS_ASKPASS_PASSWORD="pass"
git config "credential.helper" ""
git config "core.askPass" "lfs-askpass" git config "core.askPass" "lfs-askpass"
cat .git/config cat .git/config
SSH_ASKPASS="dont-call-me" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log SSH_ASKPASS="dont-call-me" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log
@ -90,6 +92,7 @@ begin_test "askpass: push with SSH_ASKPASS"
# $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth) # $password is defined from test/cmd/lfstest-gitserver.go (see: skipIfBadAuth)
export LFS_ASKPASS_USERNAME="user" export LFS_ASKPASS_USERNAME="user"
export LFS_ASKPASS_PASSWORD="pass" export LFS_ASKPASS_PASSWORD="pass"
git config "credential.helper" ""
SSH_ASKPASS="lfs-askpass" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log SSH_ASKPASS="lfs-askpass" GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push origin master 2>&1 | tee push.log
GITSERVER_USER="$(printf $GITSERVER | sed -e 's/http:\/\//http:\/\/user@/')" GITSERVER_USER="$(printf $GITSERVER | sed -e 's/http:\/\//http:\/\/user@/')"

@ -93,7 +93,9 @@ begin_test "track directory"
cd dir cd dir
git init git init
git lfs track "foo bar/*" git lfs track "foo bar\\*" | tee track.txt
[ "foo[[:space:]]bar/* filter=lfs diff=lfs merge=lfs -text" = "$(cat .gitattributes)" ]
[ "Tracking \"foo bar/*\"" = "$(cat track.txt)" ]
mkdir "foo bar" mkdir "foo bar"
echo "a" > "foo bar/a" echo "a" > "foo bar/a"
@ -104,6 +106,7 @@ begin_test "track directory"
assert_pointer "master" "foo bar/a" "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7" 2 assert_pointer "master" "foo bar/a" "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7" 2
assert_pointer "master" "foo bar/b" "0263829989b6fd954f72baaf2fc64bc2e2f01d692d4de72986ea808f6e99813f" 2 assert_pointer "master" "foo bar/b" "0263829989b6fd954f72baaf2fc64bc2e2f01d692d4de72986ea808f6e99813f" 2
) )
end_test
begin_test "track without trailing linebreak" begin_test "track without trailing linebreak"
( (

@ -52,7 +52,7 @@ func Printf(format string, args ...interface{}) {
func PrintfKey(key, format string, args ...interface{}) { func PrintfKey(key, format string, args ...interface{}) {
tracer := getTracer(key) tracer := getTracer(key)
if tracer.enabled { if tracer.enabled {
fmt.Fprintf(tracer.w, Prefix+format+"\n", args...) fmt.Fprintf(tracer.w, time.Now().Format("15:04:05.000000 ")+Prefix+format+"\n", args...)
return return
} }
} }
@ -70,7 +70,7 @@ func PerformanceSinceKey(key, what string, t time.Time) {
if tracer.performance { if tracer.performance {
since := time.Since(t) since := time.Since(t)
fmt.Fprintf(tracer.w, "performance %s: %.9f s\n", what, since.Seconds()) fmt.Fprintf(tracer.w, time.Now().Format("15:04:05.000000 ")+"performance %s: %.9f s\n", what, since.Seconds())
} }
} }