Merge "jiri-test/internal/test: Matching change for v.io/c/20980"
diff --git a/jiri-profile-v23/go_profile/go.go b/jiri-profile-v23/go_profile/go.go
index bed4eb2..b7af619 100644
--- a/jiri-profile-v23/go_profile/go.go
+++ b/jiri-profile-v23/go_profile/go.go
@@ -336,7 +336,7 @@
 		}
 		defer jirix.NewSeq().RemoveAll(tmpDir)
 
-		name := "go1.4.2.src.tar.gz"
+		name := "go1.4.3.src.tar.gz"
 		remote, local := "https://storage.googleapis.com/golang/"+name, filepath.Join(tmpDir, name)
 		parentDir := filepath.Dir(go14Dir)
 		goSrcDir := filepath.Join(go14Dir, "src")
diff --git a/jiri-test/internal/test/github.go b/jiri-test/internal/test/github.go
index 6747212..5ed0522 100644
--- a/jiri-test/internal/test/github.go
+++ b/jiri-test/internal/test/github.go
@@ -219,7 +219,8 @@
 	suite := xunit.TestSuite{Name: mirror.name}
 	dirname := filepath.Join(projects, mirror.name)
 
-	// If dirname does not exist `git clone` otherwise `git pull`.
+	// If dirname does not exist `git clone` otherwise `git fetch` and
+	// `git reset --hard origin/master`.
 	if _, err := jirix.NewSeq().Stat(dirname); err != nil {
 		if !runutil.IsNotExist(err) {
 			return nil, newInternalError(err, "stat")
@@ -232,8 +233,8 @@
 		}
 		suite.Cases = append(suite.Cases, *testCase)
 	} else {
-		err := pull(jirix, mirror, projects)
-		testCase := makeTestCase("pull", err)
+		err := reset(jirix, mirror, projects)
+		testCase := makeTestCase("reset", err)
 		if err != nil {
 			suite.Failures++
 		}
@@ -272,10 +273,18 @@
 	return gitutil.New(jirix.NewSeq()).CloneRecursive(mirror.googlesource, dirname)
 }
 
-func pull(jirix *jiri.X, mirror Mirror, projects string) error {
+func reset(jirix *jiri.X, mirror Mirror, projects string) error {
 	dirname := filepath.Join(projects, mirror.name)
-	opts := gitutil.RootDirOpt(dirname)
-	return gitutil.New(jirix.NewSeq(), opts).Pull("origin", "master")
+	rootOpt := gitutil.RootDirOpt(dirname)
+	git := gitutil.New(jirix.NewSeq(), rootOpt)
+
+	// Fetch master branch from origin.
+	if err := git.FetchRefspec("origin", "master"); err != nil {
+		return err
+	}
+
+	// Reset local master to origin/master.
+	return git.Reset("origin/master")
 }
 
 func push(jirix *jiri.X, mirror Mirror, projects string) error {
diff --git a/vbinary/cmd.go b/vbinary/cmd.go
index fa7663f..57e496a 100644
--- a/vbinary/cmd.go
+++ b/vbinary/cmd.go
@@ -41,6 +41,9 @@
 	maxParallelDownloads int
 
 	waitTimeBetweenAttempts = 3 * time.Minute
+
+	createClientAttempts                = 5
+	waitTimeBetweenCreateClientAttempts = 1 * time.Minute
 )
 
 const (
@@ -333,7 +336,7 @@
 		}
 		return nil
 	}
-	if err := retry.Function(ctx, createDefaultClientFn); err != nil {
+	if err := retry.Function(ctx, createDefaultClientFn, retry.AttemptsOpt(createClientAttempts), retry.IntervalOpt(waitTimeBetweenAttempts)); err != nil {
 		return nil, fmt.Errorf("failed to create default client")
 	}
 	return defaultClient, nil