diff --git a/internal/api/api.go b/internal/api/api.go
index 09baa172be9ab85dc225dd03248f6b7095c0c731..9d39ba83abf1b8c7e294e767d264a4fa11bd40f4 100644
--- a/internal/api/api.go
+++ b/internal/api/api.go
@@ -12,6 +12,7 @@ import (
 	"strings"
 
 	"github.com/prometheus/client_golang/prometheus"
+	pb "gitlab.com/gitlab-org/gitaly-proto/go"
 
 	"gitlab.com/gitlab-org/gitlab-workhorse/internal/badgateway"
 	"gitlab.com/gitlab-org/gitlab-workhorse/internal/helper"
@@ -90,6 +91,9 @@ type Response struct {
 	Terminal *TerminalSettings
 	// Path to Gitaly Socket
 	GitalySocketPath string
+	// Repository object for making gRPC requests to Gitaly. This will
+	// eventually replace the RepoPath field.
+	Repository pb.Repository
 }
 
 // singleJoiningSlash is taken from reverseproxy.go:NewSingleHostReverseProxy
@@ -209,6 +213,14 @@ func (api *API) PreAuthorize(suffix string, r *http.Request) (httpResponse *http
 		return httpResponse, nil, fmt.Errorf("preAuthorizeHandler: decode authorization response: %v", err)
 	}
 
+	// This is for backwards compatiblity, can be depracated when Rails
+	// always sends a 'Repository' message. For the time being we cannot
+	// count on this, so we put some minimal data in the Repository struct.
+
+	if authResponse.Repository.Path == "" {
+		authResponse.Repository.Path = authResponse.RepoPath
+	}
+
 	return httpResponse, authResponse, nil
 }
 
diff --git a/internal/git/info-refs.go b/internal/git/info-refs.go
index 05efe1438805a932edc5663e49777e1c8959e93b..83b33efc36ac7ab415b84dd4ede9655a0b66560f 100644
--- a/internal/git/info-refs.go
+++ b/internal/git/info-refs.go
@@ -67,7 +67,7 @@ func handleGetInfoRefsWithGitaly(w http.ResponseWriter, a *api.Response, rpc str
 		return fmt.Errorf("GetInfoRefsHandler: %v", err)
 	}
 
-	infoRefsResponseWriter, err := smarthttp.InfoRefsResponseWriterTo(a.RepoPath, rpc)
+	infoRefsResponseWriter, err := smarthttp.InfoRefsResponseWriterTo(a.Repository, rpc)
 	if err != nil {
 		return fmt.Errorf("GetInfoRefsHandler: %v", err)
 	}
diff --git a/internal/gitaly/smarthttp.go b/internal/gitaly/smarthttp.go
index 9e9dfebdcfbbdf46d7d74e6c63976c134b4f2925..6da70b994a16e64d9e061b2b0139bf400cc01878 100644
--- a/internal/gitaly/smarthttp.go
+++ b/internal/gitaly/smarthttp.go
@@ -13,9 +13,8 @@ type SmartHTTPClient struct {
 	pb.SmartHTTPClient
 }
 
-func (client *SmartHTTPClient) InfoRefsResponseWriterTo(repoPath, rpc string) (io.WriterTo, error) {
-	repo := &pb.Repository{Path: repoPath}
-	rpcRequest := &pb.InfoRefsRequest{Repository: repo}
+func (client *SmartHTTPClient) InfoRefsResponseWriterTo(repo pb.Repository, rpc string) (io.WriterTo, error) {
+	rpcRequest := &pb.InfoRefsRequest{Repository: &repo}
 	var c pbhelper.InfoRefsClient
 	var err error
 
diff --git a/main_test.go b/main_test.go
index 9545abda33fd43c47b06ab79bcfb109ebc5e004d..a20248234ac732b10e7f4201efa39e1aa59241a1 100644
--- a/main_test.go
+++ b/main_test.go
@@ -594,35 +594,48 @@ func TestApiContentTypeBlock(t *testing.T) {
 }
 
 func TestGetInfoRefsProxiedToGitalySuccessfully(t *testing.T) {
-	apiResponse := gitOkBody(t)
-
 	gitalyServer := startGitalyServer(t)
 	defer func() {
 		gitalyServer.Stop()
 		gitaly.CloseConnections()
 	}()
 
-	apiResponse.GitalySocketPath = gitalySocketPath
-	ts := testAuthServer(nil, 200, apiResponse)
-	defer ts.Close()
-
-	ws := startWorkhorseServer(ts.URL)
-	defer ws.Close()
+	apiResponse := gitOkBody(t)
+	repoPath := apiResponse.RepoPath
 
-	resource := "/gitlab-org/gitlab-test.git/info/refs?service=git-upload-pack"
-	resp, err := http.Get(ws.URL + resource)
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer resp.Body.Close()
-	responseBody, err := ioutil.ReadAll(resp.Body)
-	if err != nil {
-		t.Error(err)
-	}
+	for _, testCase := range []struct {
+		repoPath   string
+		repository pb.Repository
+	}{
+		{repoPath: repoPath},
+		{repoPath: repoPath, repository: pb.Repository{Path: repoPath, StorageName: "foobar", RelativePath: "baz.git"}},
+	} {
+		func() {
+			apiResponse.RepoPath = testCase.repoPath
+			apiResponse.Repository = testCase.repository
+			apiResponse.GitalySocketPath = gitalySocketPath
+			ts := testAuthServer(nil, 200, apiResponse)
+			defer ts.Close()
+
+			ws := startWorkhorseServer(ts.URL)
+			defer ws.Close()
+
+			resource := "/gitlab-org/gitlab-test.git/info/refs?service=git-upload-pack"
+			resp, err := http.Get(ws.URL + resource)
+			if err != nil {
+				t.Fatal(err)
+			}
+			defer resp.Body.Close()
+			responseBody, err := ioutil.ReadAll(resp.Body)
+			if err != nil {
+				t.Error(err)
+			}
 
-	expectedContent := testhelper.GitalyInfoRefsResponseMock
-	if !bytes.Equal(responseBody, []byte(expectedContent)) {
-		t.Errorf("GET %q: Expected %q, got %q", resource, expectedContent, responseBody)
+			expectedContent := testhelper.GitalyInfoRefsResponseMock
+			if !bytes.Equal(responseBody, []byte(expectedContent)) {
+				t.Errorf("GET %q: Expected %q, got %q", resource, expectedContent, responseBody)
+			}
+		}()
 	}
 }