diff --git a/hgitaly/service/ref.py b/hgitaly/service/ref.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zZXJ2aWNlL3JlZi5weQ==..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zZXJ2aWNlL3JlZi5weQ== 100644
--- a/hgitaly/service/ref.py
+++ b/hgitaly/service/ref.py
@@ -73,8 +73,6 @@
     GetTagSignaturesResponse,
     GetTagMessagesRequest,
     GetTagMessagesResponse,
-    PackRefsRequest,
-    PackRefsResponse,
     ListRefsRequest,
     ListRefsResponse,
     FindRefsByOIDRequest,
@@ -420,15 +418,6 @@
         raise NotImplementedError(
             "Not relevant for Mercurial")  # pragma: no cover
 
-    def PackRefs(self, request: PackRefsRequest, context) -> PackRefsResponse:
-        """Not relevant for Mercurial, does nothing.
-        """
-        # repr(Repository) contains newlines
-        logger = LoggerAdapter(base_logger, context)
-        logger.warning("Ignored irrelevant PackRefs request %r",
-                       message.Logging(request))
-        return PackRefsResponse()
-
     def ListRefs(self, request: ListRefsRequest,
                  context) -> ListRefsResponse:
         # The only options actually in use as of GitLab 14.8
diff --git a/hgitaly/service/tests/test_ref.py b/hgitaly/service/tests/test_ref.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zZXJ2aWNlL3Rlc3RzL3Rlc3RfcmVmLnB5..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zZXJ2aWNlL3Rlc3RzL3Rlc3RfcmVmLnB5 100644
--- a/hgitaly/service/tests/test_ref.py
+++ b/hgitaly/service/tests/test_ref.py
@@ -51,8 +51,6 @@
     ListRefsRequest,
     ListTagNamesContainingCommitRequest,
     GetTagMessagesRequest,
-    PackRefsRequest,
-    PackRefsResponse,
     FindTagRequest,
 )
 from hgitaly.stub.ref_pb2_grpc import RefServiceStub
@@ -489,13 +487,6 @@
     assert do_list([tag_hex]) == ["The tag message"]
 
 
-def test_pack_refs(grpc_channel, server_repos_root):
-    ref_stub = RefServiceStub(grpc_channel)
-    wrapper, grpc_repo = make_empty_repo(server_repos_root)
-    resp = ref_stub.PackRefs(PackRefsRequest(repository=grpc_repo))
-    assert resp == PackRefsResponse()
-
-
 def test_list_refs(ref_fixture):
     fixture = ref_fixture
     wrapper = fixture.repo_wrapper
diff --git a/hgitaly/stub/commit_pb2.py b/hgitaly/stub/commit_pb2.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL2NvbW1pdF9wYjIucHk=..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL2NvbW1pdF9wYjIucHk= 100644
--- a/hgitaly/stub/commit_pb2.py
+++ b/hgitaly/stub/commit_pb2.py
@@ -22,7 +22,7 @@
   syntax='proto3',
   serialized_options=b'Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x0c\x63ommit.proto\x12\x06gitaly\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\nlint.proto\x1a\x0cshared.proto\"\xd4\x03\n\x12ListCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\t\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x12/\n\x05order\x18\x04 \x01(\x0e\x32 .gitaly.ListCommitsRequest.Order\x12\x0f\n\x07reverse\x18\x0b \x01(\x08\x12\x13\n\x0bmax_parents\x18\x05 \x01(\r\x12\x14\n\x0c\x64isable_walk\x18\x06 \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x07 \x01(\x08\x12)\n\x05\x61\x66ter\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06\x61uthor\x18\n \x01(\x0c\x12\x13\n\x0bignore_case\x18\x0c \x01(\x08\x12\x1f\n\x17\x63ommit_message_patterns\x18\r \x03(\x0c\"%\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\x12\x08\n\x04\x44\x41TE\x10\x02\"9\n\x13ListCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"}\n\x15ListAllCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x36\n\x11pagination_params\x18\x02 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\"<\n\x16ListAllCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"T\n\x12\x43ommitStatsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"H\n\x13\x43ommitStatsResponse\x12\x0b\n\x03oid\x18\x01 \x01(\t\x12\x11\n\tadditions\x18\x02 \x01(\x05\x12\x11\n\tdeletions\x18\x03 \x01(\x05\"n\n\x17\x43ommitIsAncestorRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0b\x61ncestor_id\x18\x02 \x01(\t\x12\x10\n\x08\x63hild_id\x18\x03 \x01(\t\")\n\x18\x43ommitIsAncestorResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\x81\x01\n\x10TreeEntryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05limit\x18\x04 \x01(\x03\x12\x10\n\x08max_size\x18\x05 \x01(\x03\"\xb5\x01\n\x11TreeEntryResponse\x12\x32\n\x04type\x18\x01 \x01(\x0e\x32$.gitaly.TreeEntryResponse.ObjectType\x12\x0b\n\x03oid\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x0c\n\x04mode\x18\x04 \x01(\x05\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"5\n\nObjectType\x12\n\n\x06\x43OMMIT\x10\x00\x12\x08\n\x04\x42LOB\x10\x01\x12\x08\n\x04TREE\x10\x02\x12\x07\n\x03TAG\x10\x03\"\x9f\x02\n\x13\x43ountCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12)\n\x05\x61\x66ter\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\x11\n\tmax_count\x18\x06 \x01(\x05\x12\x0b\n\x03\x61ll\x18\x07 \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x08 \x01(\x08\x12-\n\x0eglobal_options\x18\t \x01(\x0b\x32\x15.gitaly.GlobalOptions\"%\n\x14\x43ountCommitsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"\x8b\x01\n\x1c\x43ountDivergingCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x66rom\x18\x02 \x01(\x0c\x12\n\n\x02to\x18\x03 \x01(\x0c\x12\x11\n\tmax_count\x18\x07 \x01(\x05J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"H\n\x1d\x43ountDivergingCommitsResponse\x12\x12\n\nleft_count\x18\x01 \x01(\x05\x12\x13\n\x0bright_count\x18\x02 \x01(\x05\"\xc9\x01\n\tTreeEntry\x12\x0b\n\x03oid\x18\x01 \x01(\t\x12\x14\n\x08root_oid\x18\x02 \x01(\tB\x02\x18\x01\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12)\n\x04type\x18\x04 \x01(\x0e\x32\x1b.gitaly.TreeEntry.EntryType\x12\x0c\n\x04mode\x18\x05 \x01(\x05\x12\x12\n\ncommit_oid\x18\x06 \x01(\t\x12\x11\n\tflat_path\x18\x07 \x01(\x0c\"+\n\tEntryType\x12\x08\n\x04\x42LOB\x10\x00\x12\x08\n\x04TREE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x03\"\xa5\x02\n\x15GetTreeEntriesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\x11\n\trecursive\x18\x04 \x01(\x08\x12\x32\n\x04sort\x18\x05 \x01(\x0e\x32$.gitaly.GetTreeEntriesRequest.SortBy\x12\x36\n\x11pagination_params\x18\x06 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x12\x17\n\x0fskip_flat_paths\x18\x07 \x01(\x08\"&\n\x06SortBy\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0f\n\x0bTREES_FIRST\x10\x01\"q\n\x16GetTreeEntriesResponse\x12\"\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x11.gitaly.TreeEntry\x12\x33\n\x11pagination_cursor\x18\x02 \x01(\x0b\x32\x18.gitaly.PaginationCursor\"R\n\x10ListFilesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\"\n\x11ListFilesResponse\x12\r\n\x05paths\x18\x01 \x03(\x0c\"e\n\x11\x46indCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x10\n\x08trailers\x18\x03 \x01(\x08\"7\n\x12\x46indCommitResponse\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\"T\n\x17ListCommitsByOidRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03oid\x18\x02 \x03(\t\">\n\x18ListCommitsByOidResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"^\n\x1bListCommitsByRefNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tref_names\x18\x02 \x03(\x0c\"\xb1\x01\n\x1cListCommitsByRefNameResponse\x12\x46\n\x0b\x63ommit_refs\x18\x02 \x03(\x0b\x32\x31.gitaly.ListCommitsByRefNameResponse.CommitForRef\x1a\x43\n\x0c\x43ommitForRef\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\x12\x10\n\x08ref_name\x18\x02 \x01(\x0cJ\x04\x08\x01\x10\x02\"\xd3\x01\n\x15\x46indAllCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x11\n\tmax_count\x18\x03 \x01(\x05\x12\x0c\n\x04skip\x18\x04 \x01(\x05\x12\x32\n\x05order\x18\x05 \x01(\x0e\x32#.gitaly.FindAllCommitsRequest.Order\"%\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\x12\x08\n\x04\x44\x41TE\x10\x02\"<\n\x16\x46indAllCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"\x90\x04\n\x12\x46indCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\r\n\x05limit\x18\x03 \x01(\x05\x12\x0e\n\x06offset\x18\x04 \x01(\x05\x12\r\n\x05paths\x18\x05 \x03(\x0c\x12\x0e\n\x06\x66ollow\x18\x06 \x01(\x08\x12\x13\n\x0bskip_merges\x18\x07 \x01(\x08\x12\x14\n\x0c\x64isable_walk\x18\x08 \x01(\x08\x12)\n\x05\x61\x66ter\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0b\n\x03\x61ll\x18\x0b \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x0c \x01(\x08\x12\x0e\n\x06\x61uthor\x18\r \x01(\x0c\x12/\n\x05order\x18\x0e \x01(\x0e\x32 .gitaly.FindCommitsRequest.Order\x12-\n\x0eglobal_options\x18\x0f \x01(\x0b\x32\x15.gitaly.GlobalOptions\x12\x10\n\x08trailers\x18\x10 \x01(\x08\x12\x19\n\x11include_shortstat\x18\x11 \x01(\x08\x12\x1d\n\x15include_referenced_by\x18\x12 \x03(\x0c\"\x1b\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\"9\n\x13\x46indCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"X\n\x16\x43ommitLanguagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\xaf\x01\n\x17\x43ommitLanguagesResponse\x12;\n\tlanguages\x18\x01 \x03(\x0b\x32(.gitaly.CommitLanguagesResponse.Language\x1aW\n\x08Language\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05share\x18\x02 \x01(\x02\x12\r\n\x05\x63olor\x18\x03 \x01(\t\x12\r\n\x05\x62ytes\x18\x05 \x01(\x04J\x04\x08\x04\x10\x05R\nfile_count\"n\n\x0fRawBlameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05range\x18\x04 \x01(\x0c\" \n\x10RawBlameResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xb1\x01\n\x18LastCommitForPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\x18\n\x10literal_pathspec\x18\x04 \x01(\x08\x12-\n\x0eglobal_options\x18\x05 \x01(\x0b\x32\x15.gitaly.GlobalOptions\">\n\x19LastCommitForPathResponse\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\"\xd9\x01\n\x1dListLastCommitsForTreeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05limit\x18\x04 \x01(\x05\x12\x0e\n\x06offset\x18\x05 \x01(\x05\x12\x1c\n\x10literal_pathspec\x18\x06 \x01(\x08\x42\x02\x18\x01\x12-\n\x0eglobal_options\x18\x07 \x01(\x0b\x32\x15.gitaly.GlobalOptions\"\xbb\x01\n\x1eListLastCommitsForTreeResponse\x12\x45\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x34.gitaly.ListLastCommitsForTreeResponse.CommitForTree\x1aR\n\rCommitForTree\x12!\n\x06\x63ommit\x18\x02 \x01(\x0b\x32\x11.gitaly.GitCommit\x12\x12\n\npath_bytes\x18\x04 \x01(\x0cJ\x04\x08\x01\x10\x02J\x04\x08\x03\x10\x04\"\xc4\x01\n\x17\x43ommitsByMessageRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\r\n\x05limit\x18\x04 \x01(\x05\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\r\n\x05query\x18\x06 \x01(\t\x12-\n\x0eglobal_options\x18\x07 \x01(\x0b\x32\x15.gitaly.GlobalOptions\">\n\x18\x43ommitsByMessageResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"]\n\x1f\x46ilterShasWithSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04shas\x18\x02 \x03(\x0c\"0\n FilterShasWithSignaturesResponse\x12\x0c\n\x04shas\x18\x01 \x03(\x0c\"`\n\x1d\x45xtractCommitSignatureRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\"H\n\x1e\x45xtractCommitSignatureResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_text\x18\x02 \x01(\x0c\"^\n\x1aGetCommitSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x12\n\ncommit_ids\x18\x02 \x03(\t\"X\n\x1bGetCommitSignaturesResponse\x12\x11\n\tcommit_id\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x13\n\x0bsigned_text\x18\x03 \x01(\x0c\"\\\n\x18GetCommitMessagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x12\n\ncommit_ids\x18\x02 \x03(\t\"?\n\x19GetCommitMessagesResponse\x12\x11\n\tcommit_id\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"[\n\x18\x43heckObjectsExistRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\x0c\"\x96\x01\n\x19\x43heckObjectsExistResponse\x12\x46\n\trevisions\x18\x01 \x03(\x0b\x32\x33.gitaly.CheckObjectsExistResponse.RevisionExistence\x1a\x31\n\x11RevisionExistence\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0e\n\x06\x65xists\x18\x02 \x01(\x08\x32\xf1\x10\n\rCommitService\x12P\n\x0bListCommits\x12\x1a.gitaly.ListCommitsRequest\x1a\x1b.gitaly.ListCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eListAllCommits\x12\x1d.gitaly.ListAllCommitsRequest\x1a\x1e.gitaly.ListAllCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12]\n\x10\x43ommitIsAncestor\x12\x1f.gitaly.CommitIsAncestorRequest\x1a .gitaly.CommitIsAncestorResponse\"\x06\xfa\x97(\x02\x08\x02\x12J\n\tTreeEntry\x12\x18.gitaly.TreeEntryRequest\x1a\x19.gitaly.TreeEntryResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Q\n\x0c\x43ountCommits\x12\x1b.gitaly.CountCommitsRequest\x1a\x1c.gitaly.CountCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x12l\n\x15\x43ountDivergingCommits\x12$.gitaly.CountDivergingCommitsRequest\x1a%.gitaly.CountDivergingCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x12Y\n\x0eGetTreeEntries\x12\x1d.gitaly.GetTreeEntriesRequest\x1a\x1e.gitaly.GetTreeEntriesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12J\n\tListFiles\x12\x18.gitaly.ListFilesRequest\x1a\x19.gitaly.ListFilesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12K\n\nFindCommit\x12\x19.gitaly.FindCommitRequest\x1a\x1a.gitaly.FindCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x12N\n\x0b\x43ommitStats\x12\x1a.gitaly.CommitStatsRequest\x1a\x1b.gitaly.CommitStatsResponse\"\x06\xfa\x97(\x02\x08\x02\x12Y\n\x0e\x46indAllCommits\x12\x1d.gitaly.FindAllCommitsRequest\x1a\x1e.gitaly.FindAllCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x46indCommits\x12\x1a.gitaly.FindCommitsRequest\x1a\x1b.gitaly.FindCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Z\n\x0f\x43ommitLanguages\x12\x1e.gitaly.CommitLanguagesRequest\x1a\x1f.gitaly.CommitLanguagesResponse\"\x06\xfa\x97(\x02\x08\x02\x12G\n\x08RawBlame\x12\x17.gitaly.RawBlameRequest\x1a\x18.gitaly.RawBlameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12`\n\x11LastCommitForPath\x12 .gitaly.LastCommitForPathRequest\x1a!.gitaly.LastCommitForPathResponse\"\x06\xfa\x97(\x02\x08\x02\x12q\n\x16ListLastCommitsForTree\x12%.gitaly.ListLastCommitsForTreeRequest\x1a&.gitaly.ListLastCommitsForTreeResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10\x43ommitsByMessage\x12\x1f.gitaly.CommitsByMessageRequest\x1a .gitaly.CommitsByMessageResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10ListCommitsByOid\x12\x1f.gitaly.ListCommitsByOidRequest\x1a .gitaly.ListCommitsByOidResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12k\n\x14ListCommitsByRefName\x12#.gitaly.ListCommitsByRefNameRequest\x1a$.gitaly.ListCommitsByRefNameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12y\n\x18\x46ilterShasWithSignatures\x12\'.gitaly.FilterShasWithSignaturesRequest\x1a(.gitaly.FilterShasWithSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x12h\n\x13GetCommitSignatures\x12\".gitaly.GetCommitSignaturesRequest\x1a#.gitaly.GetCommitSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11GetCommitMessages\x12 .gitaly.GetCommitMessagesRequest\x1a!.gitaly.GetCommitMessagesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x64\n\x11\x43heckObjectsExist\x12 .gitaly.CheckObjectsExistRequest\x1a!.gitaly.CheckObjectsExistResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
+  serialized_pb=b'\n\x0c\x63ommit.proto\x12\x06gitaly\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\nlint.proto\x1a\x0cshared.proto\"\xd4\x03\n\x12ListCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\t\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x12/\n\x05order\x18\x04 \x01(\x0e\x32 .gitaly.ListCommitsRequest.Order\x12\x0f\n\x07reverse\x18\x0b \x01(\x08\x12\x13\n\x0bmax_parents\x18\x05 \x01(\r\x12\x14\n\x0c\x64isable_walk\x18\x06 \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x07 \x01(\x08\x12)\n\x05\x61\x66ter\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0e\n\x06\x61uthor\x18\n \x01(\x0c\x12\x13\n\x0bignore_case\x18\x0c \x01(\x08\x12\x1f\n\x17\x63ommit_message_patterns\x18\r \x03(\x0c\"%\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\x12\x08\n\x04\x44\x41TE\x10\x02\"9\n\x13ListCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"}\n\x15ListAllCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x36\n\x11pagination_params\x18\x02 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\"<\n\x16ListAllCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"T\n\x12\x43ommitStatsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"H\n\x13\x43ommitStatsResponse\x12\x0b\n\x03oid\x18\x01 \x01(\t\x12\x11\n\tadditions\x18\x02 \x01(\x05\x12\x11\n\tdeletions\x18\x03 \x01(\x05\"n\n\x17\x43ommitIsAncestorRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0b\x61ncestor_id\x18\x02 \x01(\t\x12\x10\n\x08\x63hild_id\x18\x03 \x01(\t\")\n\x18\x43ommitIsAncestorResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\x81\x01\n\x10TreeEntryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05limit\x18\x04 \x01(\x03\x12\x10\n\x08max_size\x18\x05 \x01(\x03\"\xb5\x01\n\x11TreeEntryResponse\x12\x32\n\x04type\x18\x01 \x01(\x0e\x32$.gitaly.TreeEntryResponse.ObjectType\x12\x0b\n\x03oid\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x0c\n\x04mode\x18\x04 \x01(\x05\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"5\n\nObjectType\x12\n\n\x06\x43OMMIT\x10\x00\x12\x08\n\x04\x42LOB\x10\x01\x12\x08\n\x04TREE\x10\x02\x12\x07\n\x03TAG\x10\x03\"\x9f\x02\n\x13\x43ountCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12)\n\x05\x61\x66ter\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\x11\n\tmax_count\x18\x06 \x01(\x05\x12\x0b\n\x03\x61ll\x18\x07 \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x08 \x01(\x08\x12-\n\x0eglobal_options\x18\t \x01(\x0b\x32\x15.gitaly.GlobalOptions\"%\n\x14\x43ountCommitsResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x05\"\x8b\x01\n\x1c\x43ountDivergingCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x66rom\x18\x02 \x01(\x0c\x12\n\n\x02to\x18\x03 \x01(\x0c\x12\x11\n\tmax_count\x18\x07 \x01(\x05J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07\"H\n\x1d\x43ountDivergingCommitsResponse\x12\x12\n\nleft_count\x18\x01 \x01(\x05\x12\x13\n\x0bright_count\x18\x02 \x01(\x05\"\xc3\x01\n\tTreeEntry\x12\x0b\n\x03oid\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12)\n\x04type\x18\x04 \x01(\x0e\x32\x1b.gitaly.TreeEntry.EntryType\x12\x0c\n\x04mode\x18\x05 \x01(\x05\x12\x12\n\ncommit_oid\x18\x06 \x01(\t\x12\x11\n\tflat_path\x18\x07 \x01(\x0c\"+\n\tEntryType\x12\x08\n\x04\x42LOB\x10\x00\x12\x08\n\x04TREE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x03J\x04\x08\x02\x10\x03R\x08root_oid\"\xa5\x02\n\x15GetTreeEntriesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\x11\n\trecursive\x18\x04 \x01(\x08\x12\x32\n\x04sort\x18\x05 \x01(\x0e\x32$.gitaly.GetTreeEntriesRequest.SortBy\x12\x36\n\x11pagination_params\x18\x06 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x12\x17\n\x0fskip_flat_paths\x18\x07 \x01(\x08\"&\n\x06SortBy\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0f\n\x0bTREES_FIRST\x10\x01\"q\n\x16GetTreeEntriesResponse\x12\"\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x11.gitaly.TreeEntry\x12\x33\n\x11pagination_cursor\x18\x02 \x01(\x0b\x32\x18.gitaly.PaginationCursor\"R\n\x10ListFilesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\"\n\x11ListFilesResponse\x12\r\n\x05paths\x18\x01 \x03(\x0c\"e\n\x11\x46indCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x10\n\x08trailers\x18\x03 \x01(\x08\"7\n\x12\x46indCommitResponse\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\"T\n\x17ListCommitsByOidRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03oid\x18\x02 \x03(\t\">\n\x18ListCommitsByOidResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"^\n\x1bListCommitsByRefNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tref_names\x18\x02 \x03(\x0c\"\xb1\x01\n\x1cListCommitsByRefNameResponse\x12\x46\n\x0b\x63ommit_refs\x18\x02 \x03(\x0b\x32\x31.gitaly.ListCommitsByRefNameResponse.CommitForRef\x1a\x43\n\x0c\x43ommitForRef\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\x12\x10\n\x08ref_name\x18\x02 \x01(\x0cJ\x04\x08\x01\x10\x02\"\xd3\x01\n\x15\x46indAllCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x11\n\tmax_count\x18\x03 \x01(\x05\x12\x0c\n\x04skip\x18\x04 \x01(\x05\x12\x32\n\x05order\x18\x05 \x01(\x0e\x32#.gitaly.FindAllCommitsRequest.Order\"%\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\x12\x08\n\x04\x44\x41TE\x10\x02\"<\n\x16\x46indAllCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"\x90\x04\n\x12\x46indCommitsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\r\n\x05limit\x18\x03 \x01(\x05\x12\x0e\n\x06offset\x18\x04 \x01(\x05\x12\r\n\x05paths\x18\x05 \x03(\x0c\x12\x0e\n\x06\x66ollow\x18\x06 \x01(\x08\x12\x13\n\x0bskip_merges\x18\x07 \x01(\x08\x12\x14\n\x0c\x64isable_walk\x18\x08 \x01(\x08\x12)\n\x05\x61\x66ter\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12*\n\x06\x62\x65\x66ore\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0b\n\x03\x61ll\x18\x0b \x01(\x08\x12\x14\n\x0c\x66irst_parent\x18\x0c \x01(\x08\x12\x0e\n\x06\x61uthor\x18\r \x01(\x0c\x12/\n\x05order\x18\x0e \x01(\x0e\x32 .gitaly.FindCommitsRequest.Order\x12-\n\x0eglobal_options\x18\x0f \x01(\x0b\x32\x15.gitaly.GlobalOptions\x12\x10\n\x08trailers\x18\x10 \x01(\x08\x12\x19\n\x11include_shortstat\x18\x11 \x01(\x08\x12\x1d\n\x15include_referenced_by\x18\x12 \x03(\x0c\"\x1b\n\x05Order\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04TOPO\x10\x01\"9\n\x13\x46indCommitsResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"X\n\x16\x43ommitLanguagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\xaf\x01\n\x17\x43ommitLanguagesResponse\x12;\n\tlanguages\x18\x01 \x03(\x0b\x32(.gitaly.CommitLanguagesResponse.Language\x1aW\n\x08Language\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05share\x18\x02 \x01(\x02\x12\r\n\x05\x63olor\x18\x03 \x01(\t\x12\r\n\x05\x62ytes\x18\x05 \x01(\x04J\x04\x08\x04\x10\x05R\nfile_count\"n\n\x0fRawBlameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05range\x18\x04 \x01(\x0c\" \n\x10RawBlameResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xb1\x01\n\x18LastCommitForPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\x18\n\x10literal_pathspec\x18\x04 \x01(\x08\x12-\n\x0eglobal_options\x18\x05 \x01(\x0b\x32\x15.gitaly.GlobalOptions\">\n\x19LastCommitForPathResponse\x12!\n\x06\x63ommit\x18\x01 \x01(\x0b\x32\x11.gitaly.GitCommit\"\xd9\x01\n\x1dListLastCommitsForTreeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\x0c\x12\r\n\x05limit\x18\x04 \x01(\x05\x12\x0e\n\x06offset\x18\x05 \x01(\x05\x12\x1c\n\x10literal_pathspec\x18\x06 \x01(\x08\x42\x02\x18\x01\x12-\n\x0eglobal_options\x18\x07 \x01(\x0b\x32\x15.gitaly.GlobalOptions\"\xbb\x01\n\x1eListLastCommitsForTreeResponse\x12\x45\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x34.gitaly.ListLastCommitsForTreeResponse.CommitForTree\x1aR\n\rCommitForTree\x12!\n\x06\x63ommit\x18\x02 \x01(\x0b\x32\x11.gitaly.GitCommit\x12\x12\n\npath_bytes\x18\x04 \x01(\x0cJ\x04\x08\x01\x10\x02J\x04\x08\x03\x10\x04\"\xc4\x01\n\x17\x43ommitsByMessageRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\x12\x0e\n\x06offset\x18\x03 \x01(\x05\x12\r\n\x05limit\x18\x04 \x01(\x05\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\r\n\x05query\x18\x06 \x01(\t\x12-\n\x0eglobal_options\x18\x07 \x01(\x0b\x32\x15.gitaly.GlobalOptions\">\n\x18\x43ommitsByMessageResponse\x12\"\n\x07\x63ommits\x18\x01 \x03(\x0b\x32\x11.gitaly.GitCommit\"]\n\x1f\x46ilterShasWithSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04shas\x18\x02 \x03(\x0c\"0\n FilterShasWithSignaturesResponse\x12\x0c\n\x04shas\x18\x01 \x03(\x0c\"`\n\x1d\x45xtractCommitSignatureRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\"H\n\x1e\x45xtractCommitSignatureResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_text\x18\x02 \x01(\x0c\"^\n\x1aGetCommitSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x12\n\ncommit_ids\x18\x02 \x03(\t\"X\n\x1bGetCommitSignaturesResponse\x12\x11\n\tcommit_id\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x13\n\x0bsigned_text\x18\x03 \x01(\x0c\"\\\n\x18GetCommitMessagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x12\n\ncommit_ids\x18\x02 \x03(\t\"?\n\x19GetCommitMessagesResponse\x12\x11\n\tcommit_id\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"[\n\x18\x43heckObjectsExistRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\x0c\"\x96\x01\n\x19\x43heckObjectsExistResponse\x12\x46\n\trevisions\x18\x01 \x03(\x0b\x32\x33.gitaly.CheckObjectsExistResponse.RevisionExistence\x1a\x31\n\x11RevisionExistence\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0e\n\x06\x65xists\x18\x02 \x01(\x08\x32\xf1\x10\n\rCommitService\x12P\n\x0bListCommits\x12\x1a.gitaly.ListCommitsRequest\x1a\x1b.gitaly.ListCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eListAllCommits\x12\x1d.gitaly.ListAllCommitsRequest\x1a\x1e.gitaly.ListAllCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12]\n\x10\x43ommitIsAncestor\x12\x1f.gitaly.CommitIsAncestorRequest\x1a .gitaly.CommitIsAncestorResponse\"\x06\xfa\x97(\x02\x08\x02\x12J\n\tTreeEntry\x12\x18.gitaly.TreeEntryRequest\x1a\x19.gitaly.TreeEntryResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Q\n\x0c\x43ountCommits\x12\x1b.gitaly.CountCommitsRequest\x1a\x1c.gitaly.CountCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x12l\n\x15\x43ountDivergingCommits\x12$.gitaly.CountDivergingCommitsRequest\x1a%.gitaly.CountDivergingCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x12Y\n\x0eGetTreeEntries\x12\x1d.gitaly.GetTreeEntriesRequest\x1a\x1e.gitaly.GetTreeEntriesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12J\n\tListFiles\x12\x18.gitaly.ListFilesRequest\x1a\x19.gitaly.ListFilesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12K\n\nFindCommit\x12\x19.gitaly.FindCommitRequest\x1a\x1a.gitaly.FindCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x12N\n\x0b\x43ommitStats\x12\x1a.gitaly.CommitStatsRequest\x1a\x1b.gitaly.CommitStatsResponse\"\x06\xfa\x97(\x02\x08\x02\x12Y\n\x0e\x46indAllCommits\x12\x1d.gitaly.FindAllCommitsRequest\x1a\x1e.gitaly.FindAllCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x46indCommits\x12\x1a.gitaly.FindCommitsRequest\x1a\x1b.gitaly.FindCommitsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Z\n\x0f\x43ommitLanguages\x12\x1e.gitaly.CommitLanguagesRequest\x1a\x1f.gitaly.CommitLanguagesResponse\"\x06\xfa\x97(\x02\x08\x02\x12G\n\x08RawBlame\x12\x17.gitaly.RawBlameRequest\x1a\x18.gitaly.RawBlameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12`\n\x11LastCommitForPath\x12 .gitaly.LastCommitForPathRequest\x1a!.gitaly.LastCommitForPathResponse\"\x06\xfa\x97(\x02\x08\x02\x12q\n\x16ListLastCommitsForTree\x12%.gitaly.ListLastCommitsForTreeRequest\x1a&.gitaly.ListLastCommitsForTreeResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10\x43ommitsByMessage\x12\x1f.gitaly.CommitsByMessageRequest\x1a .gitaly.CommitsByMessageResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10ListCommitsByOid\x12\x1f.gitaly.ListCommitsByOidRequest\x1a .gitaly.ListCommitsByOidResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12k\n\x14ListCommitsByRefName\x12#.gitaly.ListCommitsByRefNameRequest\x1a$.gitaly.ListCommitsByRefNameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12y\n\x18\x46ilterShasWithSignatures\x12\'.gitaly.FilterShasWithSignaturesRequest\x1a(.gitaly.FilterShasWithSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x12h\n\x13GetCommitSignatures\x12\".gitaly.GetCommitSignaturesRequest\x1a#.gitaly.GetCommitSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11GetCommitMessages\x12 .gitaly.GetCommitMessagesRequest\x1a!.gitaly.GetCommitMessagesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x64\n\x11\x43heckObjectsExist\x12 .gitaly.CheckObjectsExistRequest\x1a!.gitaly.CheckObjectsExistResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
   ,
   dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,lint__pb2.DESCRIPTOR,shared__pb2.DESCRIPTOR,])
 
@@ -118,8 +118,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2137,
-  serialized_end=2180,
+  serialized_start=2115,
+  serialized_end=2158,
 )
 _sym_db.RegisterEnumDescriptor(_TREEENTRY_ENTRYTYPE)
 
@@ -143,8 +143,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2438,
-  serialized_end=2476,
+  serialized_start=2432,
+  serialized_end=2470,
 )
 _sym_db.RegisterEnumDescriptor(_GETTREEENTRIESREQUEST_SORTBY)
 
@@ -936,17 +936,10 @@
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='root_oid', full_name='gitaly.TreeEntry.root_oid', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='path', full_name='gitaly.TreeEntry.path', index=2,
+      name='path', full_name='gitaly.TreeEntry.path', index=1,
       number=3, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value=b"",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
@@ -947,13 +940,13 @@
       number=3, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value=b"",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='type', full_name='gitaly.TreeEntry.type', index=3,
+      name='type', full_name='gitaly.TreeEntry.type', index=2,
       number=4, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
@@ -954,13 +947,13 @@
       number=4, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='mode', full_name='gitaly.TreeEntry.mode', index=4,
+      name='mode', full_name='gitaly.TreeEntry.mode', index=3,
       number=5, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
@@ -961,13 +954,13 @@
       number=5, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='commit_oid', full_name='gitaly.TreeEntry.commit_oid', index=5,
+      name='commit_oid', full_name='gitaly.TreeEntry.commit_oid', index=4,
       number=6, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
@@ -968,10 +961,10 @@
       number=6, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
-      name='flat_path', full_name='gitaly.TreeEntry.flat_path', index=6,
+      name='flat_path', full_name='gitaly.TreeEntry.flat_path', index=5,
       number=7, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value=b"",
       message_type=None, enum_type=None, containing_type=None,
@@ -991,7 +984,7 @@
   oneofs=[
   ],
   serialized_start=1979,
-  serialized_end=2180,
+  serialized_end=2174,
 )
 
 
@@ -1065,8 +1058,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2183,
-  serialized_end=2476,
+  serialized_start=2177,
+  serialized_end=2470,
 )
 
 
@@ -1104,8 +1097,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2478,
-  serialized_end=2591,
+  serialized_start=2472,
+  serialized_end=2585,
 )
 
 
@@ -1143,8 +1136,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2593,
-  serialized_end=2675,
+  serialized_start=2587,
+  serialized_end=2669,
 )
 
 
@@ -1175,8 +1168,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2677,
-  serialized_end=2711,
+  serialized_start=2671,
+  serialized_end=2705,
 )
 
 
@@ -1221,8 +1214,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2713,
-  serialized_end=2814,
+  serialized_start=2707,
+  serialized_end=2808,
 )
 
 
@@ -1253,8 +1246,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2816,
-  serialized_end=2871,
+  serialized_start=2810,
+  serialized_end=2865,
 )
 
 
@@ -1292,8 +1285,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2873,
-  serialized_end=2957,
+  serialized_start=2867,
+  serialized_end=2951,
 )
 
 
@@ -1324,8 +1317,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2959,
-  serialized_end=3021,
+  serialized_start=2953,
+  serialized_end=3015,
 )
 
 
@@ -1363,8 +1356,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3023,
-  serialized_end=3117,
+  serialized_start=3017,
+  serialized_end=3111,
 )
 
 
@@ -1402,8 +1395,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3224,
-  serialized_end=3291,
+  serialized_start=3218,
+  serialized_end=3285,
 )
 
 _LISTCOMMITSBYREFNAMERESPONSE = _descriptor.Descriptor(
@@ -1433,8 +1426,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3120,
-  serialized_end=3297,
+  serialized_start=3114,
+  serialized_end=3291,
 )
 
 
@@ -1494,8 +1487,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3300,
-  serialized_end=3511,
+  serialized_start=3294,
+  serialized_end=3505,
 )
 
 
@@ -1526,8 +1519,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3513,
-  serialized_end=3573,
+  serialized_start=3507,
+  serialized_end=3567,
 )
 
 
@@ -1678,8 +1671,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3576,
-  serialized_end=4104,
+  serialized_start=3570,
+  serialized_end=4098,
 )
 
 
@@ -1710,8 +1703,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4106,
-  serialized_end=4163,
+  serialized_start=4100,
+  serialized_end=4157,
 )
 
 
@@ -1749,8 +1742,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4165,
-  serialized_end=4253,
+  serialized_start=4159,
+  serialized_end=4247,
 )
 
 
@@ -1802,8 +1795,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4344,
-  serialized_end=4431,
+  serialized_start=4338,
+  serialized_end=4425,
 )
 
 _COMMITLANGUAGESRESPONSE = _descriptor.Descriptor(
@@ -1833,8 +1826,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4256,
-  serialized_end=4431,
+  serialized_start=4250,
+  serialized_end=4425,
 )
 
 
@@ -1886,8 +1879,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4433,
-  serialized_end=4543,
+  serialized_start=4427,
+  serialized_end=4537,
 )
 
 
@@ -1918,8 +1911,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4545,
-  serialized_end=4577,
+  serialized_start=4539,
+  serialized_end=4571,
 )
 
 
@@ -1978,8 +1971,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4580,
-  serialized_end=4757,
+  serialized_start=4574,
+  serialized_end=4751,
 )
 
 
@@ -2010,8 +2003,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4759,
-  serialized_end=4821,
+  serialized_start=4753,
+  serialized_end=4815,
 )
 
 
@@ -2084,8 +2077,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4824,
-  serialized_end=5041,
+  serialized_start=4818,
+  serialized_end=5035,
 )
 
 
@@ -2123,8 +2116,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5149,
-  serialized_end=5231,
+  serialized_start=5143,
+  serialized_end=5225,
 )
 
 _LISTLASTCOMMITSFORTREERESPONSE = _descriptor.Descriptor(
@@ -2154,8 +2147,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5044,
-  serialized_end=5231,
+  serialized_start=5038,
+  serialized_end=5225,
 )
 
 
@@ -2228,8 +2221,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5234,
-  serialized_end=5430,
+  serialized_start=5228,
+  serialized_end=5424,
 )
 
 
@@ -2260,8 +2253,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5432,
-  serialized_end=5494,
+  serialized_start=5426,
+  serialized_end=5488,
 )
 
 
@@ -2299,8 +2292,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5496,
-  serialized_end=5589,
+  serialized_start=5490,
+  serialized_end=5583,
 )
 
 
@@ -2331,8 +2324,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5591,
-  serialized_end=5639,
+  serialized_start=5585,
+  serialized_end=5633,
 )
 
 
@@ -2370,8 +2363,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5641,
-  serialized_end=5737,
+  serialized_start=5635,
+  serialized_end=5731,
 )
 
 
@@ -2409,8 +2402,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5739,
-  serialized_end=5811,
+  serialized_start=5733,
+  serialized_end=5805,
 )
 
 
@@ -2448,8 +2441,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5813,
-  serialized_end=5907,
+  serialized_start=5807,
+  serialized_end=5901,
 )
 
 
@@ -2494,8 +2487,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5909,
-  serialized_end=5997,
+  serialized_start=5903,
+  serialized_end=5991,
 )
 
 
@@ -2533,8 +2526,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5999,
-  serialized_end=6091,
+  serialized_start=5993,
+  serialized_end=6085,
 )
 
 
@@ -2572,8 +2565,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6093,
-  serialized_end=6156,
+  serialized_start=6087,
+  serialized_end=6150,
 )
 
 
@@ -2611,8 +2604,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6158,
-  serialized_end=6249,
+  serialized_start=6152,
+  serialized_end=6243,
 )
 
 
@@ -2650,8 +2643,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6353,
-  serialized_end=6402,
+  serialized_start=6347,
+  serialized_end=6396,
 )
 
 _CHECKOBJECTSEXISTRESPONSE = _descriptor.Descriptor(
@@ -2681,8 +2674,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6252,
-  serialized_end=6402,
+  serialized_start=6246,
+  serialized_end=6396,
 )
 
 _LISTCOMMITSREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
@@ -3190,7 +3183,6 @@
 _TREEENTRYREQUEST.fields_by_name['repository']._options = None
 _COUNTCOMMITSREQUEST.fields_by_name['repository']._options = None
 _COUNTDIVERGINGCOMMITSREQUEST.fields_by_name['repository']._options = None
-_TREEENTRY.fields_by_name['root_oid']._options = None
 _GETTREEENTRIESREQUEST.fields_by_name['repository']._options = None
 _LISTFILESREQUEST.fields_by_name['repository']._options = None
 _FINDCOMMITREQUEST.fields_by_name['repository']._options = None
@@ -3217,8 +3209,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=6405,
-  serialized_end=8566,
+  serialized_start=6399,
+  serialized_end=8560,
   methods=[
   _descriptor.MethodDescriptor(
     name='ListCommits',
diff --git a/hgitaly/stub/diff_pb2.py b/hgitaly/stub/diff_pb2.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL2RpZmZfcGIyLnB5..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL2RpZmZfcGIyLnB5 100644
--- a/hgitaly/stub/diff_pb2.py
+++ b/hgitaly/stub/diff_pb2.py
@@ -21,7 +21,7 @@
   syntax='proto3',
   serialized_options=b'Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\ndiff.proto\x12\x06gitaly\x1a\nlint.proto\x1a\x0cshared.proto\"\xc3\x06\n\x11\x43ommitDiffRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\x12$\n\x18ignore_whitespace_change\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\r\n\x05paths\x18\x05 \x03(\x0c\x12\x16\n\x0e\x63ollapse_diffs\x18\x06 \x01(\x08\x12\x16\n\x0e\x65nforce_limits\x18\x07 \x01(\x08\x12\x11\n\tmax_files\x18\x08 \x01(\x05\x12\x11\n\tmax_lines\x18\t \x01(\x05\x12\x11\n\tmax_bytes\x18\n \x01(\x05\x12\x17\n\x0fmax_patch_bytes\x18\x0e \x01(\x05\x12\x16\n\x0esafe_max_files\x18\x0b \x01(\x05\x12\x16\n\x0esafe_max_lines\x18\x0c \x01(\x05\x12\x16\n\x0esafe_max_bytes\x18\r \x01(\x05\x12\x35\n\tdiff_mode\x18\x0f \x01(\x0e\x32\".gitaly.CommitDiffRequest.DiffMode\x12h\n\"max_patch_bytes_for_file_extension\x18\x10 \x03(\x0b\x32<.gitaly.CommitDiffRequest.MaxPatchBytesForFileExtensionEntry\x12G\n\x12whitespace_changes\x18\x11 \x01(\x0e\x32+.gitaly.CommitDiffRequest.WhitespaceChanges\x1a\x44\n\"MaxPatchBytesForFileExtensionEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"%\n\x08\x44iffMode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0c\n\x08WORDDIFF\x10\x01\"y\n\x11WhitespaceChanges\x12\"\n\x1eWHITESPACE_CHANGES_UNSPECIFIED\x10\x00\x12\x1d\n\x19WHITESPACE_CHANGES_IGNORE\x10\x01\x12!\n\x1dWHITESPACE_CHANGES_IGNORE_ALL\x10\x02\"\xff\x01\n\x12\x43ommitDiffResponse\x12\x11\n\tfrom_path\x18\x01 \x01(\x0c\x12\x0f\n\x07to_path\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66rom_id\x18\x03 \x01(\t\x12\r\n\x05to_id\x18\x04 \x01(\t\x12\x10\n\x08old_mode\x18\x05 \x01(\x05\x12\x10\n\x08new_mode\x18\x06 \x01(\x05\x12\x0e\n\x06\x62inary\x18\x07 \x01(\x08\x12\x16\n\x0eraw_patch_data\x18\t \x01(\x0c\x12\x14\n\x0c\x65nd_of_patch\x18\n \x01(\x08\x12\x17\n\x0foverflow_marker\x18\x0b \x01(\x08\x12\x11\n\tcollapsed\x18\x0c \x01(\x08\x12\x11\n\ttoo_large\x18\r \x01(\x08J\x04\x08\x08\x10\t\"\x82\x01\n\x12\x43ommitDeltaRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\x12\r\n\x05paths\x18\x04 \x03(\x0c\"u\n\x0b\x43ommitDelta\x12\x11\n\tfrom_path\x18\x01 \x01(\x0c\x12\x0f\n\x07to_path\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66rom_id\x18\x03 \x01(\t\x12\r\n\x05to_id\x18\x04 \x01(\t\x12\x10\n\x08old_mode\x18\x05 \x01(\x05\x12\x10\n\x08new_mode\x18\x06 \x01(\x05\":\n\x13\x43ommitDeltaResponse\x12#\n\x06\x64\x65ltas\x18\x01 \x03(\x0b\x32\x13.gitaly.CommitDelta\"o\n\x0eRawDiffRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\"\x1f\n\x0fRawDiffResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"p\n\x0fRawPatchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\" \n\x10RawPatchResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"q\n\x10\x44iffStatsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\"Q\n\tDiffStats\x12\x0c\n\x04path\x18\x01 \x01(\x0c\x12\x11\n\tadditions\x18\x02 \x01(\x05\x12\x11\n\tdeletions\x18\x03 \x01(\x05\x12\x10\n\x08old_path\x18\x04 \x01(\x0c\"5\n\x11\x44iffStatsResponse\x12 \n\x05stats\x18\x01 \x03(\x0b\x32\x11.gitaly.DiffStats\"\xdc\x03\n\x17\x46indChangedPathsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x07\x63ommits\x18\x02 \x03(\tB\x02\x18\x01\x12\x39\n\x08requests\x18\x03 \x03(\x0b\x32\'.gitaly.FindChangedPathsRequest.Request\x1a\xc2\x02\n\x07Request\x12K\n\x0ctree_request\x18\x01 \x01(\x0b\x32\x33.gitaly.FindChangedPathsRequest.Request.TreeRequestH\x00\x12O\n\x0e\x63ommit_request\x18\x02 \x01(\x0b\x32\x35.gitaly.FindChangedPathsRequest.Request.CommitRequestH\x00\x1a\x46\n\x0bTreeRequest\x12\x1a\n\x12left_tree_revision\x18\x01 \x01(\t\x12\x1b\n\x13right_tree_revision\x18\x02 \x01(\t\x1aI\n\rCommitRequest\x12\x17\n\x0f\x63ommit_revision\x18\x01 \x01(\t\x12\x1f\n\x17parent_commit_revisions\x18\x02 \x03(\tB\x06\n\x04type\"?\n\x18\x46indChangedPathsResponse\x12#\n\x05paths\x18\x01 \x03(\x0b\x32\x14.gitaly.ChangedPaths\"\xba\x01\n\x0c\x43hangedPaths\x12\x0c\n\x04path\x18\x01 \x01(\x0c\x12+\n\x06status\x18\x02 \x01(\x0e\x32\x1b.gitaly.ChangedPaths.Status\x12\x10\n\x08old_mode\x18\x03 \x01(\x05\x12\x10\n\x08new_mode\x18\x04 \x01(\x05\"K\n\x06Status\x12\t\n\x05\x41\x44\x44\x45\x44\x10\x00\x12\x0c\n\x08MODIFIED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\x12\x0f\n\x0bTYPE_CHANGE\x10\x03\x12\n\n\x06\x43OPIED\x10\x04\"m\n\x11GetPatchIDRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x14\n\x0cold_revision\x18\x02 \x01(\x0c\x12\x14\n\x0cnew_revision\x18\x03 \x01(\x0c\"&\n\x12GetPatchIDResponse\x12\x10\n\x08patch_id\x18\x01 \x01(\t2\xb7\x04\n\x0b\x44iffService\x12M\n\nCommitDiff\x12\x19.gitaly.CommitDiffRequest\x1a\x1a.gitaly.CommitDiffResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x43ommitDelta\x12\x1a.gitaly.CommitDeltaRequest\x1a\x1b.gitaly.CommitDeltaResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x44\n\x07RawDiff\x12\x16.gitaly.RawDiffRequest\x1a\x17.gitaly.RawDiffResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12G\n\x08RawPatch\x12\x17.gitaly.RawPatchRequest\x1a\x18.gitaly.RawPatchResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12J\n\tDiffStats\x12\x18.gitaly.DiffStatsRequest\x1a\x19.gitaly.DiffStatsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10\x46indChangedPaths\x12\x1f.gitaly.FindChangedPathsRequest\x1a .gitaly.FindChangedPathsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12K\n\nGetPatchID\x12\x19.gitaly.GetPatchIDRequest\x1a\x1a.gitaly.GetPatchIDResponse\"\x06\xfa\x97(\x02\x08\x02\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
+  serialized_pb=b'\n\ndiff.proto\x12\x06gitaly\x1a\nlint.proto\x1a\x0cshared.proto\"\xc3\x06\n\x11\x43ommitDiffRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\x12$\n\x18ignore_whitespace_change\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\r\n\x05paths\x18\x05 \x03(\x0c\x12\x16\n\x0e\x63ollapse_diffs\x18\x06 \x01(\x08\x12\x16\n\x0e\x65nforce_limits\x18\x07 \x01(\x08\x12\x11\n\tmax_files\x18\x08 \x01(\x05\x12\x11\n\tmax_lines\x18\t \x01(\x05\x12\x11\n\tmax_bytes\x18\n \x01(\x05\x12\x17\n\x0fmax_patch_bytes\x18\x0e \x01(\x05\x12\x16\n\x0esafe_max_files\x18\x0b \x01(\x05\x12\x16\n\x0esafe_max_lines\x18\x0c \x01(\x05\x12\x16\n\x0esafe_max_bytes\x18\r \x01(\x05\x12\x35\n\tdiff_mode\x18\x0f \x01(\x0e\x32\".gitaly.CommitDiffRequest.DiffMode\x12h\n\"max_patch_bytes_for_file_extension\x18\x10 \x03(\x0b\x32<.gitaly.CommitDiffRequest.MaxPatchBytesForFileExtensionEntry\x12G\n\x12whitespace_changes\x18\x11 \x01(\x0e\x32+.gitaly.CommitDiffRequest.WhitespaceChanges\x1a\x44\n\"MaxPatchBytesForFileExtensionEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"%\n\x08\x44iffMode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0c\n\x08WORDDIFF\x10\x01\"y\n\x11WhitespaceChanges\x12\"\n\x1eWHITESPACE_CHANGES_UNSPECIFIED\x10\x00\x12\x1d\n\x19WHITESPACE_CHANGES_IGNORE\x10\x01\x12!\n\x1dWHITESPACE_CHANGES_IGNORE_ALL\x10\x02\"\xff\x01\n\x12\x43ommitDiffResponse\x12\x11\n\tfrom_path\x18\x01 \x01(\x0c\x12\x0f\n\x07to_path\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66rom_id\x18\x03 \x01(\t\x12\r\n\x05to_id\x18\x04 \x01(\t\x12\x10\n\x08old_mode\x18\x05 \x01(\x05\x12\x10\n\x08new_mode\x18\x06 \x01(\x05\x12\x0e\n\x06\x62inary\x18\x07 \x01(\x08\x12\x16\n\x0eraw_patch_data\x18\t \x01(\x0c\x12\x14\n\x0c\x65nd_of_patch\x18\n \x01(\x08\x12\x17\n\x0foverflow_marker\x18\x0b \x01(\x08\x12\x11\n\tcollapsed\x18\x0c \x01(\x08\x12\x11\n\ttoo_large\x18\r \x01(\x08J\x04\x08\x08\x10\t\"\x82\x01\n\x12\x43ommitDeltaRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\x12\r\n\x05paths\x18\x04 \x03(\x0c\"u\n\x0b\x43ommitDelta\x12\x11\n\tfrom_path\x18\x01 \x01(\x0c\x12\x0f\n\x07to_path\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66rom_id\x18\x03 \x01(\t\x12\r\n\x05to_id\x18\x04 \x01(\t\x12\x10\n\x08old_mode\x18\x05 \x01(\x05\x12\x10\n\x08new_mode\x18\x06 \x01(\x05\":\n\x13\x43ommitDeltaResponse\x12#\n\x06\x64\x65ltas\x18\x01 \x03(\x0b\x32\x13.gitaly.CommitDelta\"o\n\x0eRawDiffRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\"\x1f\n\x0fRawDiffResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"p\n\x0fRawPatchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\" \n\x10RawPatchResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"q\n\x10\x44iffStatsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0eleft_commit_id\x18\x02 \x01(\t\x12\x17\n\x0fright_commit_id\x18\x03 \x01(\t\"Q\n\tDiffStats\x12\x0c\n\x04path\x18\x01 \x01(\x0c\x12\x11\n\tadditions\x18\x02 \x01(\x05\x12\x11\n\tdeletions\x18\x03 \x01(\x05\x12\x10\n\x08old_path\x18\x04 \x01(\x0c\"5\n\x11\x44iffStatsResponse\x12 \n\x05stats\x18\x01 \x03(\x0b\x32\x11.gitaly.DiffStats\"\xc4\x05\n\x17\x46indChangedPathsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x07\x63ommits\x18\x02 \x03(\tB\x02\x18\x01\x12\x39\n\x08requests\x18\x03 \x03(\x0b\x32\'.gitaly.FindChangedPathsRequest.Request\x12S\n\x16merge_commit_diff_mode\x18\x04 \x01(\x0e\x32\x33.gitaly.FindChangedPathsRequest.MergeCommitDiffMode\x1a\xc2\x02\n\x07Request\x12K\n\x0ctree_request\x18\x01 \x01(\x0b\x32\x33.gitaly.FindChangedPathsRequest.Request.TreeRequestH\x00\x12O\n\x0e\x63ommit_request\x18\x02 \x01(\x0b\x32\x35.gitaly.FindChangedPathsRequest.Request.CommitRequestH\x00\x1a\x46\n\x0bTreeRequest\x12\x1a\n\x12left_tree_revision\x18\x01 \x01(\t\x12\x1b\n\x13right_tree_revision\x18\x02 \x01(\t\x1aI\n\rCommitRequest\x12\x17\n\x0f\x63ommit_revision\x18\x01 \x01(\t\x12\x1f\n\x17parent_commit_revisions\x18\x02 \x03(\tB\x06\n\x04type\"\x90\x01\n\x13MergeCommitDiffMode\x12&\n\"MERGE_COMMIT_DIFF_MODE_UNSPECIFIED\x10\x00\x12)\n%MERGE_COMMIT_DIFF_MODE_INCLUDE_MERGES\x10\x01\x12&\n\"MERGE_COMMIT_DIFF_MODE_ALL_PARENTS\x10\x02\"?\n\x18\x46indChangedPathsResponse\x12#\n\x05paths\x18\x01 \x03(\x0b\x32\x14.gitaly.ChangedPaths\"\xba\x01\n\x0c\x43hangedPaths\x12\x0c\n\x04path\x18\x01 \x01(\x0c\x12+\n\x06status\x18\x02 \x01(\x0e\x32\x1b.gitaly.ChangedPaths.Status\x12\x10\n\x08old_mode\x18\x03 \x01(\x05\x12\x10\n\x08new_mode\x18\x04 \x01(\x05\"K\n\x06Status\x12\t\n\x05\x41\x44\x44\x45\x44\x10\x00\x12\x0c\n\x08MODIFIED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\x12\x0f\n\x0bTYPE_CHANGE\x10\x03\x12\n\n\x06\x43OPIED\x10\x04\"m\n\x11GetPatchIDRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x14\n\x0cold_revision\x18\x02 \x01(\x0c\x12\x14\n\x0cnew_revision\x18\x03 \x01(\x0c\"&\n\x12GetPatchIDResponse\x12\x10\n\x08patch_id\x18\x01 \x01(\t2\xb7\x04\n\x0b\x44iffService\x12M\n\nCommitDiff\x12\x19.gitaly.CommitDiffRequest\x1a\x1a.gitaly.CommitDiffResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x43ommitDelta\x12\x1a.gitaly.CommitDeltaRequest\x1a\x1b.gitaly.CommitDeltaResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x44\n\x07RawDiff\x12\x16.gitaly.RawDiffRequest\x1a\x17.gitaly.RawDiffResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12G\n\x08RawPatch\x12\x17.gitaly.RawPatchRequest\x1a\x18.gitaly.RawPatchResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12J\n\tDiffStats\x12\x18.gitaly.DiffStatsRequest\x1a\x19.gitaly.DiffStatsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10\x46indChangedPaths\x12\x1f.gitaly.FindChangedPathsRequest\x1a .gitaly.FindChangedPathsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12K\n\nGetPatchID\x12\x19.gitaly.GetPatchIDRequest\x1a\x1a.gitaly.GetPatchIDResponse\"\x06\xfa\x97(\x02\x08\x02\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
   ,
   dependencies=[lint__pb2.DESCRIPTOR,shared__pb2.DESCRIPTOR,])
 
@@ -82,6 +82,36 @@
 )
 _sym_db.RegisterEnumDescriptor(_COMMITDIFFREQUEST_WHITESPACECHANGES)
 
+_FINDCHANGEDPATHSREQUEST_MERGECOMMITDIFFMODE = _descriptor.EnumDescriptor(
+  name='MergeCommitDiffMode',
+  full_name='gitaly.FindChangedPathsRequest.MergeCommitDiffMode',
+  filename=None,
+  file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='MERGE_COMMIT_DIFF_MODE_UNSPECIFIED', index=0, number=0,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='MERGE_COMMIT_DIFF_MODE_INCLUDE_MERGES', index=1, number=1,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='MERGE_COMMIT_DIFF_MODE_ALL_PARENTS', index=2, number=2,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2568,
+  serialized_end=2712,
+)
+_sym_db.RegisterEnumDescriptor(_FINDCHANGEDPATHSREQUEST_MERGECOMMITDIFFMODE)
+
 _CHANGEDPATHS_STATUS = _descriptor.EnumDescriptor(
   name='Status',
   full_name='gitaly.ChangedPaths.Status',
@@ -117,8 +147,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2659,
-  serialized_end=2734,
+  serialized_start=2891,
+  serialized_end=2966,
 )
 _sym_db.RegisterEnumDescriptor(_CHANGEDPATHS_STATUS)
 
@@ -889,8 +919,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2327,
-  serialized_end=2397,
+  serialized_start=2412,
+  serialized_end=2482,
 )
 
 _FINDCHANGEDPATHSREQUEST_REQUEST_COMMITREQUEST = _descriptor.Descriptor(
@@ -927,8 +957,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2399,
-  serialized_end=2472,
+  serialized_start=2484,
+  serialized_end=2557,
 )
 
 _FINDCHANGEDPATHSREQUEST_REQUEST = _descriptor.Descriptor(
@@ -970,8 +1000,8 @@
       create_key=_descriptor._internal_create_key,
     fields=[]),
   ],
-  serialized_start=2158,
-  serialized_end=2480,
+  serialized_start=2243,
+  serialized_end=2565,
 )
 
 _FINDCHANGEDPATHSREQUEST = _descriptor.Descriptor(
@@ -1003,8 +1033,15 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='merge_commit_diff_mode', full_name='gitaly.FindChangedPathsRequest.merge_commit_diff_mode', index=3,
+      number=4, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
   nested_types=[_FINDCHANGEDPATHSREQUEST_REQUEST, ],
   enum_types=[
@@ -1006,8 +1043,9 @@
   ],
   extensions=[
   ],
   nested_types=[_FINDCHANGEDPATHSREQUEST_REQUEST, ],
   enum_types=[
+    _FINDCHANGEDPATHSREQUEST_MERGECOMMITDIFFMODE,
   ],
   serialized_options=None,
   is_extendable=False,
@@ -1016,7 +1054,7 @@
   oneofs=[
   ],
   serialized_start=2004,
-  serialized_end=2480,
+  serialized_end=2712,
 )
 
 
@@ -1047,8 +1085,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2482,
-  serialized_end=2545,
+  serialized_start=2714,
+  serialized_end=2777,
 )
 
 
@@ -1101,8 +1139,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2548,
-  serialized_end=2734,
+  serialized_start=2780,
+  serialized_end=2966,
 )
 
 
@@ -1147,8 +1185,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2736,
-  serialized_end=2845,
+  serialized_start=2968,
+  serialized_end=3077,
 )
 
 
@@ -1179,8 +1217,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2847,
-  serialized_end=2885,
+  serialized_start=3079,
+  serialized_end=3117,
 )
 
 _COMMITDIFFREQUEST_MAXPATCHBYTESFORFILEEXTENSIONENTRY.containing_type = _COMMITDIFFREQUEST
@@ -1209,6 +1247,8 @@
 _FINDCHANGEDPATHSREQUEST_REQUEST.fields_by_name['commit_request'].containing_oneof = _FINDCHANGEDPATHSREQUEST_REQUEST.oneofs_by_name['type']
 _FINDCHANGEDPATHSREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _FINDCHANGEDPATHSREQUEST.fields_by_name['requests'].message_type = _FINDCHANGEDPATHSREQUEST_REQUEST
+_FINDCHANGEDPATHSREQUEST.fields_by_name['merge_commit_diff_mode'].enum_type = _FINDCHANGEDPATHSREQUEST_MERGECOMMITDIFFMODE
+_FINDCHANGEDPATHSREQUEST_MERGECOMMITDIFFMODE.containing_type = _FINDCHANGEDPATHSREQUEST
 _FINDCHANGEDPATHSRESPONSE.fields_by_name['paths'].message_type = _CHANGEDPATHS
 _CHANGEDPATHS.fields_by_name['status'].enum_type = _CHANGEDPATHS_STATUS
 _CHANGEDPATHS_STATUS.containing_type = _CHANGEDPATHS
@@ -1403,8 +1443,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=2888,
-  serialized_end=3455,
+  serialized_start=3120,
+  serialized_end=3687,
   methods=[
   _descriptor.MethodDescriptor(
     name='CommitDiff',
diff --git a/hgitaly/stub/ref_pb2.py b/hgitaly/stub/ref_pb2.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL3JlZl9wYjIucHk=..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL3JlZl9wYjIucHk= 100644
--- a/hgitaly/stub/ref_pb2.py
+++ b/hgitaly/stub/ref_pb2.py
@@ -23,7 +23,7 @@
   syntax='proto3',
   serialized_options=b'Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\tref.proto\x12\x06gitaly\x1a\x0c\x65rrors.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\nlint.proto\x1a\x0cshared.proto\"L\n\x1c\x46indDefaultBranchNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"-\n\x1d\x46indDefaultBranchNameResponse\x12\x0c\n\x04name\x18\x01 \x01(\x0c\"I\n\x19\x46indAllBranchNamesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"+\n\x1a\x46indAllBranchNamesResponse\x12\r\n\x05names\x18\x01 \x03(\x0c\"F\n\x16\x46indAllTagNamesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"(\n\x17\x46indAllTagNamesResponse\x12\r\n\x05names\x18\x01 \x03(\x0c\"\xf1\x01\n\x18\x46indLocalBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x38\n\x07sort_by\x18\x02 \x01(\x0e\x32\'.gitaly.FindLocalBranchesRequest.SortBy\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\"5\n\x06SortBy\x12\x08\n\x04NAME\x10\x00\x12\x0f\n\x0bUPDATED_ASC\x10\x01\x12\x10\n\x0cUPDATED_DESC\x10\x02\"v\n\x19\x46indLocalBranchesResponse\x12\x31\n\x08\x62ranches\x18\x01 \x03(\x0b\x32\x1f.gitaly.FindLocalBranchResponse\x12&\n\x0elocal_branches\x18\x02 \x03(\x0b\x32\x0e.gitaly.Branch\"\xf0\x01\n\x17\x46indLocalBranchResponse\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x16\n\x0e\x63ommit_subject\x18\x03 \x01(\x0c\x12:\n\rcommit_author\x18\x04 \x01(\x0b\x32#.gitaly.FindLocalBranchCommitAuthor\x12=\n\x10\x63ommit_committer\x18\x05 \x01(\x0b\x32#.gitaly.FindLocalBranchCommitAuthor\x12!\n\x06\x63ommit\x18\x06 \x01(\x0b\x32\x11.gitaly.GitCommit\"v\n\x1b\x46indLocalBranchCommitAuthor\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\r\n\x05\x65mail\x18\x02 \x01(\x0c\x12(\n\x04\x64\x61te\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08timezone\x18\x04 \x01(\x0c\"t\n\x16\x46indAllBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0bmerged_only\x18\x02 \x01(\x08\x12\x17\n\x0fmerged_branches\x18\x03 \x03(\x0c\"\x8e\x01\n\x17\x46indAllBranchesResponse\x12\x38\n\x08\x62ranches\x18\x01 \x03(\x0b\x32&.gitaly.FindAllBranchesResponse.Branch\x1a\x39\n\x06\x42ranch\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12!\n\x06target\x18\x02 \x01(\x0b\x32\x11.gitaly.GitCommit\"P\n\x0e\x46indTagRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08tag_name\x18\x02 \x01(\x0c\"+\n\x0f\x46indTagResponse\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.gitaly.Tag\"P\n\x0c\x46indTagError\x12\x37\n\rtag_not_found\x18\x01 \x01(\x0b\x32\x1e.gitaly.ReferenceNotFoundErrorH\x00\x42\x07\n\x05\x65rror\"\xd1\x02\n\x12\x46indAllTagsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x32\n\x07sort_by\x18\x02 \x01(\x0b\x32!.gitaly.FindAllTagsRequest.SortBy\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x1a\xa0\x01\n\x06SortBy\x12\x32\n\x03key\x18\x01 \x01(\x0e\x32%.gitaly.FindAllTagsRequest.SortBy.Key\x12(\n\tdirection\x18\x02 \x01(\x0e\x32\x15.gitaly.SortDirection\"8\n\x03Key\x12\x0b\n\x07REFNAME\x10\x00\x12\x0f\n\x0b\x43REATORDATE\x10\x01\x12\x13\n\x0fVERSION_REFNAME\x10\x02\"0\n\x13\x46indAllTagsResponse\x12\x19\n\x04tags\x18\x01 \x03(\x0b\x32\x0b.gitaly.Tag\"M\n\x10RefExistsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03ref\x18\x02 \x01(\x0c\"\"\n\x11RefExistsResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"f\n\x13\x43reateBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\x12\x13\n\x0bstart_point\x18\x03 \x01(\x0c\"\xbb\x01\n\x14\x43reateBranchResponse\x12\x33\n\x06status\x18\x01 \x01(\x0e\x32#.gitaly.CreateBranchResponse.Status\x12\x1e\n\x06\x62ranch\x18\x02 \x01(\x0b\x32\x0e.gitaly.Branch\"N\n\x06Status\x12\x06\n\x02OK\x10\x00\x12\x0e\n\nERR_EXISTS\x10\x01\x12\x0f\n\x0b\x45RR_INVALID\x10\x02\x12\x1b\n\x17\x45RR_INVALID_START_POINT\x10\x03\"Q\n\x13\x44\x65leteBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\"\x16\n\x14\x44\x65leteBranchResponse\"O\n\x11\x46indBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\"4\n\x12\x46indBranchResponse\x12\x1e\n\x06\x62ranch\x18\x01 \x01(\x0b\x32\x0e.gitaly.Branch\"k\n\x11\x44\x65leteRefsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x1a\n\x12\x65xcept_with_prefix\x18\x02 \x03(\x0c\x12\x0c\n\x04refs\x18\x03 \x03(\x0c\"\'\n\x12\x44\x65leteRefsResponse\x12\x11\n\tgit_error\x18\x01 \x01(\t\"\x8f\x01\n\x0f\x44\x65leteRefsError\x12\x37\n\x0einvalid_format\x18\x01 \x01(\x0b\x32\x1d.gitaly.InvalidRefFormatErrorH\x00\x12:\n\x11references_locked\x18\x02 \x01(\x0b\x32\x1d.gitaly.ReferencesLockedErrorH\x00\x42\x07\n\x05\x65rror\"x\n&ListBranchNamesContainingCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\r\"E\n\'ListBranchNamesContainingCommitResponse\x12\x14\n\x0c\x62ranch_names\x18\x02 \x03(\x0cJ\x04\x08\x01\x10\x02\"u\n#ListTagNamesContainingCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\r\"?\n$ListTagNamesContainingCommitResponse\x12\x11\n\ttag_names\x18\x02 \x03(\x0cJ\x04\x08\x01\x10\x02\"^\n\x17GetTagSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rtag_revisions\x18\x02 \x03(\t\"\xa1\x01\n\x18GetTagSignaturesResponse\x12\x41\n\nsignatures\x18\x01 \x03(\x0b\x32-.gitaly.GetTagSignaturesResponse.TagSignature\x1a\x42\n\x0cTagSignature\x12\x0e\n\x06tag_id\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\"g\n\x15GetTagMessagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0f\n\x07tag_ids\x18\x03 \x03(\tJ\x04\x08\x02\x10\x03R\ttag_names\"I\n\x16GetTagMessagesResponse\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x0e\n\x06tag_id\x18\x03 \x01(\tJ\x04\x08\x01\x10\x02R\x08tag_name\"a\n\x1c\x46indAllRemoteBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0bremote_name\x18\x02 \x01(\t\"A\n\x1d\x46indAllRemoteBranchesResponse\x12 \n\x08\x62ranches\x18\x01 \x03(\x0b\x32\x0e.gitaly.Branch\"O\n\x0fPackRefsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01J\x04\x08\x02\x10\x03R\x08\x61ll_refs\"\x12\n\x10PackRefsResponse\"\xeb\x02\n\x0fListRefsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08patterns\x18\x02 \x03(\x0c\x12\x0c\n\x04head\x18\x03 \x01(\x08\x12/\n\x07sort_by\x18\x04 \x01(\x0b\x32\x1e.gitaly.ListRefsRequest.SortBy\x12\x18\n\x10pointing_at_oids\x18\x05 \x03(\x0c\x12\x11\n\tpeel_tags\x18\x06 \x01(\x08\x1a\xab\x01\n\x06SortBy\x12/\n\x03key\x18\x01 \x01(\x0e\x32\".gitaly.ListRefsRequest.SortBy.Key\x12(\n\tdirection\x18\x02 \x01(\x0e\x32\x15.gitaly.SortDirection\"F\n\x03Key\x12\x0b\n\x07REFNAME\x10\x00\x12\x0f\n\x0b\x43REATORDATE\x10\x01\x12\x0e\n\nAUTHORDATE\x10\x02\x12\x11\n\rCOMMITTERDATE\x10\x03\"\x8c\x01\n\x10ListRefsResponse\x12\x36\n\nreferences\x18\x01 \x03(\x0b\x32\".gitaly.ListRefsResponse.Reference\x1a@\n\tReference\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x15\n\rpeeled_target\x18\x03 \x01(\t\"\x8a\x01\n\x14\x46indRefsByOIDRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03oid\x18\x02 \x01(\t\x12\x14\n\x0cref_patterns\x18\x03 \x03(\t\x12\x12\n\nsort_field\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\r\"%\n\x15\x46indRefsByOIDResponse\x12\x0c\n\x04refs\x18\x01 \x03(\t2\xab\r\n\nRefService\x12l\n\x15\x46indDefaultBranchName\x12$.gitaly.FindDefaultBranchNameRequest\x1a%.gitaly.FindDefaultBranchNameResponse\"\x06\xfa\x97(\x02\x08\x02\x12h\n\x12\x46indAllBranchNames\x12!.gitaly.FindAllBranchNamesRequest\x1a\".gitaly.FindAllBranchNamesResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x0f\x46indAllTagNames\x12\x1e.gitaly.FindAllTagNamesRequest\x1a\x1f.gitaly.FindAllTagNamesResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11\x46indLocalBranches\x12 .gitaly.FindLocalBranchesRequest\x1a!.gitaly.FindLocalBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\\\n\x0f\x46indAllBranches\x12\x1e.gitaly.FindAllBranchesRequest\x1a\x1f.gitaly.FindAllBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x46indAllTags\x12\x1a.gitaly.FindAllTagsRequest\x1a\x1b.gitaly.FindAllTagsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x42\n\x07\x46indTag\x12\x16.gitaly.FindTagRequest\x1a\x17.gitaly.FindTagResponse\"\x06\xfa\x97(\x02\x08\x02\x12n\n\x15\x46indAllRemoteBranches\x12$.gitaly.FindAllRemoteBranchesRequest\x1a%.gitaly.FindAllRemoteBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12H\n\tRefExists\x12\x18.gitaly.RefExistsRequest\x1a\x19.gitaly.RefExistsResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nFindBranch\x12\x19.gitaly.FindBranchRequest\x1a\x1a.gitaly.FindBranchResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nDeleteRefs\x12\x19.gitaly.DeleteRefsRequest\x1a\x1a.gitaly.DeleteRefsResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x8c\x01\n\x1fListBranchNamesContainingCommit\x12..gitaly.ListBranchNamesContainingCommitRequest\x1a/.gitaly.ListBranchNamesContainingCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x83\x01\n\x1cListTagNamesContainingCommit\x12+.gitaly.ListTagNamesContainingCommitRequest\x1a,.gitaly.ListTagNamesContainingCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10GetTagSignatures\x12\x1f.gitaly.GetTagSignaturesRequest\x1a .gitaly.GetTagSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eGetTagMessages\x12\x1d.gitaly.GetTagMessagesRequest\x1a\x1e.gitaly.GetTagMessagesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12H\n\x08PackRefs\x12\x17.gitaly.PackRefsRequest\x1a\x18.gitaly.PackRefsResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12G\n\x08ListRefs\x12\x17.gitaly.ListRefsRequest\x1a\x18.gitaly.ListRefsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12T\n\rFindRefsByOID\x12\x1c.gitaly.FindRefsByOIDRequest\x1a\x1d.gitaly.FindRefsByOIDResponse\"\x06\xfa\x97(\x02\x08\x02\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
+  serialized_pb=b'\n\tref.proto\x12\x06gitaly\x1a\x0c\x65rrors.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\nlint.proto\x1a\x0cshared.proto\"L\n\x1c\x46indDefaultBranchNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"-\n\x1d\x46indDefaultBranchNameResponse\x12\x0c\n\x04name\x18\x01 \x01(\x0c\"I\n\x19\x46indAllBranchNamesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"+\n\x1a\x46indAllBranchNamesResponse\x12\r\n\x05names\x18\x01 \x03(\x0c\"F\n\x16\x46indAllTagNamesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"(\n\x17\x46indAllTagNamesResponse\x12\r\n\x05names\x18\x01 \x03(\x0c\"\xf1\x01\n\x18\x46indLocalBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x38\n\x07sort_by\x18\x02 \x01(\x0e\x32\'.gitaly.FindLocalBranchesRequest.SortBy\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\"5\n\x06SortBy\x12\x08\n\x04NAME\x10\x00\x12\x0f\n\x0bUPDATED_ASC\x10\x01\x12\x10\n\x0cUPDATED_DESC\x10\x02\"v\n\x19\x46indLocalBranchesResponse\x12\x31\n\x08\x62ranches\x18\x01 \x03(\x0b\x32\x1f.gitaly.FindLocalBranchResponse\x12&\n\x0elocal_branches\x18\x02 \x03(\x0b\x32\x0e.gitaly.Branch\"\xf0\x01\n\x17\x46indLocalBranchResponse\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x16\n\x0e\x63ommit_subject\x18\x03 \x01(\x0c\x12:\n\rcommit_author\x18\x04 \x01(\x0b\x32#.gitaly.FindLocalBranchCommitAuthor\x12=\n\x10\x63ommit_committer\x18\x05 \x01(\x0b\x32#.gitaly.FindLocalBranchCommitAuthor\x12!\n\x06\x63ommit\x18\x06 \x01(\x0b\x32\x11.gitaly.GitCommit\"v\n\x1b\x46indLocalBranchCommitAuthor\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\r\n\x05\x65mail\x18\x02 \x01(\x0c\x12(\n\x04\x64\x61te\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x10\n\x08timezone\x18\x04 \x01(\x0c\"t\n\x16\x46indAllBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0bmerged_only\x18\x02 \x01(\x08\x12\x17\n\x0fmerged_branches\x18\x03 \x03(\x0c\"\x8e\x01\n\x17\x46indAllBranchesResponse\x12\x38\n\x08\x62ranches\x18\x01 \x03(\x0b\x32&.gitaly.FindAllBranchesResponse.Branch\x1a\x39\n\x06\x42ranch\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12!\n\x06target\x18\x02 \x01(\x0b\x32\x11.gitaly.GitCommit\"P\n\x0e\x46indTagRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08tag_name\x18\x02 \x01(\x0c\"+\n\x0f\x46indTagResponse\x12\x18\n\x03tag\x18\x01 \x01(\x0b\x32\x0b.gitaly.Tag\"P\n\x0c\x46indTagError\x12\x37\n\rtag_not_found\x18\x01 \x01(\x0b\x32\x1e.gitaly.ReferenceNotFoundErrorH\x00\x42\x07\n\x05\x65rror\"\xd1\x02\n\x12\x46indAllTagsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x32\n\x07sort_by\x18\x02 \x01(\x0b\x32!.gitaly.FindAllTagsRequest.SortBy\x12\x36\n\x11pagination_params\x18\x03 \x01(\x0b\x32\x1b.gitaly.PaginationParameter\x1a\xa0\x01\n\x06SortBy\x12\x32\n\x03key\x18\x01 \x01(\x0e\x32%.gitaly.FindAllTagsRequest.SortBy.Key\x12(\n\tdirection\x18\x02 \x01(\x0e\x32\x15.gitaly.SortDirection\"8\n\x03Key\x12\x0b\n\x07REFNAME\x10\x00\x12\x0f\n\x0b\x43REATORDATE\x10\x01\x12\x13\n\x0fVERSION_REFNAME\x10\x02\"0\n\x13\x46indAllTagsResponse\x12\x19\n\x04tags\x18\x01 \x03(\x0b\x32\x0b.gitaly.Tag\"M\n\x10RefExistsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03ref\x18\x02 \x01(\x0c\"\"\n\x11RefExistsResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"f\n\x13\x43reateBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\x12\x13\n\x0bstart_point\x18\x03 \x01(\x0c\"\xbb\x01\n\x14\x43reateBranchResponse\x12\x33\n\x06status\x18\x01 \x01(\x0e\x32#.gitaly.CreateBranchResponse.Status\x12\x1e\n\x06\x62ranch\x18\x02 \x01(\x0b\x32\x0e.gitaly.Branch\"N\n\x06Status\x12\x06\n\x02OK\x10\x00\x12\x0e\n\nERR_EXISTS\x10\x01\x12\x0f\n\x0b\x45RR_INVALID\x10\x02\x12\x1b\n\x17\x45RR_INVALID_START_POINT\x10\x03\"Q\n\x13\x44\x65leteBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\"\x16\n\x14\x44\x65leteBranchResponse\"O\n\x11\x46indBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04name\x18\x02 \x01(\x0c\"4\n\x12\x46indBranchResponse\x12\x1e\n\x06\x62ranch\x18\x01 \x01(\x0b\x32\x0e.gitaly.Branch\"k\n\x11\x44\x65leteRefsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x1a\n\x12\x65xcept_with_prefix\x18\x02 \x03(\x0c\x12\x0c\n\x04refs\x18\x03 \x03(\x0c\"\'\n\x12\x44\x65leteRefsResponse\x12\x11\n\tgit_error\x18\x01 \x01(\t\"\x8f\x01\n\x0f\x44\x65leteRefsError\x12\x37\n\x0einvalid_format\x18\x01 \x01(\x0b\x32\x1d.gitaly.InvalidRefFormatErrorH\x00\x12:\n\x11references_locked\x18\x02 \x01(\x0b\x32\x1d.gitaly.ReferencesLockedErrorH\x00\x42\x07\n\x05\x65rror\"x\n&ListBranchNamesContainingCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\r\"E\n\'ListBranchNamesContainingCommitResponse\x12\x14\n\x0c\x62ranch_names\x18\x02 \x03(\x0cJ\x04\x08\x01\x10\x02\"u\n#ListTagNamesContainingCommitRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\r\n\x05limit\x18\x03 \x01(\r\"?\n$ListTagNamesContainingCommitResponse\x12\x11\n\ttag_names\x18\x02 \x03(\x0cJ\x04\x08\x01\x10\x02\"^\n\x17GetTagSignaturesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rtag_revisions\x18\x02 \x03(\t\"\xa1\x01\n\x18GetTagSignaturesResponse\x12\x41\n\nsignatures\x18\x01 \x03(\x0b\x32-.gitaly.GetTagSignaturesResponse.TagSignature\x1a\x42\n\x0cTagSignature\x12\x0e\n\x06tag_id\x18\x01 \x01(\t\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\"g\n\x15GetTagMessagesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0f\n\x07tag_ids\x18\x03 \x03(\tJ\x04\x08\x02\x10\x03R\ttag_names\"I\n\x16GetTagMessagesResponse\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x12\x0e\n\x06tag_id\x18\x03 \x01(\tJ\x04\x08\x01\x10\x02R\x08tag_name\"a\n\x1c\x46indAllRemoteBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x13\n\x0bremote_name\x18\x02 \x01(\t\"A\n\x1d\x46indAllRemoteBranchesResponse\x12 \n\x08\x62ranches\x18\x01 \x03(\x0b\x32\x0e.gitaly.Branch\"\xeb\x02\n\x0fListRefsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08patterns\x18\x02 \x03(\x0c\x12\x0c\n\x04head\x18\x03 \x01(\x08\x12/\n\x07sort_by\x18\x04 \x01(\x0b\x32\x1e.gitaly.ListRefsRequest.SortBy\x12\x18\n\x10pointing_at_oids\x18\x05 \x03(\x0c\x12\x11\n\tpeel_tags\x18\x06 \x01(\x08\x1a\xab\x01\n\x06SortBy\x12/\n\x03key\x18\x01 \x01(\x0e\x32\".gitaly.ListRefsRequest.SortBy.Key\x12(\n\tdirection\x18\x02 \x01(\x0e\x32\x15.gitaly.SortDirection\"F\n\x03Key\x12\x0b\n\x07REFNAME\x10\x00\x12\x0f\n\x0b\x43REATORDATE\x10\x01\x12\x0e\n\nAUTHORDATE\x10\x02\x12\x11\n\rCOMMITTERDATE\x10\x03\"\x8c\x01\n\x10ListRefsResponse\x12\x36\n\nreferences\x18\x01 \x03(\x0b\x32\".gitaly.ListRefsResponse.Reference\x1a@\n\tReference\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x15\n\rpeeled_target\x18\x03 \x01(\t\"\x8a\x01\n\x14\x46indRefsByOIDRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03oid\x18\x02 \x01(\t\x12\x14\n\x0cref_patterns\x18\x03 \x03(\t\x12\x12\n\nsort_field\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\r\"%\n\x15\x46indRefsByOIDResponse\x12\x0c\n\x04refs\x18\x01 \x03(\t2\xe1\x0c\n\nRefService\x12l\n\x15\x46indDefaultBranchName\x12$.gitaly.FindDefaultBranchNameRequest\x1a%.gitaly.FindDefaultBranchNameResponse\"\x06\xfa\x97(\x02\x08\x02\x12h\n\x12\x46indAllBranchNames\x12!.gitaly.FindAllBranchNamesRequest\x1a\".gitaly.FindAllBranchNamesResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x0f\x46indAllTagNames\x12\x1e.gitaly.FindAllTagNamesRequest\x1a\x1f.gitaly.FindAllTagNamesResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11\x46indLocalBranches\x12 .gitaly.FindLocalBranchesRequest\x1a!.gitaly.FindLocalBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\\\n\x0f\x46indAllBranches\x12\x1e.gitaly.FindAllBranchesRequest\x1a\x1f.gitaly.FindAllBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12P\n\x0b\x46indAllTags\x12\x1a.gitaly.FindAllTagsRequest\x1a\x1b.gitaly.FindAllTagsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x42\n\x07\x46indTag\x12\x16.gitaly.FindTagRequest\x1a\x17.gitaly.FindTagResponse\"\x06\xfa\x97(\x02\x08\x02\x12n\n\x15\x46indAllRemoteBranches\x12$.gitaly.FindAllRemoteBranchesRequest\x1a%.gitaly.FindAllRemoteBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12H\n\tRefExists\x12\x18.gitaly.RefExistsRequest\x1a\x19.gitaly.RefExistsResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nFindBranch\x12\x19.gitaly.FindBranchRequest\x1a\x1a.gitaly.FindBranchResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nDeleteRefs\x12\x19.gitaly.DeleteRefsRequest\x1a\x1a.gitaly.DeleteRefsResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x8c\x01\n\x1fListBranchNamesContainingCommit\x12..gitaly.ListBranchNamesContainingCommitRequest\x1a/.gitaly.ListBranchNamesContainingCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x83\x01\n\x1cListTagNamesContainingCommit\x12+.gitaly.ListTagNamesContainingCommitRequest\x1a,.gitaly.ListTagNamesContainingCommitResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12_\n\x10GetTagSignatures\x12\x1f.gitaly.GetTagSignaturesRequest\x1a .gitaly.GetTagSignaturesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eGetTagMessages\x12\x1d.gitaly.GetTagMessagesRequest\x1a\x1e.gitaly.GetTagMessagesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12G\n\x08ListRefs\x12\x17.gitaly.ListRefsRequest\x1a\x18.gitaly.ListRefsResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12T\n\rFindRefsByOID\x12\x1c.gitaly.FindRefsByOIDRequest\x1a\x1d.gitaly.FindRefsByOIDResponse\"\x06\xfa\x97(\x02\x08\x02\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
   ,
   dependencies=[errors__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,lint__pb2.DESCRIPTOR,shared__pb2.DESCRIPTOR,])
 
@@ -154,8 +154,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=4367,
-  serialized_end=4437,
+  serialized_start=4266,
+  serialized_end=4336,
 )
 _sym_db.RegisterEnumDescriptor(_LISTREFSREQUEST_SORTBY_KEY)
 
@@ -1734,63 +1734,6 @@
 )
 
 
-_PACKREFSREQUEST = _descriptor.Descriptor(
-  name='PackRefsRequest',
-  full_name='gitaly.PackRefsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.PackRefsRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3972,
-  serialized_end=4051,
-)
-
-
-_PACKREFSRESPONSE = _descriptor.Descriptor(
-  name='PackRefsResponse',
-  full_name='gitaly.PackRefsResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4053,
-  serialized_end=4071,
-)
-
-
 _LISTREFSREQUEST_SORTBY = _descriptor.Descriptor(
   name='SortBy',
   full_name='gitaly.ListRefsRequest.SortBy',
@@ -1826,8 +1769,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4266,
-  serialized_end=4437,
+  serialized_start=4165,
+  serialized_end=4336,
 )
 
 _LISTREFSREQUEST = _descriptor.Descriptor(
@@ -1892,8 +1835,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4074,
-  serialized_end=4437,
+  serialized_start=3973,
+  serialized_end=4336,
 )
 
 
@@ -1938,8 +1881,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4516,
-  serialized_end=4580,
+  serialized_start=4415,
+  serialized_end=4479,
 )
 
 _LISTREFSRESPONSE = _descriptor.Descriptor(
@@ -1969,8 +1912,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4440,
-  serialized_end=4580,
+  serialized_start=4339,
+  serialized_end=4479,
 )
 
 
@@ -2029,8 +1972,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4583,
-  serialized_end=4721,
+  serialized_start=4482,
+  serialized_end=4620,
 )
 
 
@@ -2061,8 +2004,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4723,
-  serialized_end=4760,
+  serialized_start=4622,
+  serialized_end=4659,
 )
 
 _FINDDEFAULTBRANCHNAMEREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
@@ -2121,7 +2064,6 @@
 _GETTAGMESSAGESREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _FINDALLREMOTEBRANCHESREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _FINDALLREMOTEBRANCHESRESPONSE.fields_by_name['branches'].message_type = shared__pb2._BRANCH
-_PACKREFSREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _LISTREFSREQUEST_SORTBY.fields_by_name['key'].enum_type = _LISTREFSREQUEST_SORTBY_KEY
 _LISTREFSREQUEST_SORTBY.fields_by_name['direction'].enum_type = shared__pb2._SORTDIRECTION
 _LISTREFSREQUEST_SORTBY.containing_type = _LISTREFSREQUEST
@@ -2169,8 +2111,6 @@
 DESCRIPTOR.message_types_by_name['GetTagMessagesResponse'] = _GETTAGMESSAGESRESPONSE
 DESCRIPTOR.message_types_by_name['FindAllRemoteBranchesRequest'] = _FINDALLREMOTEBRANCHESREQUEST
 DESCRIPTOR.message_types_by_name['FindAllRemoteBranchesResponse'] = _FINDALLREMOTEBRANCHESRESPONSE
-DESCRIPTOR.message_types_by_name['PackRefsRequest'] = _PACKREFSREQUEST
-DESCRIPTOR.message_types_by_name['PackRefsResponse'] = _PACKREFSRESPONSE
 DESCRIPTOR.message_types_by_name['ListRefsRequest'] = _LISTREFSREQUEST
 DESCRIPTOR.message_types_by_name['ListRefsResponse'] = _LISTREFSRESPONSE
 DESCRIPTOR.message_types_by_name['FindRefsByOIDRequest'] = _FINDREFSBYOIDREQUEST
@@ -2467,20 +2407,6 @@
   })
 _sym_db.RegisterMessage(FindAllRemoteBranchesResponse)
 
-PackRefsRequest = _reflection.GeneratedProtocolMessageType('PackRefsRequest', (_message.Message,), {
-  'DESCRIPTOR' : _PACKREFSREQUEST,
-  '__module__' : 'ref_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.PackRefsRequest)
-  })
-_sym_db.RegisterMessage(PackRefsRequest)
-
-PackRefsResponse = _reflection.GeneratedProtocolMessageType('PackRefsResponse', (_message.Message,), {
-  'DESCRIPTOR' : _PACKREFSRESPONSE,
-  '__module__' : 'ref_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.PackRefsResponse)
-  })
-_sym_db.RegisterMessage(PackRefsResponse)
-
 ListRefsRequest = _reflection.GeneratedProtocolMessageType('ListRefsRequest', (_message.Message,), {
 
   'SortBy' : _reflection.GeneratedProtocolMessageType('SortBy', (_message.Message,), {
@@ -2544,7 +2470,6 @@
 _GETTAGSIGNATURESREQUEST.fields_by_name['repository']._options = None
 _GETTAGMESSAGESREQUEST.fields_by_name['repository']._options = None
 _FINDALLREMOTEBRANCHESREQUEST.fields_by_name['repository']._options = None
-_PACKREFSREQUEST.fields_by_name['repository']._options = None
 _LISTREFSREQUEST.fields_by_name['repository']._options = None
 _FINDREFSBYOIDREQUEST.fields_by_name['repository']._options = None
 
@@ -2555,8 +2480,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=4763,
-  serialized_end=6470,
+  serialized_start=4662,
+  serialized_end=6295,
   methods=[
   _descriptor.MethodDescriptor(
     name='FindDefaultBranchName',
@@ -2709,15 +2634,5 @@
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='PackRefs',
-    full_name='gitaly.RefService.PackRefs',
-    index=15,
-    containing_service=None,
-    input_type=_PACKREFSREQUEST,
-    output_type=_PACKREFSRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
     name='ListRefs',
     full_name='gitaly.RefService.ListRefs',
@@ -2722,6 +2637,6 @@
     name='ListRefs',
     full_name='gitaly.RefService.ListRefs',
-    index=16,
+    index=15,
     containing_service=None,
     input_type=_LISTREFSREQUEST,
     output_type=_LISTREFSRESPONSE,
@@ -2731,7 +2646,7 @@
   _descriptor.MethodDescriptor(
     name='FindRefsByOID',
     full_name='gitaly.RefService.FindRefsByOID',
-    index=17,
+    index=16,
     containing_service=None,
     input_type=_FINDREFSBYOIDREQUEST,
     output_type=_FINDREFSBYOIDRESPONSE,
diff --git a/hgitaly/stub/ref_pb2_grpc.py b/hgitaly/stub/ref_pb2_grpc.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL3JlZl9wYjJfZ3JwYy5weQ==..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL3JlZl9wYjJfZ3JwYy5weQ== 100644
--- a/hgitaly/stub/ref_pb2_grpc.py
+++ b/hgitaly/stub/ref_pb2_grpc.py
@@ -90,11 +90,6 @@
                 request_serializer=ref__pb2.GetTagMessagesRequest.SerializeToString,
                 response_deserializer=ref__pb2.GetTagMessagesResponse.FromString,
                 )
-        self.PackRefs = channel.unary_unary(
-                '/gitaly.RefService/PackRefs',
-                request_serializer=ref__pb2.PackRefsRequest.SerializeToString,
-                response_deserializer=ref__pb2.PackRefsResponse.FromString,
-                )
         self.ListRefs = channel.unary_stream(
                 '/gitaly.RefService/ListRefs',
                 request_serializer=ref__pb2.ListRefsRequest.SerializeToString,
@@ -226,13 +221,6 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def PackRefs(self, request, context):
-        """PackRefs is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
     def ListRefs(self, request, context):
         """ListRefs returns a stream of all references in the repository. By default, pseudo-revisions like HEAD
         will not be returned by this RPC. Any symbolic references will be resolved to the object ID it is
@@ -329,11 +317,6 @@
                     request_deserializer=ref__pb2.GetTagMessagesRequest.FromString,
                     response_serializer=ref__pb2.GetTagMessagesResponse.SerializeToString,
             ),
-            'PackRefs': grpc.unary_unary_rpc_method_handler(
-                    servicer.PackRefs,
-                    request_deserializer=ref__pb2.PackRefsRequest.FromString,
-                    response_serializer=ref__pb2.PackRefsResponse.SerializeToString,
-            ),
             'ListRefs': grpc.unary_stream_rpc_method_handler(
                     servicer.ListRefs,
                     request_deserializer=ref__pb2.ListRefsRequest.FromString,
@@ -611,23 +594,6 @@
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def PackRefs(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RefService/PackRefs',
-            ref__pb2.PackRefsRequest.SerializeToString,
-            ref__pb2.PackRefsResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
     def ListRefs(request,
             target,
             options=(),
diff --git a/hgitaly/stub/repository_pb2.py b/hgitaly/stub/repository_pb2.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL3JlcG9zaXRvcnlfcGIyLnB5..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL3JlcG9zaXRvcnlfcGIyLnB5 100644
--- a/hgitaly/stub/repository_pb2.py
+++ b/hgitaly/stub/repository_pb2.py
@@ -21,9 +21,9 @@
   syntax='proto3',
   serialized_options=b'Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypb',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x10repository.proto\x12\x06gitaly\x1a\nlint.proto\x1a\x0cshared.proto\"G\n\x17RepositoryExistsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"*\n\x18RepositoryExistsResponse\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\"H\n\x18RepackIncrementalRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x1b\n\x19RepackIncrementalResponse\"X\n\x11RepackFullRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rcreate_bitmap\x18\x02 \x01(\x08\"\x14\n\x12RepackFullResponse\"A\n\x11MidxRepackRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x14\n\x12MidxRepackResponse\"k\n\x15GarbageCollectRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rcreate_bitmap\x18\x02 \x01(\x08\x12\r\n\x05prune\x18\x03 \x01(\x08\"\x18\n\x16GarbageCollectResponse\"\xb0\x01\n\x17WriteCommitGraphRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x44\n\rsplitStrategy\x18\x02 \x01(\x0e\x32-.gitaly.WriteCommitGraphRequest.SplitStrategy\"!\n\rSplitStrategy\x12\x10\n\x0cSizeMultiple\x10\x00\"\x1a\n\x18WriteCommitGraphResponse\">\n\x0e\x43leanupRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x11\n\x0f\x43leanupResponse\"E\n\x15RepositorySizeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"&\n\x16RepositorySizeResponse\x12\x0c\n\x04size\x18\x01 \x01(\x03\"C\n\x13ObjectFormatRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"<\n\x14ObjectFormatResponse\x12$\n\x06\x66ormat\x18\x01 \x01(\x0e\x32\x14.gitaly.ObjectFormat\"[\n\x19\x41pplyGitattributesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41pplyGitattributesResponse\"e\n\x12\x46\x65tchBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x13\n\x0bupdate_head\x18\x03 \x01(\x08\"\x15\n\x13\x46\x65tchBundleResponse\"\x82\x02\n\x12\x46\x65tchRemoteRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\x12\x0f\n\x07no_tags\x18\x04 \x01(\x08\x12\x0f\n\x07timeout\x18\x05 \x01(\x05\x12\x0f\n\x07ssh_key\x18\x06 \x01(\t\x12\x13\n\x0bknown_hosts\x18\x07 \x01(\t\x12\x10\n\x08no_prune\x18\t \x01(\x08\x12%\n\rremote_params\x18\n \x01(\x0b\x32\x0e.gitaly.Remote\x12\x1a\n\x12\x63heck_tags_changed\x18\x0b \x01(\x08J\x04\x08\x08\x10\tJ\x04\x08\x02\x10\x03R\x06remote\"+\n\x13\x46\x65tchRemoteResponse\x12\x14\n\x0ctags_changed\x18\x01 \x01(\x08\"\x8c\x01\n\x17\x43reateRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0e\x64\x65\x66\x61ult_branch\x18\x02 \x01(\x0c\x12+\n\robject_format\x18\x03 \x01(\x0e\x32\x14.gitaly.ObjectFormat\"\x1a\n\x18\x43reateRepositoryResponse\"\x99\x02\n\x11GetArchiveRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x0e\n\x06prefix\x18\x03 \x01(\t\x12\x30\n\x06\x66ormat\x18\x04 \x01(\x0e\x32 .gitaly.GetArchiveRequest.Format\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\x0f\n\x07\x65xclude\x18\x06 \x03(\x0c\x12\x12\n\nelide_path\x18\x07 \x01(\x08\x12\x19\n\x11include_lfs_blobs\x18\x08 \x01(\x08\"3\n\x06\x46ormat\x12\x07\n\x03ZIP\x10\x00\x12\x07\n\x03TAR\x10\x01\x12\n\n\x06TAR_GZ\x10\x02\x12\x0b\n\x07TAR_BZ2\x10\x03\"\"\n\x12GetArchiveResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"G\n\x17HasLocalBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\")\n\x18HasLocalBranchesResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\xa2\x01\n\x18\x46\x65tchSourceBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12-\n\x11source_repository\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\x12\x15\n\rsource_branch\x18\x03 \x01(\x0c\x12\x12\n\ntarget_ref\x18\x04 \x01(\x0c\"+\n\x19\x46\x65tchSourceBranchResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\";\n\x0b\x46sckRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x1d\n\x0c\x46sckResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\x0c\"\x89\x01\n\x0fWriteRefRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03ref\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x0c\x12\x14\n\x0cold_revision\x18\x04 \x01(\x0c\x12\r\n\x05\x66orce\x18\x05 \x01(\x08J\x04\x08\x06\x10\x07\"\x18\n\x10WriteRefResponseJ\x04\x08\x01\x10\x02\"W\n\x14\x46indMergeBaseRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\x0c\"%\n\x15\x46indMergeBaseResponse\x12\x0c\n\x04\x62\x61se\x18\x01 \x01(\t\"p\n\x11\x43reateForkRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12-\n\x11source_repository\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\"\x14\n\x12\x43reateForkResponse\"\xbf\x01\n\x1e\x43reateRepositoryFromURLRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x15\n\thttp_host\x18\x03 \x01(\tB\x02\x18\x01\x12!\n\x19http_authorization_header\x18\x04 \x01(\t\x12\x0e\n\x06mirror\x18\x05 \x01(\x08\x12\x18\n\x10resolved_address\x18\x06 \x01(\t\"!\n\x1f\x43reateRepositoryFromURLResponse\"C\n\x13\x43reateBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"$\n\x14\x43reateBundleResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"`\n\x1e\x43reateBundleFromRefListRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08patterns\x18\x02 \x03(\x0c\"/\n\x1f\x43reateBundleFromRefListResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"@\n\x10GetConfigRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"!\n\x11GetConfigResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"W\n\x19RestoreCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"S\n\x15SetCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x1c\n\x1aRestoreCustomHooksResponse\"\x18\n\x16SetCustomHooksResponse\"H\n\x18\x42\x61\x63kupCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"E\n\x15GetCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\")\n\x19\x42\x61\x63kupCustomHooksResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"&\n\x16GetCustomHooksResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"_\n!CreateRepositoryFromBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"$\n\"CreateRepositoryFromBundleResponse\"B\n\x12\x46indLicenseRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x8c\x01\n\x13\x46indLicenseResponse\x12\x1a\n\x12license_short_name\x18\x01 \x01(\t\x12\x14\n\x0clicense_name\x18\x02 \x01(\t\x12\x13\n\x0blicense_url\x18\x03 \x01(\t\x12\x14\n\x0clicense_path\x18\x04 \x01(\t\x12\x18\n\x10license_nickname\x18\x05 \x01(\t\"H\n\x18GetInfoAttributesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"/\n\x19GetInfoAttributesResponse\x12\x12\n\nattributes\x18\x01 \x01(\x0c\"H\n\x18\x43\x61lculateChecksumRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"-\n\x19\x43\x61lculateChecksumResponse\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\"B\n\x12GetSnapshotRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"#\n\x13GetSnapshotResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xa9\x01\n#CreateRepositoryFromSnapshotRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08http_url\x18\x02 \x01(\t\x12\x11\n\thttp_auth\x18\x03 \x01(\t\x12\x15\n\thttp_host\x18\x04 \x01(\tB\x02\x18\x01\x12\x18\n\x10resolved_address\x18\x05 \x01(\t\"&\n$CreateRepositoryFromSnapshotResponse\"p\n\x14GetRawChangesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rfrom_revision\x18\x02 \x01(\t\x12\x13\n\x0bto_revision\x18\x03 \x01(\t\"\xbe\x03\n\x15GetRawChangesResponse\x12<\n\x0braw_changes\x18\x01 \x03(\x0b\x32\'.gitaly.GetRawChangesResponse.RawChange\x1a\xe6\x02\n\tRawChange\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\t\x12\x0c\n\x04size\x18\x02 \x01(\x03\x12\x44\n\toperation\x18\x05 \x01(\x0e\x32\x31.gitaly.GetRawChangesResponse.RawChange.Operation\x12\x15\n\rraw_operation\x18\x06 \x01(\t\x12\x10\n\x08old_mode\x18\x07 \x01(\x05\x12\x10\n\x08new_mode\x18\x08 \x01(\x05\x12\x16\n\x0enew_path_bytes\x18\t \x01(\x0c\x12\x16\n\x0eold_path_bytes\x18\n \x01(\x0c\"i\n\tOperation\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41\x44\x44\x45\x44\x10\x01\x12\n\n\x06\x43OPIED\x10\x02\x12\x0b\n\x07\x44\x45LETED\x10\x03\x12\x0c\n\x08MODIFIED\x10\x04\x12\x0b\n\x07RENAMED\x10\x05\x12\x10\n\x0cTYPE_CHANGED\x10\x06J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05R\x08new_pathR\x08old_path\"\x93\x01\n\x18SearchFilesByNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05query\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\x0c\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\r\x12\x0e\n\x06offset\x18\x06 \x01(\r\"*\n\x19SearchFilesByNameResponse\x12\r\n\x05\x66iles\x18\x01 \x03(\x0c\"\x81\x01\n\x1bSearchFilesByContentRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05query\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\x0c\x12\x18\n\x10\x63hunked_response\x18\x04 \x01(\x08\"Y\n\x1cSearchFilesByContentResponse\x12\x0f\n\x07matches\x18\x01 \x03(\x0c\x12\x12\n\nmatch_data\x18\x02 \x01(\x0c\x12\x14\n\x0c\x65nd_of_match\x18\x03 \x01(\x08\"\x8d\x01\n\x06Remote\x12\x0b\n\x03url\x18\x01 \x01(\t\x12!\n\x19http_authorization_header\x18\x03 \x01(\t\x12\x16\n\x0emirror_refmaps\x18\x04 \x03(\t\x12\x15\n\thttp_host\x18\x05 \x01(\tB\x02\x18\x01\x12\x18\n\x10resolved_address\x18\x06 \x01(\tJ\x04\x08\x02\x10\x03R\x04name\"M\n\x1dGetObjectDirectorySizeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\".\n\x1eGetObjectDirectorySizeResponse\x12\x0c\n\x04size\x18\x01 \x01(\x03\"G\n\x17RemoveRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x1a\n\x18RemoveRepositoryResponse\"^\n\x17RenameRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rrelative_path\x18\x02 \x01(\t\"\x1a\n\x18RenameRepositoryResponse\"n\n\x1aReplicateRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\"\n\x06source\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\"\x1d\n\x1bReplicateRepositoryResponse\"\xdb\x01\n\x19OptimizeRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12<\n\x08strategy\x18\x02 \x01(\x0e\x32*.gitaly.OptimizeRepositoryRequest.Strategy\"R\n\x08Strategy\x12\x18\n\x14STRATEGY_UNSPECIFIED\x10\x00\x12\x18\n\x14STRATEGY_HEURISTICAL\x10\x01\x12\x12\n\x0eSTRATEGY_EAGER\x10\x02\"\x1c\n\x1aOptimizeRepositoryResponse\"N\n\x1ePruneUnreachableObjectsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"!\n\x1fPruneUnreachableObjectsResponse\"P\n\x12SetFullPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x15\n\x13SetFullPathResponse\"?\n\x0f\x46ullPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\" \n\x10\x46ullPathResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"(\n\x10RemoveAllRequest\x12\x14\n\x0cstorage_name\x18\x01 \x01(\t\"\x13\n\x11RemoveAllResponse2\xc0!\n\x11RepositoryService\x12]\n\x10RepositoryExists\x12\x1f.gitaly.RepositoryExistsRequest\x1a .gitaly.RepositoryExistsResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x63\n\x11RepackIncremental\x12 .gitaly.RepackIncrementalRequest\x1a!.gitaly.RepackIncrementalResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12N\n\nRepackFull\x12\x19.gitaly.RepackFullRequest\x1a\x1a.gitaly.RepackFullResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12N\n\nMidxRepack\x12\x19.gitaly.MidxRepackRequest\x1a\x1a.gitaly.MidxRepackResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12Z\n\x0eGarbageCollect\x12\x1d.gitaly.GarbageCollectRequest\x1a\x1e.gitaly.GarbageCollectResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12`\n\x10WriteCommitGraph\x12\x1f.gitaly.WriteCommitGraphRequest\x1a .gitaly.WriteCommitGraphResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12W\n\x0eRepositorySize\x12\x1d.gitaly.RepositorySizeRequest\x1a\x1e.gitaly.RepositorySizeResponse\"\x06\xfa\x97(\x02\x08\x02\x12Q\n\x0cObjectFormat\x12\x1b.gitaly.ObjectFormatRequest\x1a\x1c.gitaly.ObjectFormatResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x63\n\x12\x41pplyGitattributes\x12!.gitaly.ApplyGitattributesRequest\x1a\".gitaly.ApplyGitattributesResponse\"\x06\xfa\x97(\x02\x08\x01\x12N\n\x0b\x46\x65tchRemote\x12\x1a.gitaly.FetchRemoteRequest\x1a\x1b.gitaly.FetchRemoteResponse\"\x06\xfa\x97(\x02\x08\x01\x12]\n\x10\x43reateRepository\x12\x1f.gitaly.CreateRepositoryRequest\x1a .gitaly.CreateRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12M\n\nGetArchive\x12\x19.gitaly.GetArchiveRequest\x1a\x1a.gitaly.GetArchiveResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12]\n\x10HasLocalBranches\x12\x1f.gitaly.HasLocalBranchesRequest\x1a .gitaly.HasLocalBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x12`\n\x11\x46\x65tchSourceBranch\x12 .gitaly.FetchSourceBranchRequest\x1a!.gitaly.FetchSourceBranchResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x39\n\x04\x46sck\x12\x13.gitaly.FsckRequest\x1a\x14.gitaly.FsckResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x45\n\x08WriteRef\x12\x17.gitaly.WriteRefRequest\x1a\x18.gitaly.WriteRefResponse\"\x06\xfa\x97(\x02\x08\x01\x12T\n\rFindMergeBase\x12\x1c.gitaly.FindMergeBaseRequest\x1a\x1d.gitaly.FindMergeBaseResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nCreateFork\x12\x19.gitaly.CreateForkRequest\x1a\x1a.gitaly.CreateForkResponse\"\x06\xfa\x97(\x02\x08\x01\x12r\n\x17\x43reateRepositoryFromURL\x12&.gitaly.CreateRepositoryFromURLRequest\x1a\'.gitaly.CreateRepositoryFromURLResponse\"\x06\xfa\x97(\x02\x08\x01\x12S\n\x0c\x43reateBundle\x12\x1b.gitaly.CreateBundleRequest\x1a\x1c.gitaly.CreateBundleResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12v\n\x17\x43reateBundleFromRefList\x12&.gitaly.CreateBundleFromRefListRequest\x1a\'.gitaly.CreateBundleFromRefListResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x12P\n\x0b\x46\x65tchBundle\x12\x1a.gitaly.FetchBundleRequest\x1a\x1b.gitaly.FetchBundleResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12}\n\x1a\x43reateRepositoryFromBundle\x12).gitaly.CreateRepositoryFromBundleRequest\x1a*.gitaly.CreateRepositoryFromBundleResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12J\n\tGetConfig\x12\x18.gitaly.GetConfigRequest\x1a\x19.gitaly.GetConfigResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12N\n\x0b\x46indLicense\x12\x1a.gitaly.FindLicenseRequest\x1a\x1b.gitaly.FindLicenseResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x62\n\x11GetInfoAttributes\x12 .gitaly.GetInfoAttributesRequest\x1a!.gitaly.GetInfoAttributesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12`\n\x11\x43\x61lculateChecksum\x12 .gitaly.CalculateChecksumRequest\x1a!.gitaly.CalculateChecksumResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x45\n\x07\x43leanup\x12\x16.gitaly.CleanupRequest\x1a\x17.gitaly.CleanupResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x03\x12P\n\x0bGetSnapshot\x12\x1a.gitaly.GetSnapshotRequest\x1a\x1b.gitaly.GetSnapshotResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x81\x01\n\x1c\x43reateRepositoryFromSnapshot\x12+.gitaly.CreateRepositoryFromSnapshotRequest\x1a,.gitaly.CreateRepositoryFromSnapshotResponse\"\x06\xfa\x97(\x02\x08\x01\x12V\n\rGetRawChanges\x12\x1c.gitaly.GetRawChangesRequest\x1a\x1d.gitaly.GetRawChangesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12k\n\x14SearchFilesByContent\x12#.gitaly.SearchFilesByContentRequest\x1a$.gitaly.SearchFilesByContentResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11SearchFilesByName\x12 .gitaly.SearchFilesByNameRequest\x1a!.gitaly.SearchFilesByNameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12h\n\x12RestoreCustomHooks\x12!.gitaly.RestoreCustomHooksRequest\x1a\".gitaly.RestoreCustomHooksResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x01(\x01\x12Y\n\x0eSetCustomHooks\x12\x1d.gitaly.SetCustomHooksRequest\x1a\x1e.gitaly.SetCustomHooksResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12\x65\n\x11\x42\x61\x63kupCustomHooks\x12 .gitaly.BackupCustomHooksRequest\x1a!.gitaly.BackupCustomHooksResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eGetCustomHooks\x12\x1d.gitaly.GetCustomHooksRequest\x1a\x1e.gitaly.GetCustomHooksResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12o\n\x16GetObjectDirectorySize\x12%.gitaly.GetObjectDirectorySizeRequest\x1a&.gitaly.GetObjectDirectorySizeResponse\"\x06\xfa\x97(\x02\x08\x02\x12]\n\x10RemoveRepository\x12\x1f.gitaly.RemoveRepositoryRequest\x1a .gitaly.RemoveRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12]\n\x10RenameRepository\x12\x1f.gitaly.RenameRepositoryRequest\x1a .gitaly.RenameRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x66\n\x13ReplicateRepository\x12\".gitaly.ReplicateRepositoryRequest\x1a#.gitaly.ReplicateRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x63\n\x12OptimizeRepository\x12!.gitaly.OptimizeRepositoryRequest\x1a\".gitaly.OptimizeRepositoryResponse\"\x06\xfa\x97(\x02\x08\x03\x12r\n\x17PruneUnreachableObjects\x12&.gitaly.PruneUnreachableObjectsRequest\x1a\'.gitaly.PruneUnreachableObjectsResponse\"\x06\xfa\x97(\x02\x08\x03\x12Q\n\x0bSetFullPath\x12\x1a.gitaly.SetFullPathRequest\x1a\x1b.gitaly.SetFullPathResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x01\x12H\n\x08\x46ullPath\x12\x17.gitaly.FullPathRequest\x1a\x18.gitaly.FullPathResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x12\x46\n\tRemoveAll\x12\x18.gitaly.RemoveAllRequest\x1a\x19.gitaly.RemoveAllResponse\"\x04\x80\x98(\x01\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
+  serialized_pb=b'\n\x10repository.proto\x12\x06gitaly\x1a\nlint.proto\x1a\x0cshared.proto\"G\n\x17RepositoryExistsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"*\n\x18RepositoryExistsResponse\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\"E\n\x15RepositorySizeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"&\n\x16RepositorySizeResponse\x12\x0c\n\x04size\x18\x01 \x01(\x03\"E\n\x15RepositoryInfoRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\xbb\x02\n\x16RepositoryInfoResponse\x12\x0c\n\x04size\x18\x01 \x01(\x04\x12\x41\n\nreferences\x18\x02 \x01(\x0b\x32-.gitaly.RepositoryInfoResponse.ReferencesInfo\x12;\n\x07objects\x18\x03 \x01(\x0b\x32*.gitaly.RepositoryInfoResponse.ObjectsInfo\x1a:\n\x0eReferencesInfo\x12\x13\n\x0bloose_count\x18\x01 \x01(\x04\x12\x13\n\x0bpacked_size\x18\x02 \x01(\x04\x1aW\n\x0bObjectsInfo\x12\x0c\n\x04size\x18\x01 \x01(\x04\x12\x13\n\x0brecent_size\x18\x02 \x01(\x04\x12\x12\n\nstale_size\x18\x03 \x01(\x04\x12\x11\n\tkeep_size\x18\x04 \x01(\x04\"C\n\x13ObjectFormatRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"<\n\x14ObjectFormatResponse\x12$\n\x06\x66ormat\x18\x01 \x01(\x0e\x32\x14.gitaly.ObjectFormat\"[\n\x19\x41pplyGitattributesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08revision\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41pplyGitattributesResponse\"e\n\x12\x46\x65tchBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x13\n\x0bupdate_head\x18\x03 \x01(\x08\"\x15\n\x13\x46\x65tchBundleResponse\"\x82\x02\n\x12\x46\x65tchRemoteRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05\x66orce\x18\x03 \x01(\x08\x12\x0f\n\x07no_tags\x18\x04 \x01(\x08\x12\x0f\n\x07timeout\x18\x05 \x01(\x05\x12\x0f\n\x07ssh_key\x18\x06 \x01(\t\x12\x13\n\x0bknown_hosts\x18\x07 \x01(\t\x12\x10\n\x08no_prune\x18\t \x01(\x08\x12%\n\rremote_params\x18\n \x01(\x0b\x32\x0e.gitaly.Remote\x12\x1a\n\x12\x63heck_tags_changed\x18\x0b \x01(\x08J\x04\x08\x08\x10\tJ\x04\x08\x02\x10\x03R\x06remote\"+\n\x13\x46\x65tchRemoteResponse\x12\x14\n\x0ctags_changed\x18\x01 \x01(\x08\"\x8c\x01\n\x17\x43reateRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x16\n\x0e\x64\x65\x66\x61ult_branch\x18\x02 \x01(\x0c\x12+\n\robject_format\x18\x03 \x01(\x0e\x32\x14.gitaly.ObjectFormat\"\x1a\n\x18\x43reateRepositoryResponse\"\x99\x02\n\x11GetArchiveRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x0e\n\x06prefix\x18\x03 \x01(\t\x12\x30\n\x06\x66ormat\x18\x04 \x01(\x0e\x32 .gitaly.GetArchiveRequest.Format\x12\x0c\n\x04path\x18\x05 \x01(\x0c\x12\x0f\n\x07\x65xclude\x18\x06 \x03(\x0c\x12\x12\n\nelide_path\x18\x07 \x01(\x08\x12\x19\n\x11include_lfs_blobs\x18\x08 \x01(\x08\"3\n\x06\x46ormat\x12\x07\n\x03ZIP\x10\x00\x12\x07\n\x03TAR\x10\x01\x12\n\n\x06TAR_GZ\x10\x02\x12\x0b\n\x07TAR_BZ2\x10\x03\"\"\n\x12GetArchiveResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"G\n\x17HasLocalBranchesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\")\n\x18HasLocalBranchesResponse\x12\r\n\x05value\x18\x01 \x01(\x08\"\xa2\x01\n\x18\x46\x65tchSourceBranchRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12-\n\x11source_repository\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\x12\x15\n\rsource_branch\x18\x03 \x01(\x0c\x12\x12\n\ntarget_ref\x18\x04 \x01(\x0c\"+\n\x19\x46\x65tchSourceBranchResponse\x12\x0e\n\x06result\x18\x01 \x01(\x08\";\n\x0b\x46sckRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x1d\n\x0c\x46sckResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\x0c\"\x89\x01\n\x0fWriteRefRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03ref\x18\x02 \x01(\x0c\x12\x10\n\x08revision\x18\x03 \x01(\x0c\x12\x14\n\x0cold_revision\x18\x04 \x01(\x0c\x12\r\n\x05\x66orce\x18\x05 \x01(\x08J\x04\x08\x06\x10\x07\"\x18\n\x10WriteRefResponseJ\x04\x08\x01\x10\x02\"W\n\x14\x46indMergeBaseRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x11\n\trevisions\x18\x02 \x03(\x0c\"%\n\x15\x46indMergeBaseResponse\x12\x0c\n\x04\x62\x61se\x18\x01 \x01(\t\"p\n\x11\x43reateForkRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12-\n\x11source_repository\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\"\x14\n\x12\x43reateForkResponse\"\xbf\x01\n\x1e\x43reateRepositoryFromURLRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x15\n\thttp_host\x18\x03 \x01(\tB\x02\x18\x01\x12!\n\x19http_authorization_header\x18\x04 \x01(\t\x12\x0e\n\x06mirror\x18\x05 \x01(\x08\x12\x18\n\x10resolved_address\x18\x06 \x01(\t\"!\n\x1f\x43reateRepositoryFromURLResponse\"C\n\x13\x43reateBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"$\n\x14\x43reateBundleResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"`\n\x1e\x43reateBundleFromRefListRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08patterns\x18\x02 \x03(\x0c\"/\n\x1f\x43reateBundleFromRefListResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"@\n\x10GetConfigRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"!\n\x11GetConfigResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"W\n\x19RestoreCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"S\n\x15SetCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x1c\n\x1aRestoreCustomHooksResponse\"\x18\n\x16SetCustomHooksResponse\"H\n\x18\x42\x61\x63kupCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"E\n\x15GetCustomHooksRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\")\n\x19\x42\x61\x63kupCustomHooksResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"&\n\x16GetCustomHooksResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"_\n!CreateRepositoryFromBundleRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"$\n\"CreateRepositoryFromBundleResponse\"B\n\x12\x46indLicenseRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x8c\x01\n\x13\x46indLicenseResponse\x12\x1a\n\x12license_short_name\x18\x01 \x01(\t\x12\x14\n\x0clicense_name\x18\x02 \x01(\t\x12\x13\n\x0blicense_url\x18\x03 \x01(\t\x12\x14\n\x0clicense_path\x18\x04 \x01(\t\x12\x18\n\x10license_nickname\x18\x05 \x01(\t\"H\n\x18GetInfoAttributesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"/\n\x19GetInfoAttributesResponse\x12\x12\n\nattributes\x18\x01 \x01(\x0c\"H\n\x18\x43\x61lculateChecksumRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"-\n\x19\x43\x61lculateChecksumResponse\x12\x10\n\x08\x63hecksum\x18\x01 \x01(\t\"B\n\x12GetSnapshotRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"#\n\x13GetSnapshotResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xa9\x01\n#CreateRepositoryFromSnapshotRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x10\n\x08http_url\x18\x02 \x01(\t\x12\x11\n\thttp_auth\x18\x03 \x01(\t\x12\x15\n\thttp_host\x18\x04 \x01(\tB\x02\x18\x01\x12\x18\n\x10resolved_address\x18\x05 \x01(\t\"&\n$CreateRepositoryFromSnapshotResponse\"p\n\x14GetRawChangesRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rfrom_revision\x18\x02 \x01(\t\x12\x13\n\x0bto_revision\x18\x03 \x01(\t\"\xbe\x03\n\x15GetRawChangesResponse\x12<\n\x0braw_changes\x18\x01 \x03(\x0b\x32\'.gitaly.GetRawChangesResponse.RawChange\x1a\xe6\x02\n\tRawChange\x12\x0f\n\x07\x62lob_id\x18\x01 \x01(\t\x12\x0c\n\x04size\x18\x02 \x01(\x03\x12\x44\n\toperation\x18\x05 \x01(\x0e\x32\x31.gitaly.GetRawChangesResponse.RawChange.Operation\x12\x15\n\rraw_operation\x18\x06 \x01(\t\x12\x10\n\x08old_mode\x18\x07 \x01(\x05\x12\x10\n\x08new_mode\x18\x08 \x01(\x05\x12\x16\n\x0enew_path_bytes\x18\t \x01(\x0c\x12\x16\n\x0eold_path_bytes\x18\n \x01(\x0c\"i\n\tOperation\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05\x41\x44\x44\x45\x44\x10\x01\x12\n\n\x06\x43OPIED\x10\x02\x12\x0b\n\x07\x44\x45LETED\x10\x03\x12\x0c\n\x08MODIFIED\x10\x04\x12\x0b\n\x07RENAMED\x10\x05\x12\x10\n\x0cTYPE_CHANGED\x10\x06J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05R\x08new_pathR\x08old_path\"\x93\x01\n\x18SearchFilesByNameRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05query\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\x0c\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\r\x12\x0e\n\x06offset\x18\x06 \x01(\r\"*\n\x19SearchFilesByNameResponse\x12\r\n\x05\x66iles\x18\x01 \x03(\x0c\"\x81\x01\n\x1bSearchFilesByContentRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\r\n\x05query\x18\x02 \x01(\t\x12\x0b\n\x03ref\x18\x03 \x01(\x0c\x12\x18\n\x10\x63hunked_response\x18\x04 \x01(\x08\"Y\n\x1cSearchFilesByContentResponse\x12\x0f\n\x07matches\x18\x01 \x03(\x0c\x12\x12\n\nmatch_data\x18\x02 \x01(\x0c\x12\x14\n\x0c\x65nd_of_match\x18\x03 \x01(\x08\"\x8d\x01\n\x06Remote\x12\x0b\n\x03url\x18\x01 \x01(\t\x12!\n\x19http_authorization_header\x18\x03 \x01(\t\x12\x16\n\x0emirror_refmaps\x18\x04 \x03(\t\x12\x15\n\thttp_host\x18\x05 \x01(\tB\x02\x18\x01\x12\x18\n\x10resolved_address\x18\x06 \x01(\tJ\x04\x08\x02\x10\x03R\x04name\"M\n\x1dGetObjectDirectorySizeRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\".\n\x1eGetObjectDirectorySizeResponse\x12\x0c\n\x04size\x18\x01 \x01(\x03\"G\n\x17RemoveRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"\x1a\n\x18RemoveRepositoryResponse\"^\n\x17RenameRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x15\n\rrelative_path\x18\x02 \x01(\t\"\x1a\n\x18RenameRepositoryResponse\"n\n\x1aReplicateRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\"\n\x06source\x18\x02 \x01(\x0b\x32\x12.gitaly.Repository\"\x1d\n\x1bReplicateRepositoryResponse\"\xdb\x01\n\x19OptimizeRepositoryRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12<\n\x08strategy\x18\x02 \x01(\x0e\x32*.gitaly.OptimizeRepositoryRequest.Strategy\"R\n\x08Strategy\x12\x18\n\x14STRATEGY_UNSPECIFIED\x10\x00\x12\x18\n\x14STRATEGY_HEURISTICAL\x10\x01\x12\x12\n\x0eSTRATEGY_EAGER\x10\x02\"\x1c\n\x1aOptimizeRepositoryResponse\"N\n\x1ePruneUnreachableObjectsRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\"!\n\x1fPruneUnreachableObjectsResponse\"P\n\x12SetFullPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x15\n\x13SetFullPathResponse\"?\n\x0f\x46ullPathRequest\x12,\n\nrepository\x18\x01 \x01(\x0b\x32\x12.gitaly.RepositoryB\x04\x98\xc6,\x01\" \n\x10\x46ullPathResponse\x12\x0c\n\x04path\x18\x01 \x01(\t\"(\n\x10RemoveAllRequest\x12\x14\n\x0cstorage_name\x18\x01 \x01(\t\"\x13\n\x11RemoveAllResponse2\x8f\x1e\n\x11RepositoryService\x12]\n\x10RepositoryExists\x12\x1f.gitaly.RepositoryExistsRequest\x1a .gitaly.RepositoryExistsResponse\"\x06\xfa\x97(\x02\x08\x02\x12W\n\x0eRepositorySize\x12\x1d.gitaly.RepositorySizeRequest\x1a\x1e.gitaly.RepositorySizeResponse\"\x06\xfa\x97(\x02\x08\x02\x12W\n\x0eRepositoryInfo\x12\x1d.gitaly.RepositoryInfoRequest\x1a\x1e.gitaly.RepositoryInfoResponse\"\x06\xfa\x97(\x02\x08\x02\x12Q\n\x0cObjectFormat\x12\x1b.gitaly.ObjectFormatRequest\x1a\x1c.gitaly.ObjectFormatResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x63\n\x12\x41pplyGitattributes\x12!.gitaly.ApplyGitattributesRequest\x1a\".gitaly.ApplyGitattributesResponse\"\x06\xfa\x97(\x02\x08\x01\x12N\n\x0b\x46\x65tchRemote\x12\x1a.gitaly.FetchRemoteRequest\x1a\x1b.gitaly.FetchRemoteResponse\"\x06\xfa\x97(\x02\x08\x01\x12]\n\x10\x43reateRepository\x12\x1f.gitaly.CreateRepositoryRequest\x1a .gitaly.CreateRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12M\n\nGetArchive\x12\x19.gitaly.GetArchiveRequest\x1a\x1a.gitaly.GetArchiveResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12]\n\x10HasLocalBranches\x12\x1f.gitaly.HasLocalBranchesRequest\x1a .gitaly.HasLocalBranchesResponse\"\x06\xfa\x97(\x02\x08\x02\x12`\n\x11\x46\x65tchSourceBranch\x12 .gitaly.FetchSourceBranchRequest\x1a!.gitaly.FetchSourceBranchResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x39\n\x04\x46sck\x12\x13.gitaly.FsckRequest\x1a\x14.gitaly.FsckResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x45\n\x08WriteRef\x12\x17.gitaly.WriteRefRequest\x1a\x18.gitaly.WriteRefResponse\"\x06\xfa\x97(\x02\x08\x01\x12T\n\rFindMergeBase\x12\x1c.gitaly.FindMergeBaseRequest\x1a\x1d.gitaly.FindMergeBaseResponse\"\x06\xfa\x97(\x02\x08\x02\x12K\n\nCreateFork\x12\x19.gitaly.CreateForkRequest\x1a\x1a.gitaly.CreateForkResponse\"\x06\xfa\x97(\x02\x08\x01\x12r\n\x17\x43reateRepositoryFromURL\x12&.gitaly.CreateRepositoryFromURLRequest\x1a\'.gitaly.CreateRepositoryFromURLResponse\"\x06\xfa\x97(\x02\x08\x01\x12S\n\x0c\x43reateBundle\x12\x1b.gitaly.CreateBundleRequest\x1a\x1c.gitaly.CreateBundleResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12v\n\x17\x43reateBundleFromRefList\x12&.gitaly.CreateBundleFromRefListRequest\x1a\'.gitaly.CreateBundleFromRefListResponse\"\x06\xfa\x97(\x02\x08\x02(\x01\x30\x01\x12P\n\x0b\x46\x65tchBundle\x12\x1a.gitaly.FetchBundleRequest\x1a\x1b.gitaly.FetchBundleResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12}\n\x1a\x43reateRepositoryFromBundle\x12).gitaly.CreateRepositoryFromBundleRequest\x1a*.gitaly.CreateRepositoryFromBundleResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12J\n\tGetConfig\x12\x18.gitaly.GetConfigRequest\x1a\x19.gitaly.GetConfigResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12N\n\x0b\x46indLicense\x12\x1a.gitaly.FindLicenseRequest\x1a\x1b.gitaly.FindLicenseResponse\"\x06\xfa\x97(\x02\x08\x02\x12\x62\n\x11GetInfoAttributes\x12 .gitaly.GetInfoAttributesRequest\x1a!.gitaly.GetInfoAttributesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12`\n\x11\x43\x61lculateChecksum\x12 .gitaly.CalculateChecksumRequest\x1a!.gitaly.CalculateChecksumResponse\"\x06\xfa\x97(\x02\x08\x02\x12P\n\x0bGetSnapshot\x12\x1a.gitaly.GetSnapshotRequest\x1a\x1b.gitaly.GetSnapshotResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x81\x01\n\x1c\x43reateRepositoryFromSnapshot\x12+.gitaly.CreateRepositoryFromSnapshotRequest\x1a,.gitaly.CreateRepositoryFromSnapshotResponse\"\x06\xfa\x97(\x02\x08\x01\x12V\n\rGetRawChanges\x12\x1c.gitaly.GetRawChangesRequest\x1a\x1d.gitaly.GetRawChangesResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12k\n\x14SearchFilesByContent\x12#.gitaly.SearchFilesByContentRequest\x1a$.gitaly.SearchFilesByContentResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12\x62\n\x11SearchFilesByName\x12 .gitaly.SearchFilesByNameRequest\x1a!.gitaly.SearchFilesByNameResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12h\n\x12RestoreCustomHooks\x12!.gitaly.RestoreCustomHooksRequest\x1a\".gitaly.RestoreCustomHooksResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x01(\x01\x12Y\n\x0eSetCustomHooks\x12\x1d.gitaly.SetCustomHooksRequest\x1a\x1e.gitaly.SetCustomHooksResponse\"\x06\xfa\x97(\x02\x08\x01(\x01\x12\x65\n\x11\x42\x61\x63kupCustomHooks\x12 .gitaly.BackupCustomHooksRequest\x1a!.gitaly.BackupCustomHooksResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x30\x01\x12Y\n\x0eGetCustomHooks\x12\x1d.gitaly.GetCustomHooksRequest\x1a\x1e.gitaly.GetCustomHooksResponse\"\x06\xfa\x97(\x02\x08\x02\x30\x01\x12o\n\x16GetObjectDirectorySize\x12%.gitaly.GetObjectDirectorySizeRequest\x1a&.gitaly.GetObjectDirectorySizeResponse\"\x06\xfa\x97(\x02\x08\x02\x12]\n\x10RemoveRepository\x12\x1f.gitaly.RemoveRepositoryRequest\x1a .gitaly.RemoveRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12]\n\x10RenameRepository\x12\x1f.gitaly.RenameRepositoryRequest\x1a .gitaly.RenameRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x66\n\x13ReplicateRepository\x12\".gitaly.ReplicateRepositoryRequest\x1a#.gitaly.ReplicateRepositoryResponse\"\x06\xfa\x97(\x02\x08\x01\x12\x63\n\x12OptimizeRepository\x12!.gitaly.OptimizeRepositoryRequest\x1a\".gitaly.OptimizeRepositoryResponse\"\x06\xfa\x97(\x02\x08\x03\x12r\n\x17PruneUnreachableObjects\x12&.gitaly.PruneUnreachableObjectsRequest\x1a\'.gitaly.PruneUnreachableObjectsResponse\"\x06\xfa\x97(\x02\x08\x03\x12Q\n\x0bSetFullPath\x12\x1a.gitaly.SetFullPathRequest\x1a\x1b.gitaly.SetFullPathResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x01\x12H\n\x08\x46ullPath\x12\x17.gitaly.FullPathRequest\x1a\x18.gitaly.FullPathResponse\"\t\x88\x02\x01\xfa\x97(\x02\x08\x02\x12\x46\n\tRemoveAll\x12\x18.gitaly.RemoveAllRequest\x1a\x19.gitaly.RemoveAllResponse\"\x04\x80\x98(\x01\x42\x34Z2gitlab.com/gitlab-org/gitaly/v15/proto/go/gitalypbb\x06proto3'
   ,
   dependencies=[lint__pb2.DESCRIPTOR,shared__pb2.DESCRIPTOR,])
 
 
 
@@ -25,28 +25,8 @@
   ,
   dependencies=[lint__pb2.DESCRIPTOR,shared__pb2.DESCRIPTOR,])
 
 
 
-_WRITECOMMITGRAPHREQUEST_SPLITSTRATEGY = _descriptor.EnumDescriptor(
-  name='SplitStrategy',
-  full_name='gitaly.WriteCommitGraphRequest.SplitStrategy',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SizeMultiple', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=754,
-  serialized_end=787,
-)
-_sym_db.RegisterEnumDescriptor(_WRITECOMMITGRAPHREQUEST_SPLITSTRATEGY)
-
 _GETARCHIVEREQUEST_FORMAT = _descriptor.EnumDescriptor(
   name='Format',
   full_name='gitaly.GetArchiveRequest.Format',
@@ -77,8 +57,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=2099,
-  serialized_end=2150,
+  serialized_start=1759,
+  serialized_end=1810,
 )
 _sym_db.RegisterEnumDescriptor(_GETARCHIVEREQUEST_FORMAT)
 
@@ -127,8 +107,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=5409,
-  serialized_end=5514,
+  serialized_start=5069,
+  serialized_end=5174,
 )
 _sym_db.RegisterEnumDescriptor(_GETRAWCHANGESRESPONSE_RAWCHANGE_OPERATION)
 
@@ -157,8 +137,8 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=6742,
-  serialized_end=6824,
+  serialized_start=6402,
+  serialized_end=6484,
 )
 _sym_db.RegisterEnumDescriptor(_OPTIMIZEREPOSITORYREQUEST_STRATEGY)
 
@@ -227,377 +207,6 @@
 )
 
 
-_REPACKINCREMENTALREQUEST = _descriptor.Descriptor(
-  name='RepackIncrementalRequest',
-  full_name='gitaly.RepackIncrementalRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.RepackIncrementalRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=171,
-  serialized_end=243,
-)
-
-
-_REPACKINCREMENTALRESPONSE = _descriptor.Descriptor(
-  name='RepackIncrementalResponse',
-  full_name='gitaly.RepackIncrementalResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=245,
-  serialized_end=272,
-)
-
-
-_REPACKFULLREQUEST = _descriptor.Descriptor(
-  name='RepackFullRequest',
-  full_name='gitaly.RepackFullRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.RepackFullRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='create_bitmap', full_name='gitaly.RepackFullRequest.create_bitmap', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=274,
-  serialized_end=362,
-)
-
-
-_REPACKFULLRESPONSE = _descriptor.Descriptor(
-  name='RepackFullResponse',
-  full_name='gitaly.RepackFullResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=364,
-  serialized_end=384,
-)
-
-
-_MIDXREPACKREQUEST = _descriptor.Descriptor(
-  name='MidxRepackRequest',
-  full_name='gitaly.MidxRepackRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.MidxRepackRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=386,
-  serialized_end=451,
-)
-
-
-_MIDXREPACKRESPONSE = _descriptor.Descriptor(
-  name='MidxRepackResponse',
-  full_name='gitaly.MidxRepackResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=453,
-  serialized_end=473,
-)
-
-
-_GARBAGECOLLECTREQUEST = _descriptor.Descriptor(
-  name='GarbageCollectRequest',
-  full_name='gitaly.GarbageCollectRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.GarbageCollectRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='create_bitmap', full_name='gitaly.GarbageCollectRequest.create_bitmap', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='prune', full_name='gitaly.GarbageCollectRequest.prune', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=475,
-  serialized_end=582,
-)
-
-
-_GARBAGECOLLECTRESPONSE = _descriptor.Descriptor(
-  name='GarbageCollectResponse',
-  full_name='gitaly.GarbageCollectResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=584,
-  serialized_end=608,
-)
-
-
-_WRITECOMMITGRAPHREQUEST = _descriptor.Descriptor(
-  name='WriteCommitGraphRequest',
-  full_name='gitaly.WriteCommitGraphRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.WriteCommitGraphRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='splitStrategy', full_name='gitaly.WriteCommitGraphRequest.splitStrategy', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _WRITECOMMITGRAPHREQUEST_SPLITSTRATEGY,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=611,
-  serialized_end=787,
-)
-
-
-_WRITECOMMITGRAPHRESPONSE = _descriptor.Descriptor(
-  name='WriteCommitGraphResponse',
-  full_name='gitaly.WriteCommitGraphResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=789,
-  serialized_end=815,
-)
-
-
-_CLEANUPREQUEST = _descriptor.Descriptor(
-  name='CleanupRequest',
-  full_name='gitaly.CleanupRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='repository', full_name='gitaly.CleanupRequest.repository', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=817,
-  serialized_end=879,
-)
-
-
-_CLEANUPRESPONSE = _descriptor.Descriptor(
-  name='CleanupResponse',
-  full_name='gitaly.CleanupResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=881,
-  serialized_end=898,
-)
-
-
 _REPOSITORYSIZEREQUEST = _descriptor.Descriptor(
   name='RepositorySizeRequest',
   full_name='gitaly.RepositorySizeRequest',
@@ -625,8 +234,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=900,
-  serialized_end=969,
+  serialized_start=171,
+  serialized_end=240,
 )
 
 
@@ -657,8 +266,176 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=971,
-  serialized_end=1009,
+  serialized_start=242,
+  serialized_end=280,
+)
+
+
+_REPOSITORYINFOREQUEST = _descriptor.Descriptor(
+  name='RepositoryInfoRequest',
+  full_name='gitaly.RepositoryInfoRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='repository', full_name='gitaly.RepositoryInfoRequest.repository', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=b'\230\306,\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=282,
+  serialized_end=351,
+)
+
+
+_REPOSITORYINFORESPONSE_REFERENCESINFO = _descriptor.Descriptor(
+  name='ReferencesInfo',
+  full_name='gitaly.RepositoryInfoResponse.ReferencesInfo',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='loose_count', full_name='gitaly.RepositoryInfoResponse.ReferencesInfo.loose_count', index=0,
+      number=1, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='packed_size', full_name='gitaly.RepositoryInfoResponse.ReferencesInfo.packed_size', index=1,
+      number=2, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=522,
+  serialized_end=580,
+)
+
+_REPOSITORYINFORESPONSE_OBJECTSINFO = _descriptor.Descriptor(
+  name='ObjectsInfo',
+  full_name='gitaly.RepositoryInfoResponse.ObjectsInfo',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='size', full_name='gitaly.RepositoryInfoResponse.ObjectsInfo.size', index=0,
+      number=1, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='recent_size', full_name='gitaly.RepositoryInfoResponse.ObjectsInfo.recent_size', index=1,
+      number=2, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='stale_size', full_name='gitaly.RepositoryInfoResponse.ObjectsInfo.stale_size', index=2,
+      number=3, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='keep_size', full_name='gitaly.RepositoryInfoResponse.ObjectsInfo.keep_size', index=3,
+      number=4, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=582,
+  serialized_end=669,
+)
+
+_REPOSITORYINFORESPONSE = _descriptor.Descriptor(
+  name='RepositoryInfoResponse',
+  full_name='gitaly.RepositoryInfoResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='size', full_name='gitaly.RepositoryInfoResponse.size', index=0,
+      number=1, type=4, cpp_type=4, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='references', full_name='gitaly.RepositoryInfoResponse.references', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='objects', full_name='gitaly.RepositoryInfoResponse.objects', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[_REPOSITORYINFORESPONSE_REFERENCESINFO, _REPOSITORYINFORESPONSE_OBJECTSINFO, ],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=354,
+  serialized_end=669,
 )
 
 
@@ -689,8 +466,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1011,
-  serialized_end=1078,
+  serialized_start=671,
+  serialized_end=738,
 )
 
 
@@ -721,8 +498,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1080,
-  serialized_end=1140,
+  serialized_start=740,
+  serialized_end=800,
 )
 
 
@@ -760,8 +537,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1142,
-  serialized_end=1233,
+  serialized_start=802,
+  serialized_end=893,
 )
 
 
@@ -785,8 +562,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1235,
-  serialized_end=1263,
+  serialized_start=895,
+  serialized_end=923,
 )
 
 
@@ -831,8 +608,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1265,
-  serialized_end=1366,
+  serialized_start=925,
+  serialized_end=1026,
 )
 
 
@@ -856,8 +633,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1368,
-  serialized_end=1389,
+  serialized_start=1028,
+  serialized_end=1049,
 )
 
 
@@ -944,8 +721,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1392,
-  serialized_end=1650,
+  serialized_start=1052,
+  serialized_end=1310,
 )
 
 
@@ -976,8 +753,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1652,
-  serialized_end=1695,
+  serialized_start=1312,
+  serialized_end=1355,
 )
 
 
@@ -1022,8 +799,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1698,
-  serialized_end=1838,
+  serialized_start=1358,
+  serialized_end=1498,
 )
 
 
@@ -1047,8 +824,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1840,
-  serialized_end=1866,
+  serialized_start=1500,
+  serialized_end=1526,
 )
 
 
@@ -1129,8 +906,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1869,
-  serialized_end=2150,
+  serialized_start=1529,
+  serialized_end=1810,
 )
 
 
@@ -1161,8 +938,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2152,
-  serialized_end=2186,
+  serialized_start=1812,
+  serialized_end=1846,
 )
 
 
@@ -1193,8 +970,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2188,
-  serialized_end=2259,
+  serialized_start=1848,
+  serialized_end=1919,
 )
 
 
@@ -1225,8 +1002,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2261,
-  serialized_end=2302,
+  serialized_start=1921,
+  serialized_end=1962,
 )
 
 
@@ -1278,8 +1055,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2305,
-  serialized_end=2467,
+  serialized_start=1965,
+  serialized_end=2127,
 )
 
 
@@ -1310,8 +1087,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2469,
-  serialized_end=2512,
+  serialized_start=2129,
+  serialized_end=2172,
 )
 
 
@@ -1342,8 +1119,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2514,
-  serialized_end=2573,
+  serialized_start=2174,
+  serialized_end=2233,
 )
 
 
@@ -1374,8 +1151,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2575,
-  serialized_end=2604,
+  serialized_start=2235,
+  serialized_end=2264,
 )
 
 
@@ -1434,8 +1211,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2607,
-  serialized_end=2744,
+  serialized_start=2267,
+  serialized_end=2404,
 )
 
 
@@ -1459,8 +1236,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2746,
-  serialized_end=2770,
+  serialized_start=2406,
+  serialized_end=2430,
 )
 
 
@@ -1498,8 +1275,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2772,
-  serialized_end=2859,
+  serialized_start=2432,
+  serialized_end=2519,
 )
 
 
@@ -1530,8 +1307,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2861,
-  serialized_end=2898,
+  serialized_start=2521,
+  serialized_end=2558,
 )
 
 
@@ -1569,8 +1346,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=2900,
-  serialized_end=3012,
+  serialized_start=2560,
+  serialized_end=2672,
 )
 
 
@@ -1594,8 +1371,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3014,
-  serialized_end=3034,
+  serialized_start=2674,
+  serialized_end=2694,
 )
 
 
@@ -1661,8 +1438,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3037,
-  serialized_end=3228,
+  serialized_start=2697,
+  serialized_end=2888,
 )
 
 
@@ -1686,8 +1463,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3230,
-  serialized_end=3263,
+  serialized_start=2890,
+  serialized_end=2923,
 )
 
 
@@ -1718,8 +1495,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3265,
-  serialized_end=3332,
+  serialized_start=2925,
+  serialized_end=2992,
 )
 
 
@@ -1750,8 +1527,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3334,
-  serialized_end=3370,
+  serialized_start=2994,
+  serialized_end=3030,
 )
 
 
@@ -1789,8 +1566,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3372,
-  serialized_end=3468,
+  serialized_start=3032,
+  serialized_end=3128,
 )
 
 
@@ -1821,8 +1598,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3470,
-  serialized_end=3517,
+  serialized_start=3130,
+  serialized_end=3177,
 )
 
 
@@ -1853,8 +1630,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3519,
-  serialized_end=3583,
+  serialized_start=3179,
+  serialized_end=3243,
 )
 
 
@@ -1885,8 +1662,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3585,
-  serialized_end=3618,
+  serialized_start=3245,
+  serialized_end=3278,
 )
 
 
@@ -1924,8 +1701,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3620,
-  serialized_end=3707,
+  serialized_start=3280,
+  serialized_end=3367,
 )
 
 
@@ -1963,8 +1740,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3709,
-  serialized_end=3792,
+  serialized_start=3369,
+  serialized_end=3452,
 )
 
 
@@ -1988,8 +1765,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3794,
-  serialized_end=3822,
+  serialized_start=3454,
+  serialized_end=3482,
 )
 
 
@@ -2013,8 +1790,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3824,
-  serialized_end=3848,
+  serialized_start=3484,
+  serialized_end=3508,
 )
 
 
@@ -2045,8 +1822,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3850,
-  serialized_end=3922,
+  serialized_start=3510,
+  serialized_end=3582,
 )
 
 
@@ -2077,8 +1854,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3924,
-  serialized_end=3993,
+  serialized_start=3584,
+  serialized_end=3653,
 )
 
 
@@ -2109,8 +1886,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=3995,
-  serialized_end=4036,
+  serialized_start=3655,
+  serialized_end=3696,
 )
 
 
@@ -2141,8 +1918,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4038,
-  serialized_end=4076,
+  serialized_start=3698,
+  serialized_end=3736,
 )
 
 
@@ -2180,8 +1957,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4078,
-  serialized_end=4173,
+  serialized_start=3738,
+  serialized_end=3833,
 )
 
 
@@ -2205,8 +1982,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4175,
-  serialized_end=4211,
+  serialized_start=3835,
+  serialized_end=3871,
 )
 
 
@@ -2237,8 +2014,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4213,
-  serialized_end=4279,
+  serialized_start=3873,
+  serialized_end=3939,
 )
 
 
@@ -2297,8 +2074,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4282,
-  serialized_end=4422,
+  serialized_start=3942,
+  serialized_end=4082,
 )
 
 
@@ -2329,8 +2106,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4424,
-  serialized_end=4496,
+  serialized_start=4084,
+  serialized_end=4156,
 )
 
 
@@ -2361,8 +2138,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4498,
-  serialized_end=4545,
+  serialized_start=4158,
+  serialized_end=4205,
 )
 
 
@@ -2393,8 +2170,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4547,
-  serialized_end=4619,
+  serialized_start=4207,
+  serialized_end=4279,
 )
 
 
@@ -2425,8 +2202,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4621,
-  serialized_end=4666,
+  serialized_start=4281,
+  serialized_end=4326,
 )
 
 
@@ -2457,8 +2234,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4668,
-  serialized_end=4734,
+  serialized_start=4328,
+  serialized_end=4394,
 )
 
 
@@ -2489,8 +2266,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4736,
-  serialized_end=4771,
+  serialized_start=4396,
+  serialized_end=4431,
 )
 
 
@@ -2549,8 +2326,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4774,
-  serialized_end=4943,
+  serialized_start=4434,
+  serialized_end=4603,
 )
 
 
@@ -2574,8 +2351,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4945,
-  serialized_end=4983,
+  serialized_start=4605,
+  serialized_end=4643,
 )
 
 
@@ -2620,8 +2397,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=4985,
-  serialized_end=5097,
+  serialized_start=4645,
+  serialized_end=4757,
 )
 
 
@@ -2702,8 +2479,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5188,
-  serialized_end=5546,
+  serialized_start=4848,
+  serialized_end=5206,
 )
 
 _GETRAWCHANGESRESPONSE = _descriptor.Descriptor(
@@ -2733,8 +2510,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5100,
-  serialized_end=5546,
+  serialized_start=4760,
+  serialized_end=5206,
 )
 
 
@@ -2800,8 +2577,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5549,
-  serialized_end=5696,
+  serialized_start=5209,
+  serialized_end=5356,
 )
 
 
@@ -2832,8 +2609,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5698,
-  serialized_end=5740,
+  serialized_start=5358,
+  serialized_end=5400,
 )
 
 
@@ -2885,8 +2662,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5743,
-  serialized_end=5872,
+  serialized_start=5403,
+  serialized_end=5532,
 )
 
 
@@ -2931,8 +2708,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5874,
-  serialized_end=5963,
+  serialized_start=5534,
+  serialized_end=5623,
 )
 
 
@@ -2991,8 +2768,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=5966,
-  serialized_end=6107,
+  serialized_start=5626,
+  serialized_end=5767,
 )
 
 
@@ -3023,8 +2800,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6109,
-  serialized_end=6186,
+  serialized_start=5769,
+  serialized_end=5846,
 )
 
 
@@ -3055,8 +2832,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6188,
-  serialized_end=6234,
+  serialized_start=5848,
+  serialized_end=5894,
 )
 
 
@@ -3087,8 +2864,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6236,
-  serialized_end=6307,
+  serialized_start=5896,
+  serialized_end=5967,
 )
 
 
@@ -3112,8 +2889,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6309,
-  serialized_end=6335,
+  serialized_start=5969,
+  serialized_end=5995,
 )
 
 
@@ -3151,8 +2928,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6337,
-  serialized_end=6431,
+  serialized_start=5997,
+  serialized_end=6091,
 )
 
 
@@ -3176,8 +2953,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6433,
-  serialized_end=6459,
+  serialized_start=6093,
+  serialized_end=6119,
 )
 
 
@@ -3215,8 +2992,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6461,
-  serialized_end=6571,
+  serialized_start=6121,
+  serialized_end=6231,
 )
 
 
@@ -3240,8 +3017,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6573,
-  serialized_end=6602,
+  serialized_start=6233,
+  serialized_end=6262,
 )
 
 
@@ -3280,8 +3057,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6605,
-  serialized_end=6824,
+  serialized_start=6265,
+  serialized_end=6484,
 )
 
 
@@ -3305,8 +3082,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6826,
-  serialized_end=6854,
+  serialized_start=6486,
+  serialized_end=6514,
 )
 
 
@@ -3337,8 +3114,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6856,
-  serialized_end=6934,
+  serialized_start=6516,
+  serialized_end=6594,
 )
 
 
@@ -3362,8 +3139,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6936,
-  serialized_end=6969,
+  serialized_start=6596,
+  serialized_end=6629,
 )
 
 
@@ -3401,8 +3178,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=6971,
-  serialized_end=7051,
+  serialized_start=6631,
+  serialized_end=6711,
 )
 
 
@@ -3426,8 +3203,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=7053,
-  serialized_end=7074,
+  serialized_start=6713,
+  serialized_end=6734,
 )
 
 
@@ -3458,8 +3235,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=7076,
-  serialized_end=7139,
+  serialized_start=6736,
+  serialized_end=6799,
 )
 
 
@@ -3490,8 +3267,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=7141,
-  serialized_end=7173,
+  serialized_start=6801,
+  serialized_end=6833,
 )
 
 
@@ -3522,8 +3299,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=7175,
-  serialized_end=7215,
+  serialized_start=6835,
+  serialized_end=6875,
 )
 
 
@@ -3547,8 +3324,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=7217,
-  serialized_end=7236,
+  serialized_start=6877,
+  serialized_end=6896,
 )
 
 _REPOSITORYEXISTSREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
@@ -3552,12 +3329,4 @@
 )
 
 _REPOSITORYEXISTSREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_REPACKINCREMENTALREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_REPACKFULLREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_MIDXREPACKREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_GARBAGECOLLECTREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_WRITECOMMITGRAPHREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
-_WRITECOMMITGRAPHREQUEST.fields_by_name['splitStrategy'].enum_type = _WRITECOMMITGRAPHREQUEST_SPLITSTRATEGY
-_WRITECOMMITGRAPHREQUEST_SPLITSTRATEGY.containing_type = _WRITECOMMITGRAPHREQUEST
-_CLEANUPREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _REPOSITORYSIZEREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
@@ -3563,4 +3332,9 @@
 _REPOSITORYSIZEREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
+_REPOSITORYINFOREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
+_REPOSITORYINFORESPONSE_REFERENCESINFO.containing_type = _REPOSITORYINFORESPONSE
+_REPOSITORYINFORESPONSE_OBJECTSINFO.containing_type = _REPOSITORYINFORESPONSE
+_REPOSITORYINFORESPONSE.fields_by_name['references'].message_type = _REPOSITORYINFORESPONSE_REFERENCESINFO
+_REPOSITORYINFORESPONSE.fields_by_name['objects'].message_type = _REPOSITORYINFORESPONSE_OBJECTSINFO
 _OBJECTFORMATREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 _OBJECTFORMATRESPONSE.fields_by_name['format'].enum_type = shared__pb2._OBJECTFORMAT
 _APPLYGITATTRIBUTESREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
@@ -3614,17 +3388,5 @@
 _FULLPATHREQUEST.fields_by_name['repository'].message_type = shared__pb2._REPOSITORY
 DESCRIPTOR.message_types_by_name['RepositoryExistsRequest'] = _REPOSITORYEXISTSREQUEST
 DESCRIPTOR.message_types_by_name['RepositoryExistsResponse'] = _REPOSITORYEXISTSRESPONSE
-DESCRIPTOR.message_types_by_name['RepackIncrementalRequest'] = _REPACKINCREMENTALREQUEST
-DESCRIPTOR.message_types_by_name['RepackIncrementalResponse'] = _REPACKINCREMENTALRESPONSE
-DESCRIPTOR.message_types_by_name['RepackFullRequest'] = _REPACKFULLREQUEST
-DESCRIPTOR.message_types_by_name['RepackFullResponse'] = _REPACKFULLRESPONSE
-DESCRIPTOR.message_types_by_name['MidxRepackRequest'] = _MIDXREPACKREQUEST
-DESCRIPTOR.message_types_by_name['MidxRepackResponse'] = _MIDXREPACKRESPONSE
-DESCRIPTOR.message_types_by_name['GarbageCollectRequest'] = _GARBAGECOLLECTREQUEST
-DESCRIPTOR.message_types_by_name['GarbageCollectResponse'] = _GARBAGECOLLECTRESPONSE
-DESCRIPTOR.message_types_by_name['WriteCommitGraphRequest'] = _WRITECOMMITGRAPHREQUEST
-DESCRIPTOR.message_types_by_name['WriteCommitGraphResponse'] = _WRITECOMMITGRAPHRESPONSE
-DESCRIPTOR.message_types_by_name['CleanupRequest'] = _CLEANUPREQUEST
-DESCRIPTOR.message_types_by_name['CleanupResponse'] = _CLEANUPRESPONSE
 DESCRIPTOR.message_types_by_name['RepositorySizeRequest'] = _REPOSITORYSIZEREQUEST
 DESCRIPTOR.message_types_by_name['RepositorySizeResponse'] = _REPOSITORYSIZERESPONSE
@@ -3629,5 +3391,7 @@
 DESCRIPTOR.message_types_by_name['RepositorySizeRequest'] = _REPOSITORYSIZEREQUEST
 DESCRIPTOR.message_types_by_name['RepositorySizeResponse'] = _REPOSITORYSIZERESPONSE
+DESCRIPTOR.message_types_by_name['RepositoryInfoRequest'] = _REPOSITORYINFOREQUEST
+DESCRIPTOR.message_types_by_name['RepositoryInfoResponse'] = _REPOSITORYINFORESPONSE
 DESCRIPTOR.message_types_by_name['ObjectFormatRequest'] = _OBJECTFORMATREQUEST
 DESCRIPTOR.message_types_by_name['ObjectFormatResponse'] = _OBJECTFORMATRESPONSE
 DESCRIPTOR.message_types_by_name['ApplyGitattributesRequest'] = _APPLYGITATTRIBUTESREQUEST
@@ -3721,90 +3485,6 @@
   })
 _sym_db.RegisterMessage(RepositoryExistsResponse)
 
-RepackIncrementalRequest = _reflection.GeneratedProtocolMessageType('RepackIncrementalRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REPACKINCREMENTALREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.RepackIncrementalRequest)
-  })
-_sym_db.RegisterMessage(RepackIncrementalRequest)
-
-RepackIncrementalResponse = _reflection.GeneratedProtocolMessageType('RepackIncrementalResponse', (_message.Message,), {
-  'DESCRIPTOR' : _REPACKINCREMENTALRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.RepackIncrementalResponse)
-  })
-_sym_db.RegisterMessage(RepackIncrementalResponse)
-
-RepackFullRequest = _reflection.GeneratedProtocolMessageType('RepackFullRequest', (_message.Message,), {
-  'DESCRIPTOR' : _REPACKFULLREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.RepackFullRequest)
-  })
-_sym_db.RegisterMessage(RepackFullRequest)
-
-RepackFullResponse = _reflection.GeneratedProtocolMessageType('RepackFullResponse', (_message.Message,), {
-  'DESCRIPTOR' : _REPACKFULLRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.RepackFullResponse)
-  })
-_sym_db.RegisterMessage(RepackFullResponse)
-
-MidxRepackRequest = _reflection.GeneratedProtocolMessageType('MidxRepackRequest', (_message.Message,), {
-  'DESCRIPTOR' : _MIDXREPACKREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.MidxRepackRequest)
-  })
-_sym_db.RegisterMessage(MidxRepackRequest)
-
-MidxRepackResponse = _reflection.GeneratedProtocolMessageType('MidxRepackResponse', (_message.Message,), {
-  'DESCRIPTOR' : _MIDXREPACKRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.MidxRepackResponse)
-  })
-_sym_db.RegisterMessage(MidxRepackResponse)
-
-GarbageCollectRequest = _reflection.GeneratedProtocolMessageType('GarbageCollectRequest', (_message.Message,), {
-  'DESCRIPTOR' : _GARBAGECOLLECTREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.GarbageCollectRequest)
-  })
-_sym_db.RegisterMessage(GarbageCollectRequest)
-
-GarbageCollectResponse = _reflection.GeneratedProtocolMessageType('GarbageCollectResponse', (_message.Message,), {
-  'DESCRIPTOR' : _GARBAGECOLLECTRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.GarbageCollectResponse)
-  })
-_sym_db.RegisterMessage(GarbageCollectResponse)
-
-WriteCommitGraphRequest = _reflection.GeneratedProtocolMessageType('WriteCommitGraphRequest', (_message.Message,), {
-  'DESCRIPTOR' : _WRITECOMMITGRAPHREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.WriteCommitGraphRequest)
-  })
-_sym_db.RegisterMessage(WriteCommitGraphRequest)
-
-WriteCommitGraphResponse = _reflection.GeneratedProtocolMessageType('WriteCommitGraphResponse', (_message.Message,), {
-  'DESCRIPTOR' : _WRITECOMMITGRAPHRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.WriteCommitGraphResponse)
-  })
-_sym_db.RegisterMessage(WriteCommitGraphResponse)
-
-CleanupRequest = _reflection.GeneratedProtocolMessageType('CleanupRequest', (_message.Message,), {
-  'DESCRIPTOR' : _CLEANUPREQUEST,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.CleanupRequest)
-  })
-_sym_db.RegisterMessage(CleanupRequest)
-
-CleanupResponse = _reflection.GeneratedProtocolMessageType('CleanupResponse', (_message.Message,), {
-  'DESCRIPTOR' : _CLEANUPRESPONSE,
-  '__module__' : 'repository_pb2'
-  # @@protoc_insertion_point(class_scope:gitaly.CleanupResponse)
-  })
-_sym_db.RegisterMessage(CleanupResponse)
-
 RepositorySizeRequest = _reflection.GeneratedProtocolMessageType('RepositorySizeRequest', (_message.Message,), {
   'DESCRIPTOR' : _REPOSITORYSIZEREQUEST,
   '__module__' : 'repository_pb2'
@@ -3819,6 +3499,36 @@
   })
 _sym_db.RegisterMessage(RepositorySizeResponse)
 
+RepositoryInfoRequest = _reflection.GeneratedProtocolMessageType('RepositoryInfoRequest', (_message.Message,), {
+  'DESCRIPTOR' : _REPOSITORYINFOREQUEST,
+  '__module__' : 'repository_pb2'
+  # @@protoc_insertion_point(class_scope:gitaly.RepositoryInfoRequest)
+  })
+_sym_db.RegisterMessage(RepositoryInfoRequest)
+
+RepositoryInfoResponse = _reflection.GeneratedProtocolMessageType('RepositoryInfoResponse', (_message.Message,), {
+
+  'ReferencesInfo' : _reflection.GeneratedProtocolMessageType('ReferencesInfo', (_message.Message,), {
+    'DESCRIPTOR' : _REPOSITORYINFORESPONSE_REFERENCESINFO,
+    '__module__' : 'repository_pb2'
+    # @@protoc_insertion_point(class_scope:gitaly.RepositoryInfoResponse.ReferencesInfo)
+    })
+  ,
+
+  'ObjectsInfo' : _reflection.GeneratedProtocolMessageType('ObjectsInfo', (_message.Message,), {
+    'DESCRIPTOR' : _REPOSITORYINFORESPONSE_OBJECTSINFO,
+    '__module__' : 'repository_pb2'
+    # @@protoc_insertion_point(class_scope:gitaly.RepositoryInfoResponse.ObjectsInfo)
+    })
+  ,
+  'DESCRIPTOR' : _REPOSITORYINFORESPONSE,
+  '__module__' : 'repository_pb2'
+  # @@protoc_insertion_point(class_scope:gitaly.RepositoryInfoResponse)
+  })
+_sym_db.RegisterMessage(RepositoryInfoResponse)
+_sym_db.RegisterMessage(RepositoryInfoResponse.ReferencesInfo)
+_sym_db.RegisterMessage(RepositoryInfoResponse.ObjectsInfo)
+
 ObjectFormatRequest = _reflection.GeneratedProtocolMessageType('ObjectFormatRequest', (_message.Message,), {
   'DESCRIPTOR' : _OBJECTFORMATREQUEST,
   '__module__' : 'repository_pb2'
@@ -4369,10 +4079,4 @@
 
 DESCRIPTOR._options = None
 _REPOSITORYEXISTSREQUEST.fields_by_name['repository']._options = None
-_REPACKINCREMENTALREQUEST.fields_by_name['repository']._options = None
-_REPACKFULLREQUEST.fields_by_name['repository']._options = None
-_MIDXREPACKREQUEST.fields_by_name['repository']._options = None
-_GARBAGECOLLECTREQUEST.fields_by_name['repository']._options = None
-_WRITECOMMITGRAPHREQUEST.fields_by_name['repository']._options = None
-_CLEANUPREQUEST.fields_by_name['repository']._options = None
 _REPOSITORYSIZEREQUEST.fields_by_name['repository']._options = None
@@ -4378,4 +4082,5 @@
 _REPOSITORYSIZEREQUEST.fields_by_name['repository']._options = None
+_REPOSITORYINFOREQUEST.fields_by_name['repository']._options = None
 _OBJECTFORMATREQUEST.fields_by_name['repository']._options = None
 _APPLYGITATTRIBUTESREQUEST.fields_by_name['repository']._options = None
 _FETCHBUNDLEREQUEST.fields_by_name['repository']._options = None
@@ -4424,8 +4129,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=7239,
-  serialized_end=11527,
+  serialized_start=6899,
+  serialized_end=10754,
   methods=[
   _descriptor.MethodDescriptor(
     name='RepositoryExists',
@@ -4438,55 +4143,5 @@
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='RepackIncremental',
-    full_name='gitaly.RepositoryService.RepackIncremental',
-    index=1,
-    containing_service=None,
-    input_type=_REPACKINCREMENTALREQUEST,
-    output_type=_REPACKINCREMENTALRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RepackFull',
-    full_name='gitaly.RepositoryService.RepackFull',
-    index=2,
-    containing_service=None,
-    input_type=_REPACKFULLREQUEST,
-    output_type=_REPACKFULLRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='MidxRepack',
-    full_name='gitaly.RepositoryService.MidxRepack',
-    index=3,
-    containing_service=None,
-    input_type=_MIDXREPACKREQUEST,
-    output_type=_MIDXREPACKRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GarbageCollect',
-    full_name='gitaly.RepositoryService.GarbageCollect',
-    index=4,
-    containing_service=None,
-    input_type=_GARBAGECOLLECTREQUEST,
-    output_type=_GARBAGECOLLECTRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='WriteCommitGraph',
-    full_name='gitaly.RepositoryService.WriteCommitGraph',
-    index=5,
-    containing_service=None,
-    input_type=_WRITECOMMITGRAPHREQUEST,
-    output_type=_WRITECOMMITGRAPHRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
     name='RepositorySize',
     full_name='gitaly.RepositoryService.RepositorySize',
@@ -4491,6 +4146,6 @@
     name='RepositorySize',
     full_name='gitaly.RepositoryService.RepositorySize',
-    index=6,
+    index=1,
     containing_service=None,
     input_type=_REPOSITORYSIZEREQUEST,
     output_type=_REPOSITORYSIZERESPONSE,
@@ -4498,5 +4153,15 @@
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
+    name='RepositoryInfo',
+    full_name='gitaly.RepositoryService.RepositoryInfo',
+    index=2,
+    containing_service=None,
+    input_type=_REPOSITORYINFOREQUEST,
+    output_type=_REPOSITORYINFORESPONSE,
+    serialized_options=b'\372\227(\002\010\002',
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
     name='ObjectFormat',
     full_name='gitaly.RepositoryService.ObjectFormat',
@@ -4501,6 +4166,6 @@
     name='ObjectFormat',
     full_name='gitaly.RepositoryService.ObjectFormat',
-    index=7,
+    index=3,
     containing_service=None,
     input_type=_OBJECTFORMATREQUEST,
     output_type=_OBJECTFORMATRESPONSE,
@@ -4510,7 +4175,7 @@
   _descriptor.MethodDescriptor(
     name='ApplyGitattributes',
     full_name='gitaly.RepositoryService.ApplyGitattributes',
-    index=8,
+    index=4,
     containing_service=None,
     input_type=_APPLYGITATTRIBUTESREQUEST,
     output_type=_APPLYGITATTRIBUTESRESPONSE,
@@ -4520,7 +4185,7 @@
   _descriptor.MethodDescriptor(
     name='FetchRemote',
     full_name='gitaly.RepositoryService.FetchRemote',
-    index=9,
+    index=5,
     containing_service=None,
     input_type=_FETCHREMOTEREQUEST,
     output_type=_FETCHREMOTERESPONSE,
@@ -4530,7 +4195,7 @@
   _descriptor.MethodDescriptor(
     name='CreateRepository',
     full_name='gitaly.RepositoryService.CreateRepository',
-    index=10,
+    index=6,
     containing_service=None,
     input_type=_CREATEREPOSITORYREQUEST,
     output_type=_CREATEREPOSITORYRESPONSE,
@@ -4540,7 +4205,7 @@
   _descriptor.MethodDescriptor(
     name='GetArchive',
     full_name='gitaly.RepositoryService.GetArchive',
-    index=11,
+    index=7,
     containing_service=None,
     input_type=_GETARCHIVEREQUEST,
     output_type=_GETARCHIVERESPONSE,
@@ -4550,7 +4215,7 @@
   _descriptor.MethodDescriptor(
     name='HasLocalBranches',
     full_name='gitaly.RepositoryService.HasLocalBranches',
-    index=12,
+    index=8,
     containing_service=None,
     input_type=_HASLOCALBRANCHESREQUEST,
     output_type=_HASLOCALBRANCHESRESPONSE,
@@ -4560,7 +4225,7 @@
   _descriptor.MethodDescriptor(
     name='FetchSourceBranch',
     full_name='gitaly.RepositoryService.FetchSourceBranch',
-    index=13,
+    index=9,
     containing_service=None,
     input_type=_FETCHSOURCEBRANCHREQUEST,
     output_type=_FETCHSOURCEBRANCHRESPONSE,
@@ -4570,7 +4235,7 @@
   _descriptor.MethodDescriptor(
     name='Fsck',
     full_name='gitaly.RepositoryService.Fsck',
-    index=14,
+    index=10,
     containing_service=None,
     input_type=_FSCKREQUEST,
     output_type=_FSCKRESPONSE,
@@ -4580,7 +4245,7 @@
   _descriptor.MethodDescriptor(
     name='WriteRef',
     full_name='gitaly.RepositoryService.WriteRef',
-    index=15,
+    index=11,
     containing_service=None,
     input_type=_WRITEREFREQUEST,
     output_type=_WRITEREFRESPONSE,
@@ -4590,7 +4255,7 @@
   _descriptor.MethodDescriptor(
     name='FindMergeBase',
     full_name='gitaly.RepositoryService.FindMergeBase',
-    index=16,
+    index=12,
     containing_service=None,
     input_type=_FINDMERGEBASEREQUEST,
     output_type=_FINDMERGEBASERESPONSE,
@@ -4600,7 +4265,7 @@
   _descriptor.MethodDescriptor(
     name='CreateFork',
     full_name='gitaly.RepositoryService.CreateFork',
-    index=17,
+    index=13,
     containing_service=None,
     input_type=_CREATEFORKREQUEST,
     output_type=_CREATEFORKRESPONSE,
@@ -4610,7 +4275,7 @@
   _descriptor.MethodDescriptor(
     name='CreateRepositoryFromURL',
     full_name='gitaly.RepositoryService.CreateRepositoryFromURL',
-    index=18,
+    index=14,
     containing_service=None,
     input_type=_CREATEREPOSITORYFROMURLREQUEST,
     output_type=_CREATEREPOSITORYFROMURLRESPONSE,
@@ -4620,7 +4285,7 @@
   _descriptor.MethodDescriptor(
     name='CreateBundle',
     full_name='gitaly.RepositoryService.CreateBundle',
-    index=19,
+    index=15,
     containing_service=None,
     input_type=_CREATEBUNDLEREQUEST,
     output_type=_CREATEBUNDLERESPONSE,
@@ -4630,7 +4295,7 @@
   _descriptor.MethodDescriptor(
     name='CreateBundleFromRefList',
     full_name='gitaly.RepositoryService.CreateBundleFromRefList',
-    index=20,
+    index=16,
     containing_service=None,
     input_type=_CREATEBUNDLEFROMREFLISTREQUEST,
     output_type=_CREATEBUNDLEFROMREFLISTRESPONSE,
@@ -4640,7 +4305,7 @@
   _descriptor.MethodDescriptor(
     name='FetchBundle',
     full_name='gitaly.RepositoryService.FetchBundle',
-    index=21,
+    index=17,
     containing_service=None,
     input_type=_FETCHBUNDLEREQUEST,
     output_type=_FETCHBUNDLERESPONSE,
@@ -4650,7 +4315,7 @@
   _descriptor.MethodDescriptor(
     name='CreateRepositoryFromBundle',
     full_name='gitaly.RepositoryService.CreateRepositoryFromBundle',
-    index=22,
+    index=18,
     containing_service=None,
     input_type=_CREATEREPOSITORYFROMBUNDLEREQUEST,
     output_type=_CREATEREPOSITORYFROMBUNDLERESPONSE,
@@ -4660,7 +4325,7 @@
   _descriptor.MethodDescriptor(
     name='GetConfig',
     full_name='gitaly.RepositoryService.GetConfig',
-    index=23,
+    index=19,
     containing_service=None,
     input_type=_GETCONFIGREQUEST,
     output_type=_GETCONFIGRESPONSE,
@@ -4670,7 +4335,7 @@
   _descriptor.MethodDescriptor(
     name='FindLicense',
     full_name='gitaly.RepositoryService.FindLicense',
-    index=24,
+    index=20,
     containing_service=None,
     input_type=_FINDLICENSEREQUEST,
     output_type=_FINDLICENSERESPONSE,
@@ -4680,7 +4345,7 @@
   _descriptor.MethodDescriptor(
     name='GetInfoAttributes',
     full_name='gitaly.RepositoryService.GetInfoAttributes',
-    index=25,
+    index=21,
     containing_service=None,
     input_type=_GETINFOATTRIBUTESREQUEST,
     output_type=_GETINFOATTRIBUTESRESPONSE,
@@ -4690,7 +4355,7 @@
   _descriptor.MethodDescriptor(
     name='CalculateChecksum',
     full_name='gitaly.RepositoryService.CalculateChecksum',
-    index=26,
+    index=22,
     containing_service=None,
     input_type=_CALCULATECHECKSUMREQUEST,
     output_type=_CALCULATECHECKSUMRESPONSE,
@@ -4698,15 +4363,5 @@
     create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
-    name='Cleanup',
-    full_name='gitaly.RepositoryService.Cleanup',
-    index=27,
-    containing_service=None,
-    input_type=_CLEANUPREQUEST,
-    output_type=_CLEANUPRESPONSE,
-    serialized_options=b'\210\002\001\372\227(\002\010\003',
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
     name='GetSnapshot',
     full_name='gitaly.RepositoryService.GetSnapshot',
@@ -4711,6 +4366,6 @@
     name='GetSnapshot',
     full_name='gitaly.RepositoryService.GetSnapshot',
-    index=28,
+    index=23,
     containing_service=None,
     input_type=_GETSNAPSHOTREQUEST,
     output_type=_GETSNAPSHOTRESPONSE,
@@ -4720,7 +4375,7 @@
   _descriptor.MethodDescriptor(
     name='CreateRepositoryFromSnapshot',
     full_name='gitaly.RepositoryService.CreateRepositoryFromSnapshot',
-    index=29,
+    index=24,
     containing_service=None,
     input_type=_CREATEREPOSITORYFROMSNAPSHOTREQUEST,
     output_type=_CREATEREPOSITORYFROMSNAPSHOTRESPONSE,
@@ -4730,7 +4385,7 @@
   _descriptor.MethodDescriptor(
     name='GetRawChanges',
     full_name='gitaly.RepositoryService.GetRawChanges',
-    index=30,
+    index=25,
     containing_service=None,
     input_type=_GETRAWCHANGESREQUEST,
     output_type=_GETRAWCHANGESRESPONSE,
@@ -4740,7 +4395,7 @@
   _descriptor.MethodDescriptor(
     name='SearchFilesByContent',
     full_name='gitaly.RepositoryService.SearchFilesByContent',
-    index=31,
+    index=26,
     containing_service=None,
     input_type=_SEARCHFILESBYCONTENTREQUEST,
     output_type=_SEARCHFILESBYCONTENTRESPONSE,
@@ -4750,7 +4405,7 @@
   _descriptor.MethodDescriptor(
     name='SearchFilesByName',
     full_name='gitaly.RepositoryService.SearchFilesByName',
-    index=32,
+    index=27,
     containing_service=None,
     input_type=_SEARCHFILESBYNAMEREQUEST,
     output_type=_SEARCHFILESBYNAMERESPONSE,
@@ -4760,7 +4415,7 @@
   _descriptor.MethodDescriptor(
     name='RestoreCustomHooks',
     full_name='gitaly.RepositoryService.RestoreCustomHooks',
-    index=33,
+    index=28,
     containing_service=None,
     input_type=_RESTORECUSTOMHOOKSREQUEST,
     output_type=_RESTORECUSTOMHOOKSRESPONSE,
@@ -4770,7 +4425,7 @@
   _descriptor.MethodDescriptor(
     name='SetCustomHooks',
     full_name='gitaly.RepositoryService.SetCustomHooks',
-    index=34,
+    index=29,
     containing_service=None,
     input_type=_SETCUSTOMHOOKSREQUEST,
     output_type=_SETCUSTOMHOOKSRESPONSE,
@@ -4780,7 +4435,7 @@
   _descriptor.MethodDescriptor(
     name='BackupCustomHooks',
     full_name='gitaly.RepositoryService.BackupCustomHooks',
-    index=35,
+    index=30,
     containing_service=None,
     input_type=_BACKUPCUSTOMHOOKSREQUEST,
     output_type=_BACKUPCUSTOMHOOKSRESPONSE,
@@ -4790,7 +4445,7 @@
   _descriptor.MethodDescriptor(
     name='GetCustomHooks',
     full_name='gitaly.RepositoryService.GetCustomHooks',
-    index=36,
+    index=31,
     containing_service=None,
     input_type=_GETCUSTOMHOOKSREQUEST,
     output_type=_GETCUSTOMHOOKSRESPONSE,
@@ -4800,7 +4455,7 @@
   _descriptor.MethodDescriptor(
     name='GetObjectDirectorySize',
     full_name='gitaly.RepositoryService.GetObjectDirectorySize',
-    index=37,
+    index=32,
     containing_service=None,
     input_type=_GETOBJECTDIRECTORYSIZEREQUEST,
     output_type=_GETOBJECTDIRECTORYSIZERESPONSE,
@@ -4810,7 +4465,7 @@
   _descriptor.MethodDescriptor(
     name='RemoveRepository',
     full_name='gitaly.RepositoryService.RemoveRepository',
-    index=38,
+    index=33,
     containing_service=None,
     input_type=_REMOVEREPOSITORYREQUEST,
     output_type=_REMOVEREPOSITORYRESPONSE,
@@ -4820,7 +4475,7 @@
   _descriptor.MethodDescriptor(
     name='RenameRepository',
     full_name='gitaly.RepositoryService.RenameRepository',
-    index=39,
+    index=34,
     containing_service=None,
     input_type=_RENAMEREPOSITORYREQUEST,
     output_type=_RENAMEREPOSITORYRESPONSE,
@@ -4830,7 +4485,7 @@
   _descriptor.MethodDescriptor(
     name='ReplicateRepository',
     full_name='gitaly.RepositoryService.ReplicateRepository',
-    index=40,
+    index=35,
     containing_service=None,
     input_type=_REPLICATEREPOSITORYREQUEST,
     output_type=_REPLICATEREPOSITORYRESPONSE,
@@ -4840,7 +4495,7 @@
   _descriptor.MethodDescriptor(
     name='OptimizeRepository',
     full_name='gitaly.RepositoryService.OptimizeRepository',
-    index=41,
+    index=36,
     containing_service=None,
     input_type=_OPTIMIZEREPOSITORYREQUEST,
     output_type=_OPTIMIZEREPOSITORYRESPONSE,
@@ -4850,7 +4505,7 @@
   _descriptor.MethodDescriptor(
     name='PruneUnreachableObjects',
     full_name='gitaly.RepositoryService.PruneUnreachableObjects',
-    index=42,
+    index=37,
     containing_service=None,
     input_type=_PRUNEUNREACHABLEOBJECTSREQUEST,
     output_type=_PRUNEUNREACHABLEOBJECTSRESPONSE,
@@ -4860,7 +4515,7 @@
   _descriptor.MethodDescriptor(
     name='SetFullPath',
     full_name='gitaly.RepositoryService.SetFullPath',
-    index=43,
+    index=38,
     containing_service=None,
     input_type=_SETFULLPATHREQUEST,
     output_type=_SETFULLPATHRESPONSE,
@@ -4870,7 +4525,7 @@
   _descriptor.MethodDescriptor(
     name='FullPath',
     full_name='gitaly.RepositoryService.FullPath',
-    index=44,
+    index=39,
     containing_service=None,
     input_type=_FULLPATHREQUEST,
     output_type=_FULLPATHRESPONSE,
@@ -4880,7 +4535,7 @@
   _descriptor.MethodDescriptor(
     name='RemoveAll',
     full_name='gitaly.RepositoryService.RemoveAll',
-    index=45,
+    index=40,
     containing_service=None,
     input_type=_REMOVEALLREQUEST,
     output_type=_REMOVEALLRESPONSE,
diff --git a/hgitaly/stub/repository_pb2_grpc.py b/hgitaly/stub/repository_pb2_grpc.py
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_aGdpdGFseS9zdHViL3JlcG9zaXRvcnlfcGIyX2dycGMucHk=..60137290214a60beb5899af9ab71e13b582394b1_aGdpdGFseS9zdHViL3JlcG9zaXRvcnlfcGIyX2dycGMucHk= 100644
--- a/hgitaly/stub/repository_pb2_grpc.py
+++ b/hgitaly/stub/repository_pb2_grpc.py
@@ -20,33 +20,8 @@
                 request_serializer=repository__pb2.RepositoryExistsRequest.SerializeToString,
                 response_deserializer=repository__pb2.RepositoryExistsResponse.FromString,
                 )
-        self.RepackIncremental = channel.unary_unary(
-                '/gitaly.RepositoryService/RepackIncremental',
-                request_serializer=repository__pb2.RepackIncrementalRequest.SerializeToString,
-                response_deserializer=repository__pb2.RepackIncrementalResponse.FromString,
-                )
-        self.RepackFull = channel.unary_unary(
-                '/gitaly.RepositoryService/RepackFull',
-                request_serializer=repository__pb2.RepackFullRequest.SerializeToString,
-                response_deserializer=repository__pb2.RepackFullResponse.FromString,
-                )
-        self.MidxRepack = channel.unary_unary(
-                '/gitaly.RepositoryService/MidxRepack',
-                request_serializer=repository__pb2.MidxRepackRequest.SerializeToString,
-                response_deserializer=repository__pb2.MidxRepackResponse.FromString,
-                )
-        self.GarbageCollect = channel.unary_unary(
-                '/gitaly.RepositoryService/GarbageCollect',
-                request_serializer=repository__pb2.GarbageCollectRequest.SerializeToString,
-                response_deserializer=repository__pb2.GarbageCollectResponse.FromString,
-                )
-        self.WriteCommitGraph = channel.unary_unary(
-                '/gitaly.RepositoryService/WriteCommitGraph',
-                request_serializer=repository__pb2.WriteCommitGraphRequest.SerializeToString,
-                response_deserializer=repository__pb2.WriteCommitGraphResponse.FromString,
-                )
         self.RepositorySize = channel.unary_unary(
                 '/gitaly.RepositoryService/RepositorySize',
                 request_serializer=repository__pb2.RepositorySizeRequest.SerializeToString,
                 response_deserializer=repository__pb2.RepositorySizeResponse.FromString,
                 )
@@ -48,8 +23,13 @@
         self.RepositorySize = channel.unary_unary(
                 '/gitaly.RepositoryService/RepositorySize',
                 request_serializer=repository__pb2.RepositorySizeRequest.SerializeToString,
                 response_deserializer=repository__pb2.RepositorySizeResponse.FromString,
                 )
+        self.RepositoryInfo = channel.unary_unary(
+                '/gitaly.RepositoryService/RepositoryInfo',
+                request_serializer=repository__pb2.RepositoryInfoRequest.SerializeToString,
+                response_deserializer=repository__pb2.RepositoryInfoResponse.FromString,
+                )
         self.ObjectFormat = channel.unary_unary(
                 '/gitaly.RepositoryService/ObjectFormat',
                 request_serializer=repository__pb2.ObjectFormatRequest.SerializeToString,
@@ -150,11 +130,6 @@
                 request_serializer=repository__pb2.CalculateChecksumRequest.SerializeToString,
                 response_deserializer=repository__pb2.CalculateChecksumResponse.FromString,
                 )
-        self.Cleanup = channel.unary_unary(
-                '/gitaly.RepositoryService/Cleanup',
-                request_serializer=repository__pb2.CleanupRequest.SerializeToString,
-                response_deserializer=repository__pb2.CleanupResponse.FromString,
-                )
         self.GetSnapshot = channel.unary_stream(
                 '/gitaly.RepositoryService/GetSnapshot',
                 request_serializer=repository__pb2.GetSnapshotRequest.SerializeToString,
@@ -258,17 +233,12 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def RepackIncremental(self, request, context):
-        """RepackIncremental is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def RepackFull(self, request, context):
-        """RepackFull is deprecated in favor of OptimizeRepository.
+    def RepositorySize(self, request, context):
+        """RepositorySize returns information on the complete on-disk repository size. If you need more
+        detailed information about the size of various sub-structures you should instead use the
+        RepositoryInfo RPC.
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
@@ -270,31 +240,10 @@
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def MidxRepack(self, request, context):
-        """MidxRepack is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GarbageCollect(self, request, context):
-        """GarbageCollect is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def WriteCommitGraph(self, request, context):
-        """WriteCommitGraph is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def RepositorySize(self, request, context):
-        """This comment is left unintentionally blank.
+    def RepositoryInfo(self, request, context):
+        """RepositoryInfo returns detailed information about a repository and its data structures.
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
         context.set_details('Method not implemented!')
@@ -448,13 +397,6 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
-    def Cleanup(self, request, context):
-        """Cleanup is deprecated in favor of OptimizeRepository.
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
     def GetSnapshot(self, request, context):
         """This comment is left unintentionally blank.
         """
@@ -501,7 +443,7 @@
 
     def SetCustomHooks(self, request_iterator, context):
         """SetCustomHooks sets the git hooks for a repository. The hooks are sent in a
-        tar archive containing a `custom_hooks` directory. This directory is 
+        tar archive containing a `custom_hooks` directory. This directory is
         ultimately extracted to the repository.
         """
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -618,33 +560,8 @@
                     request_deserializer=repository__pb2.RepositoryExistsRequest.FromString,
                     response_serializer=repository__pb2.RepositoryExistsResponse.SerializeToString,
             ),
-            'RepackIncremental': grpc.unary_unary_rpc_method_handler(
-                    servicer.RepackIncremental,
-                    request_deserializer=repository__pb2.RepackIncrementalRequest.FromString,
-                    response_serializer=repository__pb2.RepackIncrementalResponse.SerializeToString,
-            ),
-            'RepackFull': grpc.unary_unary_rpc_method_handler(
-                    servicer.RepackFull,
-                    request_deserializer=repository__pb2.RepackFullRequest.FromString,
-                    response_serializer=repository__pb2.RepackFullResponse.SerializeToString,
-            ),
-            'MidxRepack': grpc.unary_unary_rpc_method_handler(
-                    servicer.MidxRepack,
-                    request_deserializer=repository__pb2.MidxRepackRequest.FromString,
-                    response_serializer=repository__pb2.MidxRepackResponse.SerializeToString,
-            ),
-            'GarbageCollect': grpc.unary_unary_rpc_method_handler(
-                    servicer.GarbageCollect,
-                    request_deserializer=repository__pb2.GarbageCollectRequest.FromString,
-                    response_serializer=repository__pb2.GarbageCollectResponse.SerializeToString,
-            ),
-            'WriteCommitGraph': grpc.unary_unary_rpc_method_handler(
-                    servicer.WriteCommitGraph,
-                    request_deserializer=repository__pb2.WriteCommitGraphRequest.FromString,
-                    response_serializer=repository__pb2.WriteCommitGraphResponse.SerializeToString,
-            ),
             'RepositorySize': grpc.unary_unary_rpc_method_handler(
                     servicer.RepositorySize,
                     request_deserializer=repository__pb2.RepositorySizeRequest.FromString,
                     response_serializer=repository__pb2.RepositorySizeResponse.SerializeToString,
             ),
@@ -646,8 +563,13 @@
             'RepositorySize': grpc.unary_unary_rpc_method_handler(
                     servicer.RepositorySize,
                     request_deserializer=repository__pb2.RepositorySizeRequest.FromString,
                     response_serializer=repository__pb2.RepositorySizeResponse.SerializeToString,
             ),
+            'RepositoryInfo': grpc.unary_unary_rpc_method_handler(
+                    servicer.RepositoryInfo,
+                    request_deserializer=repository__pb2.RepositoryInfoRequest.FromString,
+                    response_serializer=repository__pb2.RepositoryInfoResponse.SerializeToString,
+            ),
             'ObjectFormat': grpc.unary_unary_rpc_method_handler(
                     servicer.ObjectFormat,
                     request_deserializer=repository__pb2.ObjectFormatRequest.FromString,
@@ -748,11 +670,6 @@
                     request_deserializer=repository__pb2.CalculateChecksumRequest.FromString,
                     response_serializer=repository__pb2.CalculateChecksumResponse.SerializeToString,
             ),
-            'Cleanup': grpc.unary_unary_rpc_method_handler(
-                    servicer.Cleanup,
-                    request_deserializer=repository__pb2.CleanupRequest.FromString,
-                    response_serializer=repository__pb2.CleanupResponse.SerializeToString,
-            ),
             'GetSnapshot': grpc.unary_stream_rpc_method_handler(
                     servicer.GetSnapshot,
                     request_deserializer=repository__pb2.GetSnapshotRequest.FromString,
@@ -872,91 +789,6 @@
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def RepackIncremental(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/RepackIncremental',
-            repository__pb2.RepackIncrementalRequest.SerializeToString,
-            repository__pb2.RepackIncrementalResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def RepackFull(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/RepackFull',
-            repository__pb2.RepackFullRequest.SerializeToString,
-            repository__pb2.RepackFullResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def MidxRepack(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/MidxRepack',
-            repository__pb2.MidxRepackRequest.SerializeToString,
-            repository__pb2.MidxRepackResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GarbageCollect(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/GarbageCollect',
-            repository__pb2.GarbageCollectRequest.SerializeToString,
-            repository__pb2.GarbageCollectResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def WriteCommitGraph(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/WriteCommitGraph',
-            repository__pb2.WriteCommitGraphRequest.SerializeToString,
-            repository__pb2.WriteCommitGraphResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
     def RepositorySize(request,
             target,
             options=(),
@@ -974,6 +806,23 @@
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
+    def RepositoryInfo(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/RepositoryInfo',
+            repository__pb2.RepositoryInfoRequest.SerializeToString,
+            repository__pb2.RepositoryInfoResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
     def ObjectFormat(request,
             target,
             options=(),
@@ -1314,23 +1163,6 @@
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
     @staticmethod
-    def Cleanup(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/gitaly.RepositoryService/Cleanup',
-            repository__pb2.CleanupRequest.SerializeToString,
-            repository__pb2.CleanupResponse.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
     def GetSnapshot(request,
             target,
             options=(),
diff --git a/protos/commit.proto b/protos/commit.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL2NvbW1pdC5wcm90bw==..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL2NvbW1pdC5wcm90bw== 100644
--- a/protos/commit.proto
+++ b/protos/commit.proto
@@ -415,12 +415,6 @@
 
   // OID of the object this tree entry points to
   string oid = 1;
-  // OID of the tree attached to commit_oid. This field is deprecated and will be removed in Gitaly
-  // v16.0 as it cannot be implemented efficiently without having to spawn another extra process
-  // that needs to get queried for every single TreeEntry. And at that point the caller can just
-  // manually resolve the root tree ID via a separate RPC call, especially so as there are not
-  // currently any known users of this feature.
-  string root_oid = 2 [deprecated=true];
   // Path relative to repository root
   bytes path = 3;
   // This comment is left unintentionally blank.
@@ -431,6 +425,11 @@
   string commit_oid = 6;
   // Relative path of the first subdir that doesn't have only one directory descendant
   bytes flat_path = 7;
+
+  // RootOid used to refer to the resolved object ID of the root tree. This field has been removed
+  // with no replacement.
+  reserved "root_oid";
+  reserved 2;
 }
 
 // This comment is left unintentionally blank.
@@ -613,6 +612,6 @@
   bool include_shortstat = 17;
   // include_referenced_by determines whether to include references that point to a
   // commit in the response. The field contains patterns that are matched against
-  // references. Only matching references are included in the response. For 
+  // references. Only matching references are included in the response. For
   // example, one can get tags pointing to a commit with `refs/tags`, or branches
   // respectively with `refs/heads`. By sending both, the response will include all
@@ -617,6 +616,6 @@
   // example, one can get tags pointing to a commit with `refs/tags`, or branches
   // respectively with `refs/heads`. By sending both, the response will include all
-  // references that match either pattern. 
+  // references that match either pattern.
   repeated bytes include_referenced_by = 18; // protolint:disable:this REPEATED_FIELD_NAMES_PLURALIZED
 }
 
diff --git a/protos/diff.proto b/protos/diff.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL2RpZmYucHJvdG8=..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL2RpZmYucHJvdG8= 100644
--- a/protos/diff.proto
+++ b/protos/diff.proto
@@ -265,6 +265,20 @@
 // to its parent. Merge commits will show files which are different to all of
 // its parents.
 message FindChangedPathsRequest {
+  // MergeCommitDiffMode controls which mode to use to produce diff output for merge commits
+  enum MergeCommitDiffMode {
+    // MERGE_COMMIT_DIFF_MODE_UNSPECIFIED is the default value.
+    // It is equivalent to DIFF_MODE_INCLUDE_MERGES.
+    MERGE_COMMIT_DIFF_MODE_UNSPECIFIED = 0;
+    // MERGE_COMMIT_DIFF_MODE_INCLUDE_MERGES tells git to also show differences for merge commits.
+    // Please refer to the documentation of the `-m` flag of git-diff-tree(1).
+    MERGE_COMMIT_DIFF_MODE_INCLUDE_MERGES = 1;
+    // MERGE_COMMIT_DIFF_MODE_ALL_PARENTS tells git to only show differences for
+    // files which were modified from all parents.
+    // Please refer to the documentation of the `-c` flag of git-diff-tree(1).
+    MERGE_COMMIT_DIFF_MODE_ALL_PARENTS = 2;
+  }
+
   // Request is a single request to pass to git diff-tree.
   message Request {
     // TreeRequest compares two trees.
@@ -305,7 +319,10 @@
   repeated string commits = 2 [deprecated=true];
   // requests specifies the requests of what to compare.
   repeated Request requests = 3;
+
+  // MergeCommitDiffMode controls how merge commits are treated.
+  MergeCommitDiffMode merge_commit_diff_mode = 4;
 }
 
 // Returns a list of files that have been changed in the commits given
 message FindChangedPathsResponse {
@@ -308,8 +325,10 @@
 }
 
 // Returns a list of files that have been changed in the commits given
 message FindChangedPathsResponse {
-  // This comment is left unintentionally blank.
+  // paths contains the attributes for one changed file. In case of merge
+  // commits, or when comparing three or more commits, a file might be included
+  // more than once if it was changed between multiple commits.
   repeated ChangedPaths paths = 1;
 }
 
diff --git a/protos/hook.proto b/protos/hook.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL2hvb2sucHJvdG8=..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL2hvb2sucHJvdG8= 100644
--- a/protos/hook.proto
+++ b/protos/hook.proto
@@ -162,7 +162,9 @@
   string gl_username = 5;
   // GitProtocol is the protocol used for the fetch
   string git_protocol = 6;
-
+  // RemoteIP is the original IP of the initator of the fetch. This field is used as the key for
+  // concurrency limiting before we trigger git-pack-objects command
+  string remote_ip = 7;
 }
 
 // This comment is left unintentionally blank.
diff --git a/protos/log.proto b/protos/log.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL2xvZy5wcm90bw==..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL2xvZy5wcm90bw== 100644
--- a/protos/log.proto
+++ b/protos/log.proto
@@ -27,6 +27,14 @@
     bytes reference_name = 1;
   }
 
+  // CustomHooksUpdate models an update to the custom hooks.
+  message CustomHooksUpdate {
+    // custom_hooks_tar is a TAR that contains the custom hooks in
+    // `custom_hooks` directory. The contents of the directory are
+    // unpacked as the custom hooks.
+    bytes custom_hooks_tar = 1;
+  }
+
   // reference_updates contains the reference updates this log
   // entry records. The logged reference updates have already passed
   // through verification and are applied without any further checks.
@@ -34,6 +42,8 @@
   // default_branch_update contains the information pertaining to updating
   // the default branch of the repo.
   DefaultBranchUpdate default_branch_update = 2;
+  // CustomHooksUpdate contains the custom hooks to set in the repository.
+  CustomHooksUpdate custom_hooks_update = 3;
 }
 
 // LogIndex serializes a log index. It's used for storing a repository's
diff --git a/protos/objectpool.proto b/protos/objectpool.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL29iamVjdHBvb2wucHJvdG8=..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL29iamVjdHBvb2wucHJvdG8= 100644
--- a/protos/objectpool.proto
+++ b/protos/objectpool.proto
@@ -57,19 +57,6 @@
     };
   }
 
-  // ReduplicateRepository will repack the objects in the object pool member so that the repository
-  // does not depend on the pool member anymore and can be removed from it. Note that this function
-  // is not safe for use.
-  //
-  // This RPC is deprecated. Please use DisconnectGitAlternates instead.  It will be removed in
-  // Gitaly v16.0, refer to https://gitlab.com/gitlab-org/gitaly/-/issues/4655.
-  rpc ReduplicateRepository(ReduplicateRepositoryRequest) returns (ReduplicateRepositoryResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MUTATOR
-    };
-  }
-
   // DisconnectGitAlternates will disconnect the object pool member from its object pool. It will:
   //
   // 1. Link all objects from the object pool into the member repository. This essenitally
@@ -145,16 +132,6 @@
 message LinkRepositoryToObjectPoolResponse {
 }
 
-// ReduplicateRepositoryRequest is a request for the ReduplicateRepository RPC.
-message ReduplicateRepositoryRequest {
-  // Repository is the repository whose objects shall be reduplicated.
-  Repository repository = 1 [(target_repository)=true];
-}
-
-// ReduplicateRepositoryResponse is a response for the ReduplicateRepository RPC.
-message ReduplicateRepositoryResponse {
-}
-
 // DisconnectGitAlternatesRequest is a request for the DisconnectGitAlternates RPC.
 message DisconnectGitAlternatesRequest {
   // Repository is th repository that shall be disconnected from its object pool.
diff --git a/protos/operations.proto b/protos/operations.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL29wZXJhdGlvbnMucHJvdG8=..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL29wZXJhdGlvbnMucHJvdG8= 100644
--- a/protos/operations.proto
+++ b/protos/operations.proto
@@ -181,9 +181,11 @@
 message UserCreateBranchResponse {
   // This comment is left unintentionally blank.
   Branch branch = 1;
-  // pre_receive_error is deprecated and never set by Gitaly. Instead, Gitaly returns a structured
-  // error with the `custom_hook` field set. This field will be removed in v16.0.
-  string pre_receive_error = 2 [deprecated=true];
+
+  // PreReceiveError had previously been set when creation of the branch was refused by hooks.
+  // Instead, Gitaly returns a structured error with the `custom_hook` field set.
+  reserved "pre_receive_error";
+  reserved 2;
 }
 
 // UserCreateBranchError is an error returned by the UserCreateBranch RPC in some specific well
@@ -240,9 +242,11 @@
 
 // UserDeleteBranchResponse is a response for the UserDeleteBranch RPC.
 message UserDeleteBranchResponse {
-  // PreReceiveError is never set anymore. This RPC will instead return a UserDeleteBranchError for
-  // a subset of well-defined error cases. This field will be removed in v16.0.
-  string pre_receive_error = 1 [deprecated=true];
+  // PreReceiveError had previously been set in case access checks refused the branch deletion. This
+  // has been changed to instead we return a proper gRPC error with UserDeleteBranchError details
+  // set to an AccessCheckError.
+  reserved "pre_receive_error";
+  reserved 1;
 }
 
 // UserDeleteBranchError is an error returned by the UserDeleteBranch RPC in some specific well
@@ -310,13 +314,17 @@
 message UserCreateTagResponse {
   // tag is the newly created tag.
   Tag tag = 1;
-  // exists is deprecated and never set by Gitaly. Instead, Gitaly returns a structured error with
-  // the `reference_exists` field set. This field will be removed in v16.0.
-  bool exists = 2 [deprecated=true];
-  // pre_receive_error is deprecated and never set by Gitaly. Instead, Gitaly returns a structured
-  // error with either of the `access_check`, `reference_update` or `custom_hook` fields being set
-  // depending on the error condition. This field will be removed in v16.0.
-  string pre_receive_error = 3 [deprecated=true];
+
+  // Exists had previously been set in case the tag exists already. Instead, Gitaly returns a
+  // structured error with the `reference_exists` field set now.
+  reserved "exists";
+  reserved 2;
+
+  // PreReceiveError had previously been set in case access checks refused the branch deletion. This
+  // has been changed to instead we return a proper gRPC error with UserDeleteBranchError details
+  // set to an AccessCheckError.
+  reserved "pre_receive_error";
+  reserved 3;
 }
 
 // UserCreateTagError includes error descriptions which may be set as error details in case
@@ -534,17 +542,5 @@
 
 // This comment is left unintentionally blank.
 message UserCherryPickResponse {
-  // CreateTreeError represents an error which happened when computing the
-  // cherry-pick.
-  enum CreateTreeError {
-    // NONE denotes that no error occurred.
-    NONE = 0; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH
-    // EMPTY denotes that the cherry-pick would've resulted in an empty commit,
-    // typically because it has already been applied to the target branch.
-    EMPTY = 1; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX
-    // CONFLICT denotes that the cherry-pick resulted in a conflict.
-    CONFLICT = 2; // protolint:disable:this ENUM_FIELD_NAMES_PREFIX
-  }
-
   // branch_update represents details about the updated branch.
   OperationBranchUpdate branch_update = 1;
@@ -549,18 +545,22 @@
   // branch_update represents details about the updated branch.
   OperationBranchUpdate branch_update = 1;
-  // create_tree_error is deprecated and never set by Gitaly. Instead, Gitaly returns a structured
-  // error with the `cherry_pick_conflict` or `changes_already_applied` field set. This field will
-  // be removed in v16.0.
-  string create_tree_error = 2 [deprecated=true];
-  // commit_error is deprecated and never set by Gitaly. Instead, Gitaly returns a structured
-  // error with the `target_branch_diverged` field set. This field will be removed in v16.0.
-  string commit_error = 3 [deprecated=true];
-  // pre_receive_error is deprecated and never set by Gitaly. Instead, Gitaly returns a structured
-  // error with the `access_check` field set. This field will be removed in v16.0.
-  string pre_receive_error = 4 [deprecated=true];
-  // create_tree_error_code is deprecated and never set by Gitaly. There is no replacement. This
-  // field will be removed in v16.0.
-  CreateTreeError create_tree_error_code = 5 [deprecated=true];
+
+  // CreateTreeError has previously been set when creating the tree failed. Instead, Gitaly returns
+  // a structured error with the `cherry_pick_conflict` or `changes_already_applied` field set.
+  reserved "create_tree_error";
+  reserved 2;
+  // CommitError has previously been set when creating the commit failed. Instead, Gitaly returns a
+  // structured error with the `target_branch_diverged` field set.
+  reserved "commit_error";
+  reserved 3;
+  // PreReceiveError has previously been set when access checks have refused the cherry-pick.
+  // Instead, Gitaly returns a structured error with the `access_check` field set.
+  reserved "pre_receive_error";
+  reserved 4;
+  // CreateTreeError code was previously set to denote why creating the tree has failed. There is no
+  // replacement.
+  reserved "create_tree_error_code";
+  reserved 5;
 }
 
 // UserCherryPickError is an error returned by the UserCherryPick RPC.
diff --git a/protos/ref.proto b/protos/ref.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL3JlZi5wcm90bw==..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL3JlZi5wcm90bw== 100644
--- a/protos/ref.proto
+++ b/protos/ref.proto
@@ -129,14 +129,6 @@
     };
   }
 
-  // PackRefs is deprecated in favor of OptimizeRepository.
-  rpc PackRefs(PackRefsRequest) returns (PackRefsResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
   // ListRefs returns a stream of all references in the repository. By default, pseudo-revisions like HEAD
   // will not be returned by this RPC. Any symbolic references will be resolved to the object ID it is
   // pointing at.
@@ -545,20 +537,6 @@
   repeated Branch branches = 1;
 }
 
-// This comment is left unintentionally blank.
-message PackRefsRequest {
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-
-  // DEPRECATED: https://gitlab.com/gitlab-org/gitaly/-/issues/3997
-  reserved 2;
-  reserved "all_refs";
-}
-
-// This comment is left unintentionally blank.
-message PackRefsResponse{
-}
-
 // ListRefsRequest is a request for the ListRefs RPC.
 message ListRefsRequest {
   // This comment is left unintentionally blank.
diff --git a/protos/repository.proto b/protos/repository.proto
index a6238b82d2d0ce21d19e3bbc9442e65f5be80d62_cHJvdG9zL3JlcG9zaXRvcnkucHJvdG8=..60137290214a60beb5899af9ab71e13b582394b1_cHJvdG9zL3JlcG9zaXRvcnkucHJvdG8= 100644
--- a/protos/repository.proto
+++ b/protos/repository.proto
@@ -17,7 +17,8 @@
     };
   }
 
-  // RepackIncremental is deprecated in favor of OptimizeRepository.
-  rpc RepackIncremental(RepackIncrementalRequest) returns (RepackIncrementalResponse) {
-    option deprecated = true;
+  // RepositorySize returns information on the complete on-disk repository size. If you need more
+  // detailed information about the size of various sub-structures you should instead use the
+  // RepositoryInfo RPC.
+  rpc RepositorySize(RepositorySizeRequest) returns (RepositorySizeResponse) {
     option (op_type) = {
@@ -23,13 +24,5 @@
     option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
-  // RepackFull is deprecated in favor of OptimizeRepository.
-  rpc RepackFull(RepackFullRequest) returns (RepackFullResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
+      op: ACCESSOR
     };
   }
 
@@ -33,32 +26,8 @@
     };
   }
 
-  // MidxRepack is deprecated in favor of OptimizeRepository.
-  rpc MidxRepack(MidxRepackRequest) returns (MidxRepackResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
-  // GarbageCollect is deprecated in favor of OptimizeRepository.
-  rpc GarbageCollect(GarbageCollectRequest) returns (GarbageCollectResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
-  // WriteCommitGraph is deprecated in favor of OptimizeRepository.
-  rpc WriteCommitGraph(WriteCommitGraphRequest) returns (WriteCommitGraphResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
-  // This comment is left unintentionally blank.
-  rpc RepositorySize(RepositorySizeRequest) returns (RepositorySizeResponse) {
+  // RepositoryInfo returns detailed information about a repository and its data structures.
+  rpc RepositoryInfo(RepositoryInfoRequest) returns (RepositoryInfoResponse) {
     option (op_type) = {
       op: ACCESSOR
     };
@@ -212,14 +181,6 @@
     };
   }
 
-  // Cleanup is deprecated in favor of OptimizeRepository.
-  rpc Cleanup(CleanupRequest) returns (CleanupResponse) {
-    option deprecated = true;
-    option (op_type) = {
-      op: MAINTENANCE
-    };
-  }
-
   // This comment is left unintentionally blank.
   rpc GetSnapshot(GetSnapshotRequest) returns (stream GetSnapshotResponse) {
     option (op_type) = {
@@ -266,7 +227,7 @@
   }
 
   // SetCustomHooks sets the git hooks for a repository. The hooks are sent in a
-  // tar archive containing a `custom_hooks` directory. This directory is 
+  // tar archive containing a `custom_hooks` directory. This directory is
   // ultimately extracted to the repository.
   rpc SetCustomHooks(stream SetCustomHooksRequest) returns (SetCustomHooksResponse) {
     option (op_type) = {
@@ -390,9 +351,9 @@
   bool exists = 1;
 }
 
-// This comment is left unintentionally blank.
-message RepackIncrementalRequest {
-  // This comment is left unintentionally blank.
+// RepositorySizeRequest is a request for the RepositorySize RPC.
+message RepositorySizeRequest {
+  // Repository is the repository for which to determine the repository size.
   Repository repository = 1 [(target_repository)=true];
 }
 
@@ -396,7 +357,10 @@
   Repository repository = 1 [(target_repository)=true];
 }
 
-// This comment is left unintentionally blank.
-message RepackIncrementalResponse {
+// RepositorySizeResponse is a response for the RepositorySize RPC.
+message RepositorySizeResponse {
+  // Size is the complete size of the on-disk repository in kilobytes. This will include all data
+  // structures and is similar to `du --summarize --bytes $REPO_PATH`.
+  int64 size = 1;
 }
 
@@ -401,20 +365,8 @@
 }
 
-// This comment is left unintentionally blank.
-message RepackFullRequest {
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-  // This comment is left unintentionally blank.
-  bool create_bitmap = 2;
-}
-
-// This comment is left unintentionally blank.
-message RepackFullResponse {
-}
-
-// This comment is left unintentionally blank.
-message MidxRepackRequest {
-  // This comment is left unintentionally blank.
+// RepositoryInfoRequest is a request for the RepositoryInfo RPC.
+message RepositoryInfoRequest {
+  // Repository is the repository to query for information.
   Repository repository = 1 [(target_repository)=true];
 }
 
@@ -418,35 +370,22 @@
   Repository repository = 1 [(target_repository)=true];
 }
 
-// This comment is left unintentionally blank.
-message MidxRepackResponse {
-}
-
-// This comment is left unintentionally blank.
-message GarbageCollectRequest {
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-  // This comment is left unintentionally blank.
-  bool create_bitmap = 2;
-  // If set to 'true' the 'gc' will be triggered with '--prune=30.minutes.ago' flag.
-  // This will remove dangling objects from the object storage that were not modified in the last 30 minutes.
-  // If 'false' provided the 'gc' will rely on the default expiration period (2 weeks).
-  // The window of 30 minutes exists because of possible concurrent operations running on the same
-  // storage and removal of the objects may cause races and fail concurrent operations.
-  bool prune = 3;
-}
-
-// This comment is left unintentionally blank.
-message GarbageCollectResponse {
-}
-
-// This comment is left unintentionally blank.
-message WriteCommitGraphRequest {
-  // This comment is left unintentionally blank.
-  enum SplitStrategy {
-    // SizeMultiple requires to use '--split --size-multiple=4' strategy to create/update commit graph.
-    // https://git-scm.com/docs/git-commit-graph#Documentation/git-commit-graph.txt-emwriteem
-    // It is a default, there is no need to explicitly set it in the request.
-    SizeMultiple = 0; // protolint:disable:this ENUM_FIELD_NAMES_UPPER_SNAKE_CASE ENUM_FIELD_NAMES_PREFIX ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH
+// RepositoryInfoResponse is a response for the RepositoryInfo RPC.
+message RepositoryInfoResponse {
+  // ReferencesInfo hosts information about references.
+  message ReferencesInfo {
+    // LooseCount is the number of loose references that exist in the repository. These references
+    // are written whenever any reference either gets updated or created. Loose references have not
+    // yet been compressed into a packed format, which is an action that Gitaly performs regularly
+    // during repository maintenance.
+    //
+    // We do not provide the total size of loose references as it is a constant factor of the count
+    // anyway: `$count * $object_hash_length`.
+    uint64 loose_count = 1;
+    // PackedSize is the size of packed references in bytes. Packed references are a more efficient
+    // way to store loose references. Given that determining the exact amount of references stored
+    // in packed format would require us to process the complete contents we don't provide the size
+    // here. A very rough estimate would be: `$size / 100`.
+    uint64 packed_size = 2;
   }
 
@@ -451,12 +390,31 @@
   }
 
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-  // SplitStrategy is a strategy used to create/update commit graph.
-  SplitStrategy splitStrategy = 2; // protolint:disable:this FIELD_NAMES_LOWER_SNAKE_CASE
-}
-
-// This comment is left unintentionally blank.
-message WriteCommitGraphResponse {
-}
+  // ObjectsInfo hosts info about objects contained in a repository. It tries to bridge the gap
+  // between the actual on-disk state that is changing over time as Git introduces new ways to
+  // perform repository housekeeping and specific classifications of objects.
+  //
+  // One of the distinctions is between "recent" and "stale" objects. The set of recent objects
+  // contains these objects that have either been recently written/accessed or those which are
+  // reachable via any of the references. Stale objects on the other hand are those that are older
+  // than a certain grace period and which are not reachable via any reference. The exact details
+  // when the set of stale and recent objects is updated is an internal implementation detail of
+  // Gitaly and subject to change. It is safe to assume though that unreachable objects will
+  // eventually be marked stale when repository housekeeping runs on a repository.
+  message ObjectsInfo {
+    // Size is the total size of all objects in the repository in bytes. It makes no distinction
+    // between the way they are stored or whether they are pending deletion.
+    uint64 size = 1;
+    // RecentSize is the total size of all objects in bytes that are considered to be recent. Recent
+    // objects are likely reachable and will not be considered for deletion.
+    uint64 recent_size = 2;
+    // StaleSize is the total size of all objects in bytes that are considered to be stale. Stale
+    // objects are likely unreachable and will eventually be deleted after a grace period. Objects
+    // which are part of cruft packs are always considered to be stale.
+    uint64 stale_size = 3;
+    // KeepSize is the total size of all kept packfiles. Kept packfiles are packfiles that have a
+    // `.keep` file accompanying them. Packfiles marked with such a file will never be deleted by
+    // Git and will thus stay around forever, even if their objects are part of
+    // other packfiles already.
+    uint64 keep_size = 4;
+  }
 
@@ -462,24 +420,11 @@
 
-// This comment is left unintentionally blank.
-message CleanupRequest {
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-}
-
-// This comment is left unintentionally blank.
-message CleanupResponse {
-}
-
-// This comment is left unintentionally blank.
-message RepositorySizeRequest {
-  // This comment is left unintentionally blank.
-  Repository repository = 1 [(target_repository)=true];
-}
-
-// This comment is left unintentionally blank.
-message RepositorySizeResponse {
-  // Repository size in kilobytes
-  int64 size = 1;
+  // Size is the total size of all files part of the repository. It does not include the size of
+  // directories.
+  uint64 size = 1;
+  // References contains information about references.
+  ReferencesInfo references = 2;
+  // ObjectsInfo contains information about objects.
+  ObjectsInfo objects = 3;
 }
 
 // ObjectFormatRequest is a request for the ObjectFormat RPC.