diff options
-rw-r--r-- | CHANGELOG.md | 12 | ||||
-rw-r--r-- | changelogs/unreleased/pks-remote-find-root-ref-inmemory-remote.yml | 5 | ||||
-rw-r--r-- | cmd/gitaly-hooks/hooks.go | 38 | ||||
-rw-r--r-- | internal/cache/cachedb_test.go | 12 | ||||
-rw-r--r-- | internal/cache/testhelper_test.go | 19 | ||||
-rw-r--r-- | internal/cache/walker_test.go | 10 | ||||
-rw-r--r-- | internal/gitaly/service/operations/rebase_test.go | 45 | ||||
-rw-r--r-- | internal/gitaly/service/remote/find_remote_root_ref.go | 55 | ||||
-rw-r--r-- | internal/gitaly/service/remote/find_remote_root_ref_test.go | 161 | ||||
-rw-r--r-- | proto/go/gitalypb/remote.pb.go | 154 | ||||
-rw-r--r-- | proto/remote.proto | 24 | ||||
-rw-r--r-- | ruby/proto/gitaly/remote_pb.rb | 2 | ||||
-rw-r--r-- | ruby/proto/gitaly/remote_services_pb.rb | 5 |
13 files changed, 382 insertions, 160 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a58fa2fad..e4d88a3ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Gitaly changelog +## 13.11.2 (2021-04-27) + +- No changes. + ## 13.11.1 (2021-04-22) - No changes. @@ -62,6 +66,10 @@ - Update gitlab-gollum-rugged_adapter to 0.4.4.4.gitlab.1. !3357 (Takuya Noguchi) +## 13.10.4 (2021-04-27) + +- No changes. + ## 13.10.3 (2021-04-13) - No changes. @@ -138,6 +146,10 @@ - Remove unused Ruby code. !3203 +## 13.9.7 (2021-04-27) + +- No changes. + ## 13.9.6 (2021-04-13) - No changes. diff --git a/changelogs/unreleased/pks-remote-find-root-ref-inmemory-remote.yml b/changelogs/unreleased/pks-remote-find-root-ref-inmemory-remote.yml new file mode 100644 index 000000000..3fe24b4d0 --- /dev/null +++ b/changelogs/unreleased/pks-remote-find-root-ref-inmemory-remote.yml @@ -0,0 +1,5 @@ +--- +title: 'remote: Add RemoteUrl parameter to FindRemoteRootRef' +merge_request: 3412 +author: +type: added diff --git a/cmd/gitaly-hooks/hooks.go b/cmd/gitaly-hooks/hooks.go index 980f0cf92..b83c995eb 100644 --- a/cmd/gitaly-hooks/hooks.go +++ b/cmd/gitaly-hooks/hooks.go @@ -62,19 +62,28 @@ var ( func main() { logger = gitalylog.NewHookLogger() - if len(os.Args) < 2 { - logger.Fatalf("requires hook name. args: %v", os.Args) + returnCode, err := run(os.Args) + if err != nil { + logger.Fatalf("%s", err) } - subCmd := os.Args[1] + os.Exit(returnCode) +} + +func run(args []string) (int, error) { + if len(args) < 2 { + return 0, fmt.Errorf("requires hook name. args: %v", args) + } + + subCmd := args[1] if subCmd == "check" { logrus.SetLevel(logrus.ErrorLevel) - if len(os.Args) != 3 { + if len(args) != 3 { log.Fatal(errors.New("no configuration file path provided invoke with: gitaly-hooks check <config_path>")) } - configPath := os.Args[2] + configPath := args[2] fmt.Print("Checking GitLab API access: ") info, err := check(configPath) @@ -89,7 +98,8 @@ func main() { fmt.Printf("GitLab Api version: %s\n", info.APIVersion) fmt.Printf("Redis reachable for GitLab: %t\n", info.RedisReachable) fmt.Println("OK") - os.Exit(0) + + return 0, nil } ctx, cancel := context.WithCancel(context.Background()) @@ -103,33 +113,35 @@ func main() { payload, err := git.HooksPayloadFromEnv(os.Environ()) if err != nil { - logger.Fatalf("error when getting hooks payload: %v", err) + return 0, fmt.Errorf("error when getting hooks payload: %v", err) } hookCommand, ok := hooksBySubcommand[subCmd] if !ok { - logger.Fatalf("subcommand name invalid: %q", subCmd) + return 0, fmt.Errorf("subcommand name invalid: %q", subCmd) } // If the hook wasn't requested, then we simply skip executing any // logic. if !payload.IsHookRequested(hookCommand.hookType) { - os.Exit(0) + return 0, nil } conn, err := dialGitaly(payload) if err != nil { - logger.Fatalf("error when connecting to gitaly: %v", err) + return 0, fmt.Errorf("error when connecting to gitaly: %v", err) } + defer conn.Close() + hookClient := gitalypb.NewHookServiceClient(conn) ctx = featureflag.OutgoingWithRaw(ctx, payload.FeatureFlags) - returnCode, err := hookCommand.exec(ctx, payload, hookClient, os.Args) + returnCode, err := hookCommand.exec(ctx, payload, hookClient, args) if err != nil { - logger.Fatal(err) + return 0, err } - os.Exit(returnCode) + return returnCode, nil } func noopSender(c chan error) {} diff --git a/internal/cache/cachedb_test.go b/internal/cache/cachedb_test.go index 2be2d70f8..c9d4f4a22 100644 --- a/internal/cache/cachedb_test.go +++ b/internal/cache/cachedb_test.go @@ -4,7 +4,6 @@ import ( "context" "io" "io/ioutil" - "os" "strings" "sync" "testing" @@ -20,17 +19,6 @@ import ( "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" ) -func TestMain(m *testing.M) { - os.Exit(testMain(m)) -} - -func testMain(m *testing.M) int { - defer testhelper.MustHaveNoChildProcess() - cleanup := testhelper.Configure() - defer cleanup() - return m.Run() -} - func TestStreamDBNaiveKeyer(t *testing.T) { cfg := testcfg.Build(t) diff --git a/internal/cache/testhelper_test.go b/internal/cache/testhelper_test.go new file mode 100644 index 000000000..a5dfb2e41 --- /dev/null +++ b/internal/cache/testhelper_test.go @@ -0,0 +1,19 @@ +package cache_test + +import ( + "os" + "testing" + + "gitlab.com/gitlab-org/gitaly/internal/testhelper" +) + +func TestMain(m *testing.M) { + os.Exit(testMain(m)) +} + +func testMain(m *testing.M) int { + defer testhelper.MustHaveNoChildProcess() + cleanup := testhelper.Configure() + defer cleanup() + return m.Run() +} diff --git a/internal/cache/walker_test.go b/internal/cache/walker_test.go index 1c7139ba0..3af0f7c67 100644 --- a/internal/cache/walker_test.go +++ b/internal/cache/walker_test.go @@ -70,6 +70,11 @@ func TestDiskCacheObjectWalker(t *testing.T) { } func TestDiskCacheInitialClear(t *testing.T) { + // disable the background walkers since we are only + // evaluating the initial move-and-clear function + *cache.ExportDisableWalker = true + defer func() { *cache.ExportDisableWalker = false }() + cfg := testcfg.Build(t) cacheDir := tempdir.CacheDir(cfg.Storages[0]) @@ -78,11 +83,6 @@ func TestDiskCacheInitialClear(t *testing.T) { require.NoError(t, os.MkdirAll(filepath.Dir(canary), 0755)) require.NoError(t, ioutil.WriteFile(canary, []byte("chirp chirp"), 0755)) - // disable the background walkers since we are only - // evaluating the initial move-and-clear function - *cache.ExportDisableWalker = true - defer func() { *cache.ExportDisableWalker = false }() - // validation will run cache walker hook which synchronously // runs the move-and-clear function require.NoError(t, cfg.Validate()) diff --git a/internal/gitaly/service/operations/rebase_test.go b/internal/gitaly/service/operations/rebase_test.go index abe28c079..7724acefb 100644 --- a/internal/gitaly/service/operations/rebase_test.go +++ b/internal/gitaly/service/operations/rebase_test.go @@ -5,6 +5,7 @@ package operations import ( "context" "fmt" + "io" "strings" "testing" "time" @@ -69,10 +70,8 @@ func testSuccessfulUserRebaseConfirmableRequestFeatured(t *testing.T, ctx contex secondResponse, err := rebaseStream.Recv() require.NoError(t, err, "receive second response") - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) newBranchSha := getBranchSha(t, repoPath, rebaseBranchName) @@ -175,11 +174,9 @@ func testUserRebaseConfirmableTransactionFeatured(t *testing.T, ctx context.Cont require.NoError(t, err) require.True(t, secondResponse.GetRebaseApplied(), "the second rebase is applied") - testhelper.ReceiveEOFWithTimeout(t, func() error { - response, err := rebaseStream.Recv() - require.Nil(t, response) - return err - }) + response, err := rebaseStream.Recv() + require.Nil(t, response) + require.Equal(t, io.EOF, err) require.Equal(t, tc.expectedVotes, voteCount) if tc.expectPreReceiveHook { @@ -233,10 +230,8 @@ func testUserRebaseConfirmableStableCommitIDsFeatured(t *testing.T, ctx context. require.NoError(t, err, "receive second response") require.True(t, response.GetRebaseApplied()) - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) commit, err := repo.ReadCommit(ctx, git.Revision(rebaseBranchName)) require.NoError(t, err, "look up git commit") @@ -465,10 +460,8 @@ func testFailedUserRebaseConfirmableRequestDueToPreReceiveErrorFeatured(t *testi require.NoError(t, err, "receive second response") require.Contains(t, secondResponse.PreReceiveError, "failure") - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) newBranchSha := getBranchSha(t, repoPath, rebaseBranchName) require.Equal(t, branchSha, newBranchSha, "branch should not change when the rebase fails due to PreReceiveError") @@ -500,10 +493,8 @@ func testFailedUserRebaseConfirmableDueToGitErrorFeatured(t *testing.T, ctx cont require.NoError(t, err, "receive first response") require.Contains(t, firstResponse.GitError, "conflict") - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) newBranchSha := getBranchSha(t, repoPath, failedBranchName) require.Equal(t, branchSha, newBranchSha, "branch should not change when the rebase fails due to GitError") @@ -556,10 +547,8 @@ func testRebaseRequestWithDeletedFileFeatured(t *testing.T, ctx context.Context, secondResponse, err := rebaseStream.Recv() require.NoError(t, err, "receive second response") - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) newBranchSha := getBranchSha(t, repoPath, branch) @@ -613,10 +602,8 @@ func testRebaseOntoRemoteBranchFeatured(t *testing.T, ctx context.Context, cfg c secondResponse, err := rebaseStream.Recv() require.NoError(t, err, "receive second response") - testhelper.ReceiveEOFWithTimeout(t, func() error { - _, err = rebaseStream.Recv() - return err - }) + _, err = rebaseStream.Recv() + require.Equal(t, io.EOF, err) rebasedBranchHash := getBranchSha(t, repoPath, localBranch) diff --git a/internal/gitaly/service/remote/find_remote_root_ref.go b/internal/gitaly/service/remote/find_remote_root_ref.go index 374c483d9..7474751d4 100644 --- a/internal/gitaly/service/remote/find_remote_root_ref.go +++ b/internal/gitaly/service/remote/find_remote_root_ref.go @@ -3,9 +3,11 @@ package remote import ( "bufio" "context" + "fmt" "strings" "gitlab.com/gitlab-org/gitaly/internal/git" + "gitlab.com/gitlab-org/gitaly/internal/helper" "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -13,14 +15,32 @@ import ( const headPrefix = "HEAD branch: " -func (s *server) findRemoteRootRef(ctx context.Context, repo *gitalypb.Repository, remote string) (string, error) { - cmd, err := s.gitCmdFactory.New(ctx, repo, +func (s *server) findRemoteRootRef(ctx context.Context, request *gitalypb.FindRemoteRootRefRequest) (string, error) { + remoteName := request.Remote + var config []git.ConfigPair + + if request.RemoteUrl != "" { + remoteName = "inmemory" + config = []git.ConfigPair{ + {Key: "remote.inmemory.url", Value: request.RemoteUrl}, + } + + if authHeader := request.GetHttpAuthorizationHeader(); authHeader != "" { + config = append(config, git.ConfigPair{ + Key: fmt.Sprintf("http.%s.extraHeader", request.RemoteUrl), + Value: "Authorization: " + authHeader, + }) + } + } + + cmd, err := s.gitCmdFactory.New(ctx, request.Repository, git.SubSubCmd{ Name: "remote", Action: "show", - Args: []string{remote}, + Args: []string{remoteName}, }, - git.WithRefTxHook(ctx, repo, s.cfg), + git.WithRefTxHook(ctx, request.Repository, s.cfg), + git.WithConfigEnv(config...), ) if err != nil { return "", err @@ -31,7 +51,11 @@ func (s *server) findRemoteRootRef(ctx context.Context, repo *gitalypb.Repositor line := strings.TrimSpace(scanner.Text()) if strings.HasPrefix(line, headPrefix) { - return strings.TrimPrefix(line, headPrefix), nil + rootRef := strings.TrimPrefix(line, headPrefix) + if rootRef == "(unknown)" { + return "", status.Error(codes.NotFound, "no remote HEAD found") + } + return rootRef, nil } } @@ -48,18 +72,21 @@ func (s *server) findRemoteRootRef(ctx context.Context, repo *gitalypb.Repositor // FindRemoteRootRef queries the remote to determine its HEAD func (s *server) FindRemoteRootRef(ctx context.Context, in *gitalypb.FindRemoteRootRefRequest) (*gitalypb.FindRemoteRootRefResponse, error) { - remote := in.GetRemote() - if remote == "" { - return nil, status.Error(codes.InvalidArgument, "empty remote can't be queried") + //nolint:staticcheck // GetRemote() is deprecated + if in.GetRemote() == "" && in.GetRemoteUrl() == "" { + return nil, status.Error(codes.InvalidArgument, "got neither remote name nor URL") + } + //nolint:staticcheck // GetRemote() is deprecated + if in.GetRemote() != "" && in.GetRemoteUrl() != "" { + return nil, status.Error(codes.InvalidArgument, "got remote name and URL") + } + if in.Repository == nil { + return nil, status.Error(codes.InvalidArgument, "missing repository") } - ref, err := s.findRemoteRootRef(ctx, in.GetRepository(), remote) + ref, err := s.findRemoteRootRef(ctx, in) if err != nil { - if _, ok := status.FromError(err); ok { - return nil, err - } - - return nil, status.Errorf(codes.Internal, err.Error()) + return nil, helper.ErrInternal(err) } return &gitalypb.FindRemoteRootRefResponse{Ref: ref}, nil diff --git a/internal/gitaly/service/remote/find_remote_root_ref_test.go b/internal/gitaly/service/remote/find_remote_root_ref_test.go index 47161233b..c30fccb53 100644 --- a/internal/gitaly/service/remote/find_remote_root_ref_test.go +++ b/internal/gitaly/service/remote/find_remote_root_ref_test.go @@ -4,21 +4,76 @@ import ( "testing" "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/internal/git/gittest" + "gitlab.com/gitlab-org/gitaly/internal/helper/text" "gitlab.com/gitlab-org/gitaly/internal/testhelper" "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) func TestFindRemoteRootRefSuccess(t *testing.T) { - _, repo, _, client := setupRemoteService(t) + _, repo, repoPath, client := setupRemoteService(t) + + originURL := text.ChompBytes(testhelper.MustRunCommand(t, nil, + "git", "-C", repoPath, "remote", "get-url", "origin")) + + for _, tc := range []struct { + desc string + request *gitalypb.FindRemoteRootRefRequest + }{ + { + desc: "with remote name", + request: &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "origin"}, + }, + { + desc: "with remote URL", + request: &gitalypb.FindRemoteRootRefRequest{Repository: repo, RemoteUrl: originURL}, + }, + { + // Unfortunately, we do not really have a nice way to verify we actually got + // the auth header. So this test case only really verifies that it doesn't + // break the world to set up one. + desc: "with remote URL and auth header", + request: &gitalypb.FindRemoteRootRefRequest{ + Repository: repo, + RemoteUrl: originURL, + HttpAuthorizationHeader: "mysecret", + }, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + ctx, cancel := testhelper.Context() + defer cancel() - request := &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "origin"} - testCtx, cancelCtx := testhelper.Context() - defer cancelCtx() + response, err := client.FindRemoteRootRef(ctx, tc.request) + require.NoError(t, err) + require.Equal(t, "master", response.Ref) + }) + } +} + +func TestFindRemoteRootRefWithUnbornRemoteHead(t *testing.T) { + cfg, remoteRepo, remoteRepoPath, client := setupRemoteService(t) - response, err := client.FindRemoteRootRef(testCtx, request) - require.NoError(t, err) - require.Equal(t, "master", response.Ref) + // We're creating an empty repository. Empty repositories do have a HEAD set up, but they + // point to an unborn branch because the default branch hasn't yet been created. + _, clientRepoPath, cleanup := gittest.InitBareRepoAt(t, cfg.Storages[0]) + defer cleanup() + testhelper.MustRunCommand(t, nil, "git", "-C", remoteRepoPath, "remote", "add", + "foo", "file://"+clientRepoPath) + + ctx, cancel := testhelper.Context() + defer cancel() + + for _, request := range []*gitalypb.FindRemoteRootRefRequest{ + &gitalypb.FindRemoteRootRefRequest{Repository: remoteRepo, Remote: "foo"}, + &gitalypb.FindRemoteRootRefRequest{Repository: remoteRepo, RemoteUrl: "file://" + clientRepoPath}, + } { + response, err := client.FindRemoteRootRef(ctx, request) + require.Equal(t, status.Error(codes.NotFound, "no remote HEAD found"), err) + require.Nil(t, response) + } } func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) { @@ -27,48 +82,92 @@ func TestFindRemoteRootRefFailedDueToValidation(t *testing.T) { invalidRepo := &gitalypb.Repository{StorageName: "fake", RelativePath: "path"} testCases := []struct { - desc string - request *gitalypb.FindRemoteRootRefRequest - code codes.Code + desc string + request *gitalypb.FindRemoteRootRefRequest + expectedErr []error }{ { - desc: "Invalid repository", - request: &gitalypb.FindRemoteRootRefRequest{Repository: invalidRepo}, - code: codes.InvalidArgument, + desc: "Invalid repository", + request: &gitalypb.FindRemoteRootRefRequest{ + Repository: invalidRepo, + Remote: "remote-name", + }, + expectedErr: []error{ + status.Error(codes.InvalidArgument, "GetStorageByName: no such storage: \"fake\""), + status.Error(codes.InvalidArgument, "repo scoped: invalid Repository"), + }, }, { - desc: "Repository is nil", - request: &gitalypb.FindRemoteRootRefRequest{}, - code: codes.InvalidArgument, + desc: "Repository is nil", + request: &gitalypb.FindRemoteRootRefRequest{ + Remote: "remote-name", + }, + expectedErr: []error{ + status.Error(codes.InvalidArgument, "missing repository"), + status.Error(codes.InvalidArgument, "repo scoped: empty Repository"), + }, }, { - desc: "Remote is nil", - request: &gitalypb.FindRemoteRootRefRequest{Repository: repo}, - code: codes.InvalidArgument, + desc: "Remote name and URL is empty", + request: &gitalypb.FindRemoteRootRefRequest{ + Repository: repo, + }, + expectedErr: []error{ + status.Error(codes.InvalidArgument, "got neither remote name nor URL"), + }, }, { - desc: "Remote is empty", - request: &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: ""}, - code: codes.InvalidArgument, + desc: "Remote name and URL is set", + request: &gitalypb.FindRemoteRootRefRequest{ + Repository: repo, + Remote: "remote-name", + RemoteUrl: "remote-url", + }, + expectedErr: []error{ + status.Error(codes.InvalidArgument, "got remote name and URL"), + }, }, } for _, testCase := range testCases { - testCtx, cancelCtx := testhelper.Context() - defer cancelCtx() + t.Run(testCase.desc, func(t *testing.T) { + ctx, cancel := testhelper.Context() + defer cancel() - _, err := client.FindRemoteRootRef(testCtx, testCase.request) - testhelper.RequireGrpcError(t, err, testCase.code) + _, err := client.FindRemoteRootRef(ctx, testCase.request) + // We cannot test for equality given that some errors depend on whether we + // proxy via Praefect or not. We thus simply assert that the actual error is + // one of the possible errors, which is the same as equality for all the + // other tests. + require.Contains(t, testCase.expectedErr, err) + }) } } func TestFindRemoteRootRefFailedDueToInvalidRemote(t *testing.T) { _, repo, _, client := setupRemoteService(t) - request := &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "invalid"} - testCtx, cancelCtx := testhelper.Context() - defer cancelCtx() + t.Run("invalid remote name", func(t *testing.T) { + request := &gitalypb.FindRemoteRootRefRequest{Repository: repo, Remote: "invalid"} + ctx, cancel := testhelper.Context() + defer cancel() + + _, err := client.FindRemoteRootRef(ctx, request) + testhelper.RequireGrpcError(t, err, codes.Internal) + }) + + t.Run("invalid remote URL", func(t *testing.T) { + fakeRepoDir := testhelper.TempDir(t) + + // We're using a nonexistent filepath remote URL so we avoid hitting the internet. + request := &gitalypb.FindRemoteRootRefRequest{ + Repository: repo, RemoteUrl: "file://" + fakeRepoDir, + } + + ctx, cancel := testhelper.Context() + defer cancel() - _, err := client.FindRemoteRootRef(testCtx, request) - testhelper.RequireGrpcError(t, err, codes.Internal) + _, err := client.FindRemoteRootRef(ctx, request) + testhelper.RequireGrpcError(t, err, codes.Internal) + }) } diff --git a/proto/go/gitalypb/remote.pb.go b/proto/go/gitalypb/remote.pb.go index fc5e43ff9..23ae90fe1 100644 --- a/proto/go/gitalypb/remote.pb.go +++ b/proto/go/gitalypb/remote.pb.go @@ -514,12 +514,25 @@ func (m *FindRemoteRepositoryResponse) GetExists() bool { return false } +// FindRemoteRootRefRequest represents a request for the FindRemoteRootRef RPC. type FindRemoteRootRefRequest struct { - Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` - Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Repository is the repository in which the request shall be executed in. If + // a remote name is given, then this is the repository in which the remote + // will be looked up. + Repository *Repository `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + // Remote is the name of the remote of which the root reference shall be + // looked up. The remote must have been created before this call. This + // parameter is deprecated in favor of `RemoteUrl`, see + // https://gitlab.com/gitlab-org/gitaly/-/issues/1773. + Remote string `protobuf:"bytes,2,opt,name=remote,proto3" json:"remote,omitempty"` // Deprecated: Do not use. + // RemoteUrl specifies the remote repository URL which should be fetched from. + RemoteUrl string `protobuf:"bytes,3,opt,name=remote_url,json=remoteUrl,proto3" json:"remote_url,omitempty"` + // HttpAuthorizationHeader is the HTTP header which should be added to the + // request in order to authenticate against the repository. + HttpAuthorizationHeader string `protobuf:"bytes,4,opt,name=http_authorization_header,json=httpAuthorizationHeader,proto3" json:"http_authorization_header,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *FindRemoteRootRefRequest) Reset() { *m = FindRemoteRootRefRequest{} } @@ -554,6 +567,7 @@ func (m *FindRemoteRootRefRequest) GetRepository() *Repository { return nil } +// Deprecated: Do not use. func (m *FindRemoteRootRefRequest) GetRemote() string { if m != nil { return m.Remote @@ -561,7 +575,24 @@ func (m *FindRemoteRootRefRequest) GetRemote() string { return "" } +func (m *FindRemoteRootRefRequest) GetRemoteUrl() string { + if m != nil { + return m.RemoteUrl + } + return "" +} + +func (m *FindRemoteRootRefRequest) GetHttpAuthorizationHeader() string { + if m != nil { + return m.HttpAuthorizationHeader + } + return "" +} + +// FindRemoteRootRefResponse represents the response for the FindRemoteRootRef +// request. type FindRemoteRootRefResponse struct { + // Ref is the name of the remote root reference. Ref string `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -754,56 +785,59 @@ func init() { func init() { proto.RegisterFile("remote.proto", fileDescriptor_eefc82927d57d89b) } var fileDescriptor_eefc82927d57d89b = []byte{ - // 779 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4d, 0x6f, 0xd3, 0x4c, - 0x10, 0x96, 0x1d, 0x37, 0x1f, 0x93, 0xb4, 0x4a, 0x36, 0x55, 0x5f, 0xc7, 0xa9, 0xf4, 0xa6, 0x86, - 0x8a, 0x1c, 0x68, 0x82, 0xca, 0x87, 0x38, 0x20, 0x21, 0x02, 0xaa, 0xca, 0x47, 0x2b, 0x61, 0xe8, - 0x85, 0x03, 0xc6, 0x49, 0x36, 0x89, 0x15, 0xc7, 0x6b, 0x76, 0x9d, 0x42, 0xfe, 0x01, 0x47, 0x6e, - 0xe5, 0x2f, 0x70, 0xe1, 0x67, 0x70, 0xe0, 0x27, 0xf5, 0x84, 0xd6, 0xbb, 0x49, 0x9c, 0xd4, 0x09, - 0x87, 0xc2, 0xcd, 0x3b, 0x33, 0xfb, 0xcc, 0xcc, 0x33, 0x3b, 0x8f, 0x0c, 0x05, 0x8a, 0x47, 0x24, - 0xc4, 0x8d, 0x80, 0x92, 0x90, 0xa0, 0x74, 0xdf, 0x0d, 0x1d, 0x6f, 0x62, 0x80, 0xe7, 0xfa, 0xa1, - 0xb0, 0x19, 0x05, 0x36, 0x70, 0x28, 0xee, 0x8a, 0x93, 0xf9, 0x43, 0x81, 0xe2, 0x93, 0x6e, 0xd7, - 0x8a, 0x6e, 0x59, 0xf8, 0xe3, 0x18, 0xb3, 0x10, 0x3d, 0x04, 0xa0, 0x38, 0x20, 0xcc, 0x0d, 0x09, - 0x9d, 0xe8, 0x4a, 0x4d, 0xa9, 0xe7, 0x0f, 0x51, 0x43, 0x60, 0x35, 0xac, 0x99, 0xa7, 0xa5, 0x7d, - 0xfb, 0x79, 0x5b, 0xb1, 0x62, 0xb1, 0x08, 0x81, 0xe6, 0x3b, 0x23, 0xac, 0xab, 0x35, 0xa5, 0x9e, - 0xb3, 0xa2, 0x6f, 0x54, 0x84, 0xd4, 0x98, 0x7a, 0x7a, 0x2a, 0x32, 0xf1, 0x4f, 0xb4, 0x0f, 0x5b, - 0x23, 0x97, 0x52, 0x42, 0x6d, 0x8a, 0x7b, 0x23, 0x27, 0x60, 0xfa, 0x46, 0x2d, 0x55, 0xcf, 0x59, - 0x9b, 0xc2, 0x6a, 0x09, 0xe3, 0x0b, 0x2d, 0xab, 0x15, 0x37, 0xa6, 0x46, 0x19, 0x6a, 0x96, 0xa1, - 0x14, 0xab, 0x97, 0x05, 0xc4, 0x67, 0xd8, 0xec, 0x40, 0x99, 0x5b, 0xce, 0xf1, 0x3f, 0xec, 0xc3, - 0x6c, 0xc0, 0xf6, 0x62, 0x12, 0x91, 0x1c, 0xed, 0x40, 0x9a, 0x62, 0x36, 0xf6, 0xc2, 0x28, 0x43, - 0xd6, 0x92, 0x27, 0xf3, 0x42, 0x01, 0xe3, 0x08, 0x87, 0x9d, 0xc1, 0x73, 0x3f, 0xc4, 0xd4, 0x77, - 0xbc, 0xbf, 0x55, 0xdc, 0x63, 0x28, 0x89, 0x29, 0xdb, 0x31, 0x00, 0x75, 0x15, 0x80, 0x55, 0xa4, - 0x32, 0xef, 0xd4, 0x62, 0xde, 0x87, 0x6a, 0x62, 0x61, 0x7f, 0x68, 0xe8, 0xab, 0x0a, 0x95, 0xb3, - 0xa0, 0xeb, 0x84, 0x92, 0x81, 0x13, 0x39, 0xad, 0xeb, 0xf6, 0x53, 0x81, 0x2c, 0xc5, 0x3d, 0x3b, - 0x46, 0x78, 0x86, 0xe2, 0xde, 0x29, 0x7f, 0x3b, 0xf7, 0x60, 0x87, 0xf8, 0xde, 0xc4, 0x6e, 0x53, - 0xc7, 0xef, 0x0c, 0x30, 0xb3, 0x47, 0x4e, 0xd8, 0x19, 0xb8, 0x7e, 0x5f, 0x4f, 0xd5, 0x52, 0xf5, - 0x82, 0xb5, 0xcd, 0xbd, 0x2d, 0xe9, 0x3c, 0x91, 0x3e, 0xf4, 0x1f, 0x64, 0x18, 0x1b, 0xd8, 0x43, - 0x3c, 0xd1, 0xb5, 0x08, 0x2f, 0xcd, 0xd8, 0xe0, 0x25, 0x9e, 0xa0, 0xff, 0x21, 0x3f, 0xf4, 0xc9, - 0x27, 0xdf, 0x1e, 0x10, 0x16, 0xf2, 0x57, 0xc7, 0x9d, 0x10, 0x99, 0x8e, 0xb9, 0x05, 0x35, 0xa0, - 0x3c, 0xc4, 0x38, 0xb0, 0xbb, 0xee, 0x39, 0xa6, 0x7d, 0xec, 0x87, 0xfc, 0xd9, 0x31, 0x3d, 0x1d, - 0xf1, 0x50, 0xe2, 0xae, 0x67, 0x53, 0x8f, 0x85, 0x7b, 0xcc, 0x7c, 0x0a, 0x46, 0x12, 0x23, 0x92, - 0xc8, 0x7d, 0xd8, 0x5a, 0x02, 0x52, 0xa2, 0xaa, 0x37, 0xbb, 0x0b, 0x20, 0xef, 0xa1, 0x7a, 0xe4, - 0xfa, 0xb3, 0x37, 0x3d, 0x1b, 0x9c, 0x24, 0x36, 0x1a, 0x07, 0x77, 0x45, 0xa4, 0xe6, 0x2c, 0x79, - 0x42, 0xb7, 0xa0, 0xc0, 0x42, 0x42, 0x9d, 0x3e, 0x8e, 0x51, 0xd7, 0xd2, 0xbe, 0x70, 0x7a, 0xf3, - 0xd2, 0xc3, 0x49, 0x34, 0x1f, 0xc0, 0x6e, 0x32, 0xfe, 0x7c, 0xde, 0xf8, 0xb3, 0xcb, 0x09, 0x91, - 0xf3, 0x16, 0x27, 0xd3, 0x03, 0x3d, 0x76, 0x8f, 0x10, 0x5e, 0xed, 0xf5, 0xa7, 0x3d, 0x6f, 0x47, - 0x8d, 0xb7, 0x63, 0x1e, 0x40, 0x25, 0x21, 0x9b, 0x2c, 0xb1, 0x08, 0x29, 0x8a, 0x7b, 0x92, 0x00, - 0xfe, 0x69, 0x9e, 0x02, 0x7a, 0xe5, 0xb2, 0x50, 0x84, 0xb3, 0x6b, 0x97, 0x65, 0x7e, 0x57, 0xa0, - 0xbc, 0x00, 0x28, 0x33, 0x3f, 0x82, 0x8c, 0x28, 0x50, 0x0c, 0x2f, 0x7f, 0x68, 0x4e, 0xe1, 0x12, - 0xa2, 0x1b, 0xb2, 0xfa, 0xe9, 0x15, 0xe3, 0x2d, 0xa4, 0x85, 0x69, 0xa6, 0x28, 0x4a, 0x4c, 0x19, - 0xab, 0x90, 0xeb, 0xf1, 0x3d, 0xb4, 0xb9, 0x3e, 0x0a, 0x36, 0xb2, 0x91, 0xe1, 0x8c, 0x7a, 0x7c, - 0x2b, 0x82, 0x31, 0x13, 0x3e, 0xa1, 0x9d, 0x19, 0x7e, 0x3e, 0xa3, 0xde, 0xe1, 0x2f, 0x0d, 0x36, - 0x05, 0xec, 0x1b, 0x4c, 0xcf, 0xdd, 0x0e, 0x46, 0xc7, 0x90, 0x9b, 0xa9, 0x22, 0xd2, 0xa7, 0x15, - 0x2e, 0x0b, 0xbb, 0x51, 0x49, 0xf0, 0x48, 0x09, 0x4d, 0x5f, 0x5e, 0xd4, 0xd5, 0xac, 0x82, 0x7a, - 0x50, 0x4e, 0xd0, 0x06, 0x34, 0xeb, 0x7a, 0xb5, 0xa2, 0x19, 0x37, 0xd6, 0xc6, 0x2c, 0xe5, 0x79, - 0x0d, 0x85, 0xb8, 0x9a, 0xa2, 0xea, 0x7c, 0x4a, 0x57, 0x84, 0xdc, 0xd8, 0x4d, 0x76, 0x2e, 0x41, - 0x62, 0x40, 0x57, 0x97, 0x11, 0xed, 0x4d, 0xef, 0xae, 0x94, 0x2e, 0xc3, 0x5c, 0x17, 0xb2, 0x90, - 0x44, 0xad, 0x2b, 0x68, 0x08, 0xdb, 0x49, 0xeb, 0x84, 0xe6, 0xed, 0xaf, 0x5e, 0x66, 0xe3, 0xe6, - 0xfa, 0x20, 0x99, 0x2c, 0x7b, 0x79, 0x51, 0xd7, 0xb2, 0x6a, 0x51, 0x45, 0x1f, 0xa0, 0x74, 0x65, - 0x2b, 0x50, 0x2d, 0x01, 0x64, 0x61, 0x3d, 0x8d, 0xbd, 0x35, 0x11, 0x8b, 0x0d, 0xb5, 0xee, 0xbc, - 0xe3, 0xb1, 0x9e, 0xd3, 0x6e, 0x74, 0xc8, 0xa8, 0x29, 0x3e, 0x0f, 0x08, 0xed, 0x37, 0x05, 0x42, - 0x33, 0xfa, 0x4f, 0x68, 0xf6, 0x89, 0x3c, 0x07, 0xed, 0x76, 0x3a, 0x32, 0xdd, 0xfd, 0x1d, 0x00, - 0x00, 0xff, 0xff, 0x03, 0xe4, 0xf2, 0x17, 0x6c, 0x08, 0x00, 0x00, + // 831 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x8e, 0xe3, 0x44, + 0x10, 0x96, 0x1d, 0x6f, 0xc6, 0xa9, 0x64, 0x56, 0x49, 0x67, 0xb4, 0xeb, 0x38, 0x8b, 0xc8, 0x1a, + 0x56, 0xe4, 0xc0, 0x26, 0x68, 0xf8, 0x11, 0x42, 0x48, 0x68, 0x03, 0x5a, 0x0d, 0x3f, 0xbb, 0x12, + 0x86, 0xb9, 0x70, 0xc0, 0x38, 0x49, 0x27, 0xb6, 0xe2, 0xb8, 0x4d, 0x77, 0x67, 0x20, 0x3c, 0x01, + 0x47, 0x6e, 0xc3, 0x2b, 0x70, 0xe1, 0x31, 0x38, 0xc0, 0x1b, 0xcd, 0x09, 0xf5, 0x4f, 0x1c, 0x27, + 0xe3, 0x84, 0xc3, 0xb0, 0xb7, 0xee, 0xfa, 0xaa, 0xbf, 0xaa, 0xfa, 0xaa, 0xbb, 0x6c, 0x68, 0x50, + 0xbc, 0x24, 0x1c, 0x0f, 0x32, 0x4a, 0x38, 0x41, 0xd5, 0x79, 0xcc, 0xc3, 0x64, 0xed, 0x42, 0x12, + 0xa7, 0x5c, 0xd9, 0xdc, 0x06, 0x8b, 0x42, 0x8a, 0xa7, 0x6a, 0xe7, 0xfd, 0x69, 0x40, 0xf3, 0xd9, + 0x74, 0xea, 0xcb, 0x53, 0x3e, 0xfe, 0x71, 0x85, 0x19, 0x47, 0x1f, 0x02, 0x50, 0x9c, 0x11, 0x16, + 0x73, 0x42, 0xd7, 0x8e, 0xd1, 0x33, 0xfa, 0xf5, 0x73, 0x34, 0x50, 0x5c, 0x03, 0x3f, 0x47, 0x46, + 0xd6, 0xef, 0x7f, 0xbd, 0x6d, 0xf8, 0x05, 0x5f, 0x84, 0xc0, 0x4a, 0xc3, 0x25, 0x76, 0xcc, 0x9e, + 0xd1, 0xaf, 0xf9, 0x72, 0x8d, 0x9a, 0x50, 0x59, 0xd1, 0xc4, 0xa9, 0x48, 0x93, 0x58, 0xa2, 0x27, + 0x70, 0x7f, 0x19, 0x53, 0x4a, 0x68, 0x40, 0xf1, 0x6c, 0x19, 0x66, 0xcc, 0xb9, 0xd7, 0xab, 0xf4, + 0x6b, 0xfe, 0xa9, 0xb2, 0xfa, 0xca, 0xf8, 0x85, 0x65, 0x5b, 0xcd, 0x7b, 0x1b, 0xa3, 0x76, 0xf5, + 0xda, 0xd0, 0x2a, 0xe4, 0xcb, 0x32, 0x92, 0x32, 0xec, 0x4d, 0xa0, 0x2d, 0x2c, 0x57, 0xf8, 0x15, + 0xd6, 0xe1, 0x0d, 0xe0, 0x6c, 0x37, 0x88, 0x0a, 0x8e, 0x1e, 0x40, 0x95, 0x62, 0xb6, 0x4a, 0xb8, + 0x8c, 0x60, 0xfb, 0x7a, 0xe7, 0x5d, 0x1b, 0xe0, 0x3e, 0xc7, 0x7c, 0x12, 0x7d, 0x9e, 0x72, 0x4c, + 0xd3, 0x30, 0xf9, 0xbf, 0x92, 0xfb, 0x04, 0x5a, 0xaa, 0xcb, 0x41, 0x81, 0xc0, 0x3c, 0x44, 0xe0, + 0x37, 0xa9, 0x8e, 0xbb, 0xb1, 0x78, 0xef, 0x43, 0xb7, 0x34, 0xb1, 0xff, 0x28, 0xe8, 0x37, 0x13, + 0x3a, 0x97, 0xd9, 0x34, 0xe4, 0x5a, 0x81, 0x17, 0xba, 0x5b, 0x77, 0xad, 0xa7, 0x03, 0x36, 0xc5, + 0xb3, 0xa0, 0x20, 0xf8, 0x09, 0xc5, 0xb3, 0x97, 0xe2, 0xee, 0xbc, 0x07, 0x0f, 0x48, 0x9a, 0xac, + 0x83, 0x31, 0x0d, 0xd3, 0x49, 0x84, 0x59, 0xb0, 0x0c, 0xf9, 0x24, 0x8a, 0xd3, 0xb9, 0x53, 0xe9, + 0x55, 0xfa, 0x0d, 0xff, 0x4c, 0xa0, 0x23, 0x0d, 0xbe, 0xd0, 0x18, 0x7a, 0x08, 0x27, 0x8c, 0x45, + 0xc1, 0x02, 0xaf, 0x1d, 0x4b, 0xf2, 0x55, 0x19, 0x8b, 0xbe, 0xc4, 0x6b, 0xf4, 0x3a, 0xd4, 0x17, + 0x29, 0xf9, 0x29, 0x0d, 0x22, 0xc2, 0xb8, 0xb8, 0x75, 0x02, 0x04, 0x69, 0xba, 0x10, 0x16, 0x34, + 0x80, 0xf6, 0x02, 0xe3, 0x2c, 0x98, 0xc6, 0x57, 0x98, 0xce, 0x71, 0xca, 0xc5, 0xb5, 0x63, 0x4e, + 0x55, 0xea, 0xd0, 0x12, 0xd0, 0x67, 0x1b, 0xc4, 0xc7, 0x33, 0xe6, 0x7d, 0x0a, 0x6e, 0x99, 0x22, + 0x5a, 0xc8, 0x27, 0x70, 0x7f, 0x8f, 0xc8, 0x90, 0x59, 0x9f, 0x4e, 0x77, 0x48, 0xbe, 0x87, 0xee, + 0xf3, 0x38, 0xcd, 0xef, 0x74, 0xde, 0x38, 0x2d, 0xac, 0x6c, 0x87, 0x80, 0xa4, 0xa8, 0x35, 0x5f, + 0xef, 0xd0, 0x5b, 0xd0, 0x60, 0x9c, 0xd0, 0x70, 0x8e, 0x0b, 0xd2, 0x8d, 0xac, 0x5f, 0x85, 0xbc, + 0x75, 0x8d, 0x08, 0x11, 0xbd, 0x0f, 0xe0, 0x51, 0x39, 0xff, 0xb6, 0xdf, 0xf8, 0xe7, 0x58, 0x08, + 0xa2, 0xfb, 0xad, 0x76, 0xde, 0x3f, 0x06, 0x38, 0x85, 0x83, 0x84, 0x88, 0x74, 0xef, 0xde, 0x6e, + 0x37, 0xaf, 0x47, 0x65, 0x6c, 0x3a, 0x46, 0x5e, 0xd3, 0x6b, 0x82, 0x55, 0x5e, 0xed, 0xed, 0xc8, + 0xa8, 0x29, 0xcb, 0x25, 0x4d, 0xd0, 0x47, 0xd0, 0x89, 0x38, 0xcf, 0x82, 0x70, 0xc5, 0x23, 0x42, + 0xe3, 0x5f, 0x42, 0x1e, 0x93, 0x34, 0x88, 0x70, 0x38, 0xc5, 0x54, 0xb7, 0xfa, 0xa1, 0x70, 0x78, + 0x56, 0xc4, 0x2f, 0x24, 0xec, 0x3d, 0x85, 0x4e, 0x49, 0x31, 0x5a, 0x82, 0x26, 0x54, 0x28, 0x9e, + 0x69, 0x81, 0xc5, 0xd2, 0x7b, 0x09, 0xe8, 0xab, 0x98, 0x71, 0xe5, 0xce, 0xee, 0x5c, 0xb5, 0xf7, + 0x87, 0x01, 0xed, 0x1d, 0x42, 0x1d, 0xf9, 0x63, 0x38, 0x51, 0xf5, 0xa9, 0xcb, 0x51, 0x3f, 0xf7, + 0x36, 0x74, 0x25, 0xde, 0x03, 0x9d, 0xfd, 0xe6, 0x88, 0xfb, 0x2d, 0x54, 0x95, 0x29, 0x9f, 0x58, + 0x46, 0x61, 0xf2, 0x76, 0xa1, 0x36, 0x13, 0xef, 0x5c, 0x8a, 0xa9, 0x5e, 0x96, 0x2d, 0x0d, 0x42, + 0xcb, 0x0e, 0xd8, 0xd9, 0x8a, 0x45, 0x05, 0xa1, 0x4f, 0xc4, 0xfe, 0x92, 0x26, 0xe7, 0x7f, 0x5b, + 0x70, 0xaa, 0x68, 0xbf, 0xc1, 0xf4, 0x2a, 0x9e, 0x60, 0x74, 0x01, 0xb5, 0x7c, 0xea, 0x22, 0x67, + 0x93, 0xe1, 0xfe, 0x87, 0xc3, 0xed, 0x94, 0x20, 0x7a, 0x44, 0x57, 0x6f, 0xae, 0xfb, 0xa6, 0x6d, + 0xa0, 0x19, 0xb4, 0x4b, 0x66, 0x0f, 0xca, 0xab, 0x3e, 0x3c, 0x31, 0xdd, 0x37, 0x8e, 0xfa, 0xec, + 0xc5, 0xf9, 0x1a, 0x1a, 0xc5, 0x69, 0x8d, 0xba, 0xdb, 0x2e, 0xdd, 0xfa, 0x50, 0xb8, 0x8f, 0xca, + 0xc1, 0x3d, 0x4a, 0x0c, 0xe8, 0xf6, 0x63, 0x47, 0x8f, 0x37, 0x67, 0x0f, 0x8e, 0x46, 0xd7, 0x3b, + 0xe6, 0xb2, 0x13, 0xc4, 0xec, 0x1b, 0x68, 0x01, 0x67, 0x65, 0xcf, 0x15, 0x6d, 0xcb, 0x3f, 0x3c, + 0x2c, 0xdc, 0x37, 0x8f, 0x3b, 0xe9, 0x60, 0xf6, 0xcd, 0x75, 0xdf, 0xb2, 0xcd, 0xa6, 0x89, 0x7e, + 0x80, 0xd6, 0xad, 0x57, 0x81, 0x7a, 0x25, 0x24, 0x3b, 0xaf, 0xdf, 0x7d, 0x7c, 0xc4, 0x63, 0xb7, + 0xa0, 0xd1, 0x3b, 0xdf, 0x09, 0xdf, 0x24, 0x1c, 0x0f, 0x26, 0x64, 0x39, 0x54, 0xcb, 0xa7, 0x84, + 0xce, 0x87, 0x8a, 0x61, 0x28, 0xff, 0x43, 0x86, 0x73, 0xa2, 0xf7, 0xd9, 0x78, 0x5c, 0x95, 0xa6, + 0x77, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xfc, 0x7f, 0x70, 0xcc, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -828,6 +862,11 @@ type RemoteServiceClient interface { // the patterns specified in the requests. UpdateRemoteMirror(ctx context.Context, opts ...grpc.CallOption) (RemoteService_UpdateRemoteMirrorClient, error) FindRemoteRepository(ctx context.Context, in *FindRemoteRepositoryRequest, opts ...grpc.CallOption) (*FindRemoteRepositoryResponse, error) + // FindRemoteRootRef tries to find the root reference of a remote + // repository. The root reference is the default branch as pointed to by + // the remotes HEAD reference. Returns an InvalidArgument error if the + // specified remote does not exist and a NotFound error in case no HEAD + // branch was found. FindRemoteRootRef(ctx context.Context, in *FindRemoteRootRefRequest, opts ...grpc.CallOption) (*FindRemoteRootRefResponse, error) } @@ -930,6 +969,11 @@ type RemoteServiceServer interface { // the patterns specified in the requests. UpdateRemoteMirror(RemoteService_UpdateRemoteMirrorServer) error FindRemoteRepository(context.Context, *FindRemoteRepositoryRequest) (*FindRemoteRepositoryResponse, error) + // FindRemoteRootRef tries to find the root reference of a remote + // repository. The root reference is the default branch as pointed to by + // the remotes HEAD reference. Returns an InvalidArgument error if the + // specified remote does not exist and a NotFound error in case no HEAD + // branch was found. FindRemoteRootRef(context.Context, *FindRemoteRootRefRequest) (*FindRemoteRootRefResponse, error) } diff --git a/proto/remote.proto b/proto/remote.proto index c228e3880..d427accef 100644 --- a/proto/remote.proto +++ b/proto/remote.proto @@ -40,6 +40,12 @@ service RemoteService { scope_level: STORAGE }; } + + // FindRemoteRootRef tries to find the root reference of a remote + // repository. The root reference is the default branch as pointed to by + // the remotes HEAD reference. Returns an InvalidArgument error if the + // specified remote does not exist and a NotFound error in case no HEAD + // branch was found. rpc FindRemoteRootRef(FindRemoteRootRefRequest) returns (FindRemoteRootRefResponse) { option (op_type) = { op: ACCESSOR @@ -119,12 +125,28 @@ message FindRemoteRepositoryResponse { bool exists = 1; } +// FindRemoteRootRefRequest represents a request for the FindRemoteRootRef RPC. message FindRemoteRootRefRequest { + // Repository is the repository in which the request shall be executed in. If + // a remote name is given, then this is the repository in which the remote + // will be looked up. Repository repository = 1 [(target_repository)=true]; - string remote = 2; + // Remote is the name of the remote of which the root reference shall be + // looked up. The remote must have been created before this call. This + // parameter is deprecated in favor of `RemoteUrl`, see + // https://gitlab.com/gitlab-org/gitaly/-/issues/1773. + string remote = 2 [deprecated=true]; + // RemoteUrl specifies the remote repository URL which should be fetched from. + string remote_url = 3; + // HttpAuthorizationHeader is the HTTP header which should be added to the + // request in order to authenticate against the repository. + string http_authorization_header = 4; } +// FindRemoteRootRefResponse represents the response for the FindRemoteRootRef +// request. message FindRemoteRootRefResponse { + // Ref is the name of the remote root reference. string ref = 1; } diff --git a/ruby/proto/gitaly/remote_pb.rb b/ruby/proto/gitaly/remote_pb.rb index bd5859965..722b34b0c 100644 --- a/ruby/proto/gitaly/remote_pb.rb +++ b/ruby/proto/gitaly/remote_pb.rb @@ -50,6 +50,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do add_message "gitaly.FindRemoteRootRefRequest" do optional :repository, :message, 1, "gitaly.Repository" optional :remote, :string, 2 + optional :remote_url, :string, 3 + optional :http_authorization_header, :string, 4 end add_message "gitaly.FindRemoteRootRefResponse" do optional :ref, :string, 1 diff --git a/ruby/proto/gitaly/remote_services_pb.rb b/ruby/proto/gitaly/remote_services_pb.rb index 93959d0db..90c4abc25 100644 --- a/ruby/proto/gitaly/remote_services_pb.rb +++ b/ruby/proto/gitaly/remote_services_pb.rb @@ -24,6 +24,11 @@ module Gitaly # the patterns specified in the requests. rpc :UpdateRemoteMirror, stream(Gitaly::UpdateRemoteMirrorRequest), Gitaly::UpdateRemoteMirrorResponse rpc :FindRemoteRepository, Gitaly::FindRemoteRepositoryRequest, Gitaly::FindRemoteRepositoryResponse + # FindRemoteRootRef tries to find the root reference of a remote + # repository. The root reference is the default branch as pointed to by + # the remotes HEAD reference. Returns an InvalidArgument error if the + # specified remote does not exist and a NotFound error in case no HEAD + # branch was found. rpc :FindRemoteRootRef, Gitaly::FindRemoteRootRefRequest, Gitaly::FindRemoteRootRefResponse end |