hgitaly 18.4.1__tar.gz → 18.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. {hgitaly-18.4.1/hgitaly.egg-info → hgitaly-18.5.0}/PKG-INFO +3 -3
  2. hgitaly-18.5.0/hgitaly/VERSION +1 -0
  3. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/scripts.py +5 -1
  4. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/mono.py +6 -0
  5. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/commit.py +2 -2
  6. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/diff.py +2 -1
  7. hgitaly-18.5.0/hgitaly/service/mercurial_namespace.py +101 -0
  8. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_commit.py +3 -2
  9. hgitaly-18.5.0/hgitaly/service/tests/test_mercurial_namespace.py +93 -0
  10. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/analysis_pb2_grpc.py +1 -1
  11. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/blob_pb2_grpc.py +1 -1
  12. hgitaly-18.5.0/hgitaly/stub/commit_pb2.py +265 -0
  13. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/commit_pb2_grpc.py +1 -1
  14. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/diff_pb2_grpc.py +1 -1
  15. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/errors_pb2_grpc.py +1 -1
  16. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/lint_pb2_grpc.py +1 -1
  17. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_aux_git_pb2.py +12 -3
  18. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_aux_git_pb2_grpc.py +46 -1
  19. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_changeset_pb2_grpc.py +1 -1
  20. hgitaly-18.5.0/hgitaly/stub/mercurial_namespace_pb2.py +42 -0
  21. hgitaly-18.5.0/hgitaly/stub/mercurial_namespace_pb2_grpc.py +143 -0
  22. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_operations_pb2_grpc.py +1 -1
  23. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_repository_pb2_grpc.py +1 -1
  24. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/operations_pb2_grpc.py +1 -1
  25. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/ref_pb2_grpc.py +1 -1
  26. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/remote_pb2_grpc.py +1 -1
  27. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/repository_pb2_grpc.py +1 -1
  28. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/server_pb2_grpc.py +1 -1
  29. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/shared_pb2_grpc.py +1 -1
  30. {hgitaly-18.4.1 → hgitaly-18.5.0/hgitaly.egg-info}/PKG-INFO +3 -3
  31. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly.egg-info/SOURCES.txt +4 -0
  32. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly.egg-info/requires.txt +2 -2
  33. {hgitaly-18.4.1 → hgitaly-18.5.0}/install-requirements.txt +2 -2
  34. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_commit.py +11 -0
  35. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_mercurial_aux_git.py +42 -0
  36. hgitaly-18.4.1/hgitaly/VERSION +0 -1
  37. hgitaly-18.4.1/hgitaly/stub/commit_pb2.py +0 -265
  38. {hgitaly-18.4.1 → hgitaly-18.5.0}/LICENSE +0 -0
  39. {hgitaly-18.4.1 → hgitaly-18.5.0}/MANIFEST.in +0 -0
  40. {hgitaly-18.4.1 → hgitaly-18.5.0}/README.md +0 -0
  41. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/__init__.py +0 -0
  42. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/hgitaly/__init__.py +0 -0
  43. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/hgitaly/revset.py +0 -0
  44. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/hgitaly/tests/__init__.py +0 -0
  45. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/hgitaly/tests/test_revset.py +0 -0
  46. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgext3rd/hgitaly/tests/test_serve.py +0 -0
  47. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/__init__.py +0 -0
  48. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/branch.py +0 -0
  49. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/changelog.py +0 -0
  50. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/diff.py +0 -0
  51. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/errors.py +0 -0
  52. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/feature.py +0 -0
  53. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/file_content.py +0 -0
  54. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/file_context.py +0 -0
  55. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/git.py +0 -0
  56. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/gitlab_ref.py +0 -0
  57. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/identification.py +0 -0
  58. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/logging.py +0 -0
  59. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/manifest.py +0 -0
  60. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/message.py +0 -0
  61. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/oid.py +0 -0
  62. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/pagination.py +0 -0
  63. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/path.py +0 -0
  64. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/peer.py +0 -0
  65. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/procutil.py +0 -0
  66. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/repository.py +0 -0
  67. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/revision.py +0 -0
  68. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/revset.py +0 -0
  69. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/__init__.py +0 -0
  70. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/address.py +0 -0
  71. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/prefork.py +0 -0
  72. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/tests/__init__.py +0 -0
  73. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/tests/test_address.py +0 -0
  74. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/tests/test_mono.py +0 -0
  75. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/tests/test_prefork.py +0 -0
  76. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/tests/test_worker.py +0 -0
  77. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/server/worker.py +0 -0
  78. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/__init__.py +0 -0
  79. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/analysis.py +0 -0
  80. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/blob.py +0 -0
  81. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/interceptors.py +0 -0
  82. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/mercurial_changeset.py +0 -0
  83. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/mercurial_operations.py +0 -0
  84. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/mercurial_repository.py +0 -0
  85. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/operations.py +0 -0
  86. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/ref.py +0 -0
  87. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/repository.py +0 -0
  88. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/server.py +0 -0
  89. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/__init__.py +0 -0
  90. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/fixture.py +0 -0
  91. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_analysis.py +0 -0
  92. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_blob.py +0 -0
  93. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_default_branch.py +0 -0
  94. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_diff.py +0 -0
  95. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_mercurial_changeset.py +0 -0
  96. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_mercurial_operations.py +0 -0
  97. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_mercurial_repository.py +0 -0
  98. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_operations.py +0 -0
  99. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_ref.py +0 -0
  100. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_repository_service.py +0 -0
  101. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/service/tests/test_server.py +0 -0
  102. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/servicer.py +0 -0
  103. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/ssh.py +0 -0
  104. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stream.py +0 -0
  105. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/__init__.py +0 -0
  106. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/analysis_pb2.py +0 -0
  107. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/blob_pb2.py +0 -0
  108. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/diff_pb2.py +0 -0
  109. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/errors_pb2.py +0 -0
  110. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/lint_pb2.py +0 -0
  111. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_changeset_pb2.py +0 -0
  112. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_operations_pb2.py +0 -0
  113. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/mercurial_repository_pb2.py +0 -0
  114. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/operations_pb2.py +0 -0
  115. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/ref_pb2.py +0 -0
  116. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/remote_pb2.py +0 -0
  117. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/repository_pb2.py +0 -0
  118. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/server_pb2.py +0 -0
  119. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/stub/shared_pb2.py +0 -0
  120. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tag.py +0 -0
  121. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/__init__.py +0 -0
  122. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/bundle.py +0 -0
  123. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/context.py +0 -0
  124. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/grpc.py +0 -0
  125. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/multiprocessing.py +0 -0
  126. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/repo.py +0 -0
  127. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/ssh.py +0 -0
  128. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/sshd.py +0 -0
  129. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/storage.py +0 -0
  130. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/tests/__init__.py +0 -0
  131. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/testing/tests/test_sshd.py +0 -0
  132. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/__init__.py +0 -0
  133. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/common.py +0 -0
  134. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_branch.py +0 -0
  135. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_diff.py +0 -0
  136. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_errors.py +0 -0
  137. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_feature.py +0 -0
  138. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_file_context.py +0 -0
  139. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_gitlab_ref.py +0 -0
  140. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_identification.py +0 -0
  141. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_manifest.py +0 -0
  142. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_messages.py +0 -0
  143. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_oid.py +0 -0
  144. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_peer.py +0 -0
  145. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_repository.py +0 -0
  146. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_revision.py +0 -0
  147. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_revset.py +0 -0
  148. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_servicer.py +0 -0
  149. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_stream.py +0 -0
  150. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_tag.py +0 -0
  151. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/tests/test_workdir.py +0 -0
  152. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/util.py +0 -0
  153. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly/workdir.py +0 -0
  154. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly.egg-info/dependency_links.txt +0 -0
  155. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly.egg-info/entry_points.txt +0 -0
  156. {hgitaly-18.4.1 → hgitaly-18.5.0}/hgitaly.egg-info/top_level.txt +0 -0
  157. {hgitaly-18.4.1 → hgitaly-18.5.0}/setup.cfg +0 -0
  158. {hgitaly-18.4.1 → hgitaly-18.5.0}/setup.py +0 -0
  159. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/__init__.py +0 -0
  160. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/comparison.py +0 -0
  161. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/conftest.py +0 -0
  162. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/gitaly.py +0 -0
  163. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/hgitaly_rhgitaly_comparison.py +0 -0
  164. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/rhgitaly.py +0 -0
  165. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_blob_tree.py +0 -0
  166. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_comparison.py +0 -0
  167. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_diff.py +0 -0
  168. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_gitaly_server.py +0 -0
  169. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_mercurial_operations.py +0 -0
  170. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_mercurial_repository.py +0 -0
  171. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_operations.py +0 -0
  172. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_ref.py +0 -0
  173. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_remote.py +0 -0
  174. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_repository_service.py +0 -0
  175. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_rhgitaly_server.py +0 -0
  176. {hgitaly-18.4.1 → hgitaly-18.5.0}/tests_with_gitaly/test_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hgitaly
3
- Version: 18.4.1
3
+ Version: 18.5.0
4
4
  Summary: Server-side implementation of Gitaly protocol for Mercurial
5
5
  Home-page: https://foss.heptapod.net/heptapod/hgitaly
6
6
  Author: Georges Racinet
@@ -12,8 +12,8 @@ Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: heptapod>=5.4.0
14
14
  Requires-Dist: protobuf~=6.31.1
15
- Requires-Dist: grpcio~=1.74.0
16
- Requires-Dist: grpcio-status~=1.74.0
15
+ Requires-Dist: grpcio~=1.75.0
16
+ Requires-Dist: grpcio-status~=1.75.0
17
17
  Requires-Dist: grpc-interceptor
18
18
  Requires-Dist: grpcio-health-checking
19
19
  Requires-Dist: hg-loggingmod>=0.4.1
@@ -0,0 +1 @@
1
+ 18.5.0
@@ -197,6 +197,7 @@ def stats(): # pragma no cover
197
197
  incomplete = total_requests - sum(len(succ) for succ in succeeded.values())
198
198
 
199
199
  stats = []
200
+ all_total_ms = 0
200
201
  for req, count in called.items():
201
202
  percent = round(count * 100 / total_requests)
202
203
  succ = succeeded[req]
@@ -208,10 +209,12 @@ def stats(): # pragma no cover
208
209
  )
209
210
  stats.append((req, req_stats))
210
211
  if nb_succ > 0:
212
+ req_total = sum(s for s in succ)
213
+ all_total_ms += req_total
211
214
  timing = req_stats['completion_stats_ms'] = dict(
212
215
  mean=statistics.mean(succ),
213
216
  median=statistics.median(succ),
214
- total=sum(s for s in succ),
217
+ total=req_total,
215
218
  )
216
219
  if nb_succ > 1:
217
220
  timing['standard_deviation'] = statistics.pstdev(succ)
@@ -246,6 +249,7 @@ def stats(): # pragma no cover
246
249
 
247
250
  print(f"TOTAL Requests since {first_timestamp}: {total_requests} \n"
248
251
  f" {incomplete} incomplete (cancelled or failed)")
252
+ print("Total wall time: %d seconds" % int(all_total_ms / 1000))
249
253
  print("Breakdown:")
250
254
  for req, details in stats.items():
251
255
  percent = '%4.1f' % details['percent']
@@ -36,6 +36,7 @@ from ..service.commit import CommitServicer
36
36
  from ..service.ref import RefServicer
37
37
  from ..service.diff import DiffServicer
38
38
  from ..service.mercurial_changeset import MercurialChangesetServicer
39
+ from ..service.mercurial_namespace import MercurialNamespaceServicer
39
40
  from ..service.mercurial_operations import MercurialOperationsServicer
40
41
  from ..service.mercurial_repository import MercurialRepositoryServicer
41
42
  from ..service.operations import OperationServicer
@@ -56,6 +57,9 @@ from ..stub.operations_pb2_grpc import (
56
57
  from ..stub.mercurial_changeset_pb2_grpc import (
57
58
  add_MercurialChangesetServiceServicer_to_server
58
59
  )
60
+ from ..stub.mercurial_namespace_pb2_grpc import (
61
+ add_MercurialNamespaceServiceServicer_to_server
62
+ )
59
63
  from ..stub.mercurial_operations_pb2_grpc import (
60
64
  add_MercurialOperationsServiceServicer_to_server
61
65
  )
@@ -105,6 +109,8 @@ def init(listen_urls, storages):
105
109
  add_DiffServiceServicer_to_server(DiffServicer(storages), server)
106
110
  add_MercurialChangesetServiceServicer_to_server(
107
111
  MercurialChangesetServicer(storages), server)
112
+ add_MercurialNamespaceServiceServicer_to_server(
113
+ MercurialNamespaceServicer(storages), server)
108
114
  add_MercurialOperationsServiceServicer_to_server(
109
115
  MercurialOperationsServicer(storages), server)
110
116
  add_MercurialRepositoryServiceServicer_to_server(
@@ -148,7 +148,7 @@ class CommitServicer(CommitServiceServicer, HGitalyServicer):
148
148
  try:
149
149
  ancestor = repo[request.ancestor_id.encode()]
150
150
  child = repo[request.child_id.encode()]
151
- except error.RepoLookupError as exc:
151
+ except (error.RepoLookupError, error.ProgrammingError) as exc:
152
152
  # Gitaly just returns False. This is probably an inconsistency
153
153
  # in the client, so let's log it to help.
154
154
  logger.warning(
@@ -925,7 +925,7 @@ class CommitServicer(CommitServiceServicer, HGitalyServicer):
925
925
  sort_key = b'-topo' if reverse else b'topo'
926
926
  elif request.order == Order.DATE:
927
927
  # See docstring about this approximative choice
928
- sort_key = b'-date' if reverse else b'date'
928
+ sort_key = b'date' if reverse else b'-date'
929
929
 
930
930
  revset = b'sort(%s, %s)' % (revset, sort_key)
931
931
 
@@ -279,7 +279,8 @@ class DiffServicer(DiffServiceServicer, HGitalyServicer):
279
279
  parsed_request = parse_diff_request(self, request, context)
280
280
  parsed, repo, ctx_from, ctx_to = parsed_request
281
281
  if not parsed:
282
- context.abort(StatusCode.FAILED_PRECONDITION, "exit status 128")
282
+ context.abort(StatusCode.FAILED_PRECONDITION,
283
+ "eachDiff: exit status 128")
283
284
 
284
285
  m = None
285
286
  if request.paths:
@@ -0,0 +1,101 @@
1
+ # Copyright 2025 Georges Racinet <georges.racinet@cloudcrane.io>
2
+ #
3
+ # This software may be used and distributed according to the terms of the
4
+ # GNU General Public License version 2 or any later version.
5
+ #
6
+ # SPDX-License-Identifier: GPL-2.0-or-later
7
+ import logging
8
+ import os
9
+ import tarfile
10
+ import tempfile
11
+
12
+ from grpc import StatusCode
13
+
14
+ from ..logging import LoggerAdapter
15
+ from ..stream import (
16
+ WRITE_BUFFER_SIZE,
17
+ streaming_request_tempfile_extract,
18
+ )
19
+ from ..stub.mercurial_namespace_pb2 import (
20
+ MercurialNamespacesConfigArchive,
21
+ RestoreMercurialNamespacesConfigResponse,
22
+ )
23
+ from ..stub.mercurial_namespace_pb2_grpc import (
24
+ MercurialNamespaceServiceServicer,
25
+ )
26
+ from ..servicer import HGitalyServicer
27
+
28
+ base_logger = logging.getLogger(__name__)
29
+
30
+
31
+ class MercurialNamespaceServicer(MercurialNamespaceServiceServicer,
32
+ HGitalyServicer):
33
+ """MercurialNamespaceService implementation.
34
+
35
+ The ordering of methods in this source file is the same as in the proto
36
+ file.
37
+ """
38
+
39
+ def unique_storage_root(self, context):
40
+ if len(self.storages) > 1: # pragma no cover
41
+ # we will need something to accomodate the case where
42
+ # several storages are in a common root directory
43
+ # or just have HGitaly (like RHGitaly) handle only one storage,
44
+ # but it is not the GitLab standard.
45
+ # another option (quite premature) is to accept the fact that
46
+ # this will be duplicated for each storage, not only each
47
+ # server.
48
+ context.abort(
49
+ StatusCode.FAILED_PRECONDITION,
50
+ "cannot efficiently backup namespaces configurations "
51
+ "when handling several storages"
52
+ )
53
+ return next(iter(self.storages.values()))
54
+
55
+ def BackupMercurialNamespacesConfig(self, request, context):
56
+ logger = LoggerAdapter(base_logger, context)
57
+ root = self.unique_storage_root(context)
58
+ with tempfile.TemporaryFile() as tmpf:
59
+ with tarfile.open(fileobj=tmpf, mode='w:gz') as tarf:
60
+ for tld in os.listdir(root):
61
+ if tld in (b'+gitaly', b'+hgitaly', b'@hashed'):
62
+ continue
63
+ tld_abs = os.path.join(root, tld)
64
+ if not os.path.isdir(tld_abs):
65
+ continue
66
+ if b'.hg' in os.listdir(tld_abs):
67
+ # This is a Mercurial repository, should not
68
+ # happen in normal operation, but it does in tests
69
+ # let's bail
70
+ continue
71
+
72
+ logger.debug("Dumping namespace hgrc files for "
73
+ "top-level dir %r", tld)
74
+ for (dir_abspath, subdirs, files) in os.walk(tld_abs):
75
+ if b'hgrc' in files:
76
+ file_abspath = os.path.join(dir_abspath, b'hgrc')
77
+ file_relpath = os.path.relpath(file_abspath,
78
+ root)
79
+ # tarfile wants to operate on str, not bytes
80
+ tarf.add(file_abspath,
81
+ arcname=os.fsdecode(file_relpath))
82
+ tmpf.seek(0)
83
+ first = True
84
+ while True:
85
+ chunk = tmpf.read(WRITE_BUFFER_SIZE)
86
+ if not chunk and not first:
87
+ break
88
+ first = False
89
+ yield MercurialNamespacesConfigArchive(data=chunk)
90
+
91
+ def RestoreMercurialNamespacesConfig(self, request, context):
92
+ logger = LoggerAdapter(base_logger, context)
93
+ with streaming_request_tempfile_extract(
94
+ request, context) as (_options, tmpf):
95
+ tmpf.flush()
96
+ logger.info("Extracting tarball for Namespaces hgrc files")
97
+ with tarfile.open(fileobj=tmpf, mode='r:gz') as tarf:
98
+ # The client being the Rails app, it is deeply trusted
99
+ tarf.extractall(
100
+ path=os.fsdecode(self.unique_storage_root(context)))
101
+ return RestoreMercurialNamespacesConfigResponse()
@@ -1362,8 +1362,9 @@ def test_list_commits(commit_fixture_empty_repo):
1362
1362
  # orderings
1363
1363
  Order = ListCommitsRequest.Order
1364
1364
  assert list_commits(sha4, order=Order.TOPO) == [sha4, sha3, sha2, sha0]
1365
- # having no explicit date, ctx0 looks to be the most recent one.
1366
- assert list_commits(sha4, order=Order.DATE) == [sha2, sha3, sha4, sha0]
1365
+ # being the only one with no explicit date, ctx0 looks to be
1366
+ # the most recent one.
1367
+ assert list_commits(sha4, order=Order.DATE) == [sha0, sha4, sha3, sha2]
1367
1368
 
1368
1369
  # no result
1369
1370
  assert list_commits(sha4, caret(ctx4)) == []
@@ -0,0 +1,93 @@
1
+ # Copyright 2025 Georges Racinet <georges.racinet@cloudcrane.io>
2
+ #
3
+ # This software may be used and distributed according to the terms of the
4
+ # GNU General Public License version 2 or any later version.
5
+ #
6
+ # SPDX-License-Identifier: GPL-2.0-or-later
7
+ import tarfile
8
+ import os
9
+ import shutil
10
+
11
+ import pytest
12
+
13
+ from hgitaly.stub.mercurial_namespace_pb2 import (
14
+ MercurialNamespacesConfigArchive,
15
+ BackupMercurialNamespacesConfigRequest,
16
+ )
17
+ from hgitaly.stub.mercurial_namespace_pb2_grpc import (
18
+ MercurialNamespaceServiceStub,
19
+ )
20
+
21
+ from .fixture import ServiceFixture
22
+
23
+ parametrize = pytest.mark.parametrize
24
+
25
+
26
+ class NamespaceFixture(ServiceFixture):
27
+ stub_cls = MercurialNamespaceServiceStub
28
+
29
+ def backup(self, target, **kw):
30
+ with open(target, 'wb') as targetf:
31
+ for resp in self.stub.BackupMercurialNamespacesConfig(
32
+ BackupMercurialNamespacesConfigRequest(**kw)):
33
+ targetf.write(resp.data)
34
+
35
+ def restore(self, tarball, **kw):
36
+ with open(tarball, 'rb') as fobj:
37
+ def gen():
38
+ while True:
39
+ r = fobj.read(100)
40
+ yield MercurialNamespacesConfigArchive(data=r)
41
+ if not r:
42
+ break
43
+
44
+ return self.stub.RestoreMercurialNamespacesConfig(gen())
45
+
46
+
47
+ @pytest.fixture
48
+ def namespace_fixture(grpc_channel, server_repos_root):
49
+ with NamespaceFixture(grpc_channel, server_repos_root) as fixture:
50
+ yield fixture
51
+
52
+
53
+ def test_backup_restore(namespace_fixture, server_repos_root, tmpdir):
54
+ fixture = namespace_fixture
55
+
56
+ group1 = server_repos_root / 'default/group1'
57
+ group2 = server_repos_root / 'default/group2'
58
+ group3 = server_repos_root / 'default/group3'
59
+ subgroup = group2 / 'sub'
60
+ os.makedirs(group1)
61
+ os.makedirs(subgroup)
62
+ os.makedirs(group3)
63
+ (group1 / 'hgrc').write_text("something\n")
64
+ (group2 / 'hgrc').write_text("some for two\n")
65
+ include = "%include ../hgrc\n"
66
+ (subgroup / 'hgrc').write_text(include)
67
+ # there is a repo at storage root (part of standard fixture),
68
+ # let's add some more stuff that we do not want
69
+ hashed = server_repos_root / 'default/@hashed'
70
+ os.makedirs(hashed)
71
+ (hashed / 'hgrc').write_text("unwnated\n")
72
+ (server_repos_root / 'default/stray-file').write_text(
73
+ "ignore top-level files")
74
+
75
+ tarball = tmpdir / 'testbak1.tgz'
76
+ fixture.backup(tmpdir / 'testbak1.tgz')
77
+
78
+ with tarfile.open(tarball) as tarf:
79
+ assert set(tarf.getnames()) == {
80
+ 'group1/hgrc',
81
+ 'group2/hgrc',
82
+ 'group2/sub/hgrc',
83
+ }
84
+
85
+ shutil.rmtree(group1)
86
+ shutil.rmtree(group2)
87
+ shutil.rmtree(group3)
88
+ fixture.restore(tarball)
89
+
90
+ assert (group1 / 'hgrc').read_text() == "something\n"
91
+ assert (group2 / 'hgrc').read_text() == "some for two\n"
92
+ assert (subgroup / 'hgrc').read_text() == include
93
+ assert not group3.exists()
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from . import analysis_pb2 as analysis__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.74.0'
8
+ GRPC_GENERATED_VERSION = '1.75.1'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11
 
@@ -5,7 +5,7 @@ import warnings
5
5
 
6
6
  from . import blob_pb2 as blob__pb2
7
7
 
8
- GRPC_GENERATED_VERSION = '1.74.0'
8
+ GRPC_GENERATED_VERSION = '1.75.1'
9
9
  GRPC_VERSION = grpc.__version__
10
10
  _version_not_supported = False
11
11
 
@@ -0,0 +1,265 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: commit.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'commit.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from . import errors_pb2 as errors__pb2
26
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
27
+ from . import lint_pb2 as lint__pb2
28
+ from . import shared_pb2 as shared__pb2
29
+
30
+
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommit.proto\x12\x06gitaly\x1a\x0c\x65rrors.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\nlint.proto\x1a\x0cshared.proto\"\xf1\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\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\x0f\n\x07reverse\x18\x0b \x01(\x08\x12\x13\n\x0bignore_case\x18\x0c \x01(\x08\x12\x1f\n\x17\x63ommit_message_patterns\x18\r \x03(\x0c\x12\x0c\n\x04skip\x18\x0e \x01(\r\x12\r\n\x05paths\x18\x0f \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\"W\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\x12\r\n\x05\x66iles\x18\x04 \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\"w\n\x13GetTreeEntriesError\x12\x34\n\x0cresolve_tree\x18\x01 \x01(\x0b\x32\x1c.gitaly.ResolveRevisionErrorH\x00\x12!\n\x04path\x18\x02 \x01(\x0b\x32\x11.gitaly.PathErrorH\x00\x42\x07\n\x05\x65rror\"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\"\xab\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\x18\n\x0c\x64isable_walk\x18\x08 \x01(\x08\x42\x02\x18\x01\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\x12\x15\n\rmessage_regex\x18\x13 \x01(\t\"\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\"\xba\x01\n\x10\x46indCommitsError\x12,\n\nbad_object\x18\x01 \x01(\x0b\x32\x16.gitaly.BadObjectErrorH\x00\x12\x38\n\rambiguous_ref\x18\x02 \x01(\x0b\x32\x1f.gitaly.AmbiguousReferenceErrorH\x00\x12\x35\n\rinvalid_range\x18\x03 \x01(\x0b\x32\x1c.gitaly.InvalidRevisionRangeH\x00\x42\x07\n\x05\x65rror\"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\"\xc4\x01\n\x17\x43ommitLanguagesResponse\x12;\n\tlanguages\x18\x01 \x03(\x0b\x32(.gitaly.CommitLanguagesResponse.Language\x1al\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(\x04\x12\x13\n\x0blanguage_id\x18\x06 \x01(\x03J\x04\x08\x04\x10\x05R\nfile_count\"\x8d\x01\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\x12\x1d\n\x15ignore_revisions_blob\x18\x05 \x01(\x0c\" \n\x10RawBlameResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xc6\x03\n\rRawBlameError\x12\x33\n\x0epath_not_found\x18\x01 \x01(\x0b\x32\x19.gitaly.PathNotFoundErrorH\x00\x12=\n\x0cout_of_range\x18\x02 \x01(\x0b\x32%.gitaly.RawBlameError.OutOfRangeErrorH\x00\x12K\n\x13resolve_ignore_revs\x18\x03 \x01(\x0b\x32,.gitaly.RawBlameError.ResolveIgnoreRevsErrorH\x00\x12X\n\x1ainvalid_ignore_revs_format\x18\x04 \x01(\x0b\x32\x32.gitaly.RawBlameError.InvalidIgnoreRevsFormatErrorH\x00\x1a\'\n\x0fOutOfRangeError\x12\x14\n\x0c\x61\x63tual_lines\x18\x01 \x01(\x04\x1a/\n\x1cInvalidIgnoreRevsFormatError\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\x0c\x1a\x37\n\x16ResolveIgnoreRevsError\x12\x1d\n\x15ignore_revisions_blob\x18\x01 \x01(\x0c\x42\x07\n\x05\x65rror\"\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\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\"\xa9\x02\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\x12:\n\x06signer\x18\x04 \x01(\x0e\x32*.gitaly.GetCommitSignaturesResponse.Signer\x12$\n\x06\x61uthor\x18\x05 \x01(\x0b\x32\x14.gitaly.CommitAuthor\x12\'\n\tcommitter\x18\x06 \x01(\x0b\x32\x14.gitaly.CommitAuthor\"D\n\x06Signer\x12\x16\n\x12SIGNER_UNSPECIFIED\x10\x00\x12\x0f\n\x0bSIGNER_USER\x10\x01\x12\x11\n\rSIGNER_SYSTEM\x10\x02\"\\\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\x01\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/v16/proto/go/gitalypbb\x06proto3')
32
+
33
+ _globals = globals()
34
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
35
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'commit_pb2', _globals)
36
+ if not _descriptor._USE_C_DESCRIPTORS:
37
+ _globals['DESCRIPTOR']._loaded_options = None
38
+ _globals['DESCRIPTOR']._serialized_options = b'Z2gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb'
39
+ _globals['_LISTCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
40
+ _globals['_LISTCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
41
+ _globals['_LISTALLCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
42
+ _globals['_LISTALLCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
43
+ _globals['_COMMITSTATSREQUEST'].fields_by_name['repository']._loaded_options = None
44
+ _globals['_COMMITSTATSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
45
+ _globals['_COMMITISANCESTORREQUEST'].fields_by_name['repository']._loaded_options = None
46
+ _globals['_COMMITISANCESTORREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
47
+ _globals['_TREEENTRYREQUEST'].fields_by_name['repository']._loaded_options = None
48
+ _globals['_TREEENTRYREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
49
+ _globals['_COUNTCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
50
+ _globals['_COUNTCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
51
+ _globals['_COUNTDIVERGINGCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
52
+ _globals['_COUNTDIVERGINGCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
53
+ _globals['_GETTREEENTRIESREQUEST'].fields_by_name['repository']._loaded_options = None
54
+ _globals['_GETTREEENTRIESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
55
+ _globals['_LISTFILESREQUEST'].fields_by_name['repository']._loaded_options = None
56
+ _globals['_LISTFILESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
57
+ _globals['_FINDCOMMITREQUEST'].fields_by_name['repository']._loaded_options = None
58
+ _globals['_FINDCOMMITREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
59
+ _globals['_LISTCOMMITSBYOIDREQUEST'].fields_by_name['repository']._loaded_options = None
60
+ _globals['_LISTCOMMITSBYOIDREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
61
+ _globals['_LISTCOMMITSBYREFNAMEREQUEST'].fields_by_name['repository']._loaded_options = None
62
+ _globals['_LISTCOMMITSBYREFNAMEREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
63
+ _globals['_FINDALLCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
64
+ _globals['_FINDALLCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
65
+ _globals['_FINDCOMMITSREQUEST'].fields_by_name['repository']._loaded_options = None
66
+ _globals['_FINDCOMMITSREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
67
+ _globals['_FINDCOMMITSREQUEST'].fields_by_name['disable_walk']._loaded_options = None
68
+ _globals['_FINDCOMMITSREQUEST'].fields_by_name['disable_walk']._serialized_options = b'\030\001'
69
+ _globals['_COMMITLANGUAGESREQUEST'].fields_by_name['repository']._loaded_options = None
70
+ _globals['_COMMITLANGUAGESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
71
+ _globals['_RAWBLAMEREQUEST'].fields_by_name['repository']._loaded_options = None
72
+ _globals['_RAWBLAMEREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
73
+ _globals['_LASTCOMMITFORPATHREQUEST'].fields_by_name['repository']._loaded_options = None
74
+ _globals['_LASTCOMMITFORPATHREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
75
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST'].fields_by_name['repository']._loaded_options = None
76
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
77
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST'].fields_by_name['literal_pathspec']._loaded_options = None
78
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST'].fields_by_name['literal_pathspec']._serialized_options = b'\030\001'
79
+ _globals['_COMMITSBYMESSAGEREQUEST'].fields_by_name['repository']._loaded_options = None
80
+ _globals['_COMMITSBYMESSAGEREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
81
+ _globals['_FILTERSHASWITHSIGNATURESREQUEST'].fields_by_name['repository']._loaded_options = None
82
+ _globals['_FILTERSHASWITHSIGNATURESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
83
+ _globals['_GETCOMMITSIGNATURESREQUEST'].fields_by_name['repository']._loaded_options = None
84
+ _globals['_GETCOMMITSIGNATURESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
85
+ _globals['_GETCOMMITMESSAGESREQUEST'].fields_by_name['repository']._loaded_options = None
86
+ _globals['_GETCOMMITMESSAGESREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
87
+ _globals['_CHECKOBJECTSEXISTREQUEST'].fields_by_name['repository']._loaded_options = None
88
+ _globals['_CHECKOBJECTSEXISTREQUEST'].fields_by_name['repository']._serialized_options = b'\230\306,\001'
89
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommits']._loaded_options = None
90
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommits']._serialized_options = b'\372\227(\002\010\002'
91
+ _globals['_COMMITSERVICE'].methods_by_name['ListAllCommits']._loaded_options = None
92
+ _globals['_COMMITSERVICE'].methods_by_name['ListAllCommits']._serialized_options = b'\372\227(\002\010\002'
93
+ _globals['_COMMITSERVICE'].methods_by_name['CommitIsAncestor']._loaded_options = None
94
+ _globals['_COMMITSERVICE'].methods_by_name['CommitIsAncestor']._serialized_options = b'\372\227(\002\010\002'
95
+ _globals['_COMMITSERVICE'].methods_by_name['TreeEntry']._loaded_options = None
96
+ _globals['_COMMITSERVICE'].methods_by_name['TreeEntry']._serialized_options = b'\372\227(\002\010\002'
97
+ _globals['_COMMITSERVICE'].methods_by_name['CountCommits']._loaded_options = None
98
+ _globals['_COMMITSERVICE'].methods_by_name['CountCommits']._serialized_options = b'\372\227(\002\010\002'
99
+ _globals['_COMMITSERVICE'].methods_by_name['CountDivergingCommits']._loaded_options = None
100
+ _globals['_COMMITSERVICE'].methods_by_name['CountDivergingCommits']._serialized_options = b'\372\227(\002\010\002'
101
+ _globals['_COMMITSERVICE'].methods_by_name['GetTreeEntries']._loaded_options = None
102
+ _globals['_COMMITSERVICE'].methods_by_name['GetTreeEntries']._serialized_options = b'\372\227(\002\010\002'
103
+ _globals['_COMMITSERVICE'].methods_by_name['ListFiles']._loaded_options = None
104
+ _globals['_COMMITSERVICE'].methods_by_name['ListFiles']._serialized_options = b'\372\227(\002\010\002'
105
+ _globals['_COMMITSERVICE'].methods_by_name['FindCommit']._loaded_options = None
106
+ _globals['_COMMITSERVICE'].methods_by_name['FindCommit']._serialized_options = b'\372\227(\002\010\002'
107
+ _globals['_COMMITSERVICE'].methods_by_name['CommitStats']._loaded_options = None
108
+ _globals['_COMMITSERVICE'].methods_by_name['CommitStats']._serialized_options = b'\372\227(\002\010\002'
109
+ _globals['_COMMITSERVICE'].methods_by_name['FindAllCommits']._loaded_options = None
110
+ _globals['_COMMITSERVICE'].methods_by_name['FindAllCommits']._serialized_options = b'\372\227(\002\010\002'
111
+ _globals['_COMMITSERVICE'].methods_by_name['FindCommits']._loaded_options = None
112
+ _globals['_COMMITSERVICE'].methods_by_name['FindCommits']._serialized_options = b'\372\227(\002\010\002'
113
+ _globals['_COMMITSERVICE'].methods_by_name['CommitLanguages']._loaded_options = None
114
+ _globals['_COMMITSERVICE'].methods_by_name['CommitLanguages']._serialized_options = b'\372\227(\002\010\001'
115
+ _globals['_COMMITSERVICE'].methods_by_name['RawBlame']._loaded_options = None
116
+ _globals['_COMMITSERVICE'].methods_by_name['RawBlame']._serialized_options = b'\372\227(\002\010\002'
117
+ _globals['_COMMITSERVICE'].methods_by_name['LastCommitForPath']._loaded_options = None
118
+ _globals['_COMMITSERVICE'].methods_by_name['LastCommitForPath']._serialized_options = b'\372\227(\002\010\002'
119
+ _globals['_COMMITSERVICE'].methods_by_name['ListLastCommitsForTree']._loaded_options = None
120
+ _globals['_COMMITSERVICE'].methods_by_name['ListLastCommitsForTree']._serialized_options = b'\372\227(\002\010\002'
121
+ _globals['_COMMITSERVICE'].methods_by_name['CommitsByMessage']._loaded_options = None
122
+ _globals['_COMMITSERVICE'].methods_by_name['CommitsByMessage']._serialized_options = b'\372\227(\002\010\002'
123
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommitsByOid']._loaded_options = None
124
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommitsByOid']._serialized_options = b'\372\227(\002\010\002'
125
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommitsByRefName']._loaded_options = None
126
+ _globals['_COMMITSERVICE'].methods_by_name['ListCommitsByRefName']._serialized_options = b'\372\227(\002\010\002'
127
+ _globals['_COMMITSERVICE'].methods_by_name['FilterShasWithSignatures']._loaded_options = None
128
+ _globals['_COMMITSERVICE'].methods_by_name['FilterShasWithSignatures']._serialized_options = b'\372\227(\002\010\002'
129
+ _globals['_COMMITSERVICE'].methods_by_name['GetCommitSignatures']._loaded_options = None
130
+ _globals['_COMMITSERVICE'].methods_by_name['GetCommitSignatures']._serialized_options = b'\372\227(\002\010\002'
131
+ _globals['_COMMITSERVICE'].methods_by_name['GetCommitMessages']._loaded_options = None
132
+ _globals['_COMMITSERVICE'].methods_by_name['GetCommitMessages']._serialized_options = b'\372\227(\002\010\002'
133
+ _globals['_COMMITSERVICE'].methods_by_name['CheckObjectsExist']._loaded_options = None
134
+ _globals['_COMMITSERVICE'].methods_by_name['CheckObjectsExist']._serialized_options = b'\372\227(\002\010\002'
135
+ _globals['_LISTCOMMITSREQUEST']._serialized_start=98
136
+ _globals['_LISTCOMMITSREQUEST']._serialized_end=595
137
+ _globals['_LISTCOMMITSREQUEST_ORDER']._serialized_start=558
138
+ _globals['_LISTCOMMITSREQUEST_ORDER']._serialized_end=595
139
+ _globals['_LISTCOMMITSRESPONSE']._serialized_start=597
140
+ _globals['_LISTCOMMITSRESPONSE']._serialized_end=654
141
+ _globals['_LISTALLCOMMITSREQUEST']._serialized_start=656
142
+ _globals['_LISTALLCOMMITSREQUEST']._serialized_end=781
143
+ _globals['_LISTALLCOMMITSRESPONSE']._serialized_start=783
144
+ _globals['_LISTALLCOMMITSRESPONSE']._serialized_end=843
145
+ _globals['_COMMITSTATSREQUEST']._serialized_start=845
146
+ _globals['_COMMITSTATSREQUEST']._serialized_end=929
147
+ _globals['_COMMITSTATSRESPONSE']._serialized_start=931
148
+ _globals['_COMMITSTATSRESPONSE']._serialized_end=1018
149
+ _globals['_COMMITISANCESTORREQUEST']._serialized_start=1020
150
+ _globals['_COMMITISANCESTORREQUEST']._serialized_end=1130
151
+ _globals['_COMMITISANCESTORRESPONSE']._serialized_start=1132
152
+ _globals['_COMMITISANCESTORRESPONSE']._serialized_end=1173
153
+ _globals['_TREEENTRYREQUEST']._serialized_start=1176
154
+ _globals['_TREEENTRYREQUEST']._serialized_end=1305
155
+ _globals['_TREEENTRYRESPONSE']._serialized_start=1308
156
+ _globals['_TREEENTRYRESPONSE']._serialized_end=1489
157
+ _globals['_TREEENTRYRESPONSE_OBJECTTYPE']._serialized_start=1436
158
+ _globals['_TREEENTRYRESPONSE_OBJECTTYPE']._serialized_end=1489
159
+ _globals['_COUNTCOMMITSREQUEST']._serialized_start=1492
160
+ _globals['_COUNTCOMMITSREQUEST']._serialized_end=1779
161
+ _globals['_COUNTCOMMITSRESPONSE']._serialized_start=1781
162
+ _globals['_COUNTCOMMITSRESPONSE']._serialized_end=1818
163
+ _globals['_COUNTDIVERGINGCOMMITSREQUEST']._serialized_start=1821
164
+ _globals['_COUNTDIVERGINGCOMMITSREQUEST']._serialized_end=1960
165
+ _globals['_COUNTDIVERGINGCOMMITSRESPONSE']._serialized_start=1962
166
+ _globals['_COUNTDIVERGINGCOMMITSRESPONSE']._serialized_end=2034
167
+ _globals['_TREEENTRY']._serialized_start=2037
168
+ _globals['_TREEENTRY']._serialized_end=2232
169
+ _globals['_TREEENTRY_ENTRYTYPE']._serialized_start=2173
170
+ _globals['_TREEENTRY_ENTRYTYPE']._serialized_end=2216
171
+ _globals['_GETTREEENTRIESREQUEST']._serialized_start=2235
172
+ _globals['_GETTREEENTRIESREQUEST']._serialized_end=2528
173
+ _globals['_GETTREEENTRIESREQUEST_SORTBY']._serialized_start=2490
174
+ _globals['_GETTREEENTRIESREQUEST_SORTBY']._serialized_end=2528
175
+ _globals['_GETTREEENTRIESRESPONSE']._serialized_start=2530
176
+ _globals['_GETTREEENTRIESRESPONSE']._serialized_end=2643
177
+ _globals['_GETTREEENTRIESERROR']._serialized_start=2645
178
+ _globals['_GETTREEENTRIESERROR']._serialized_end=2764
179
+ _globals['_LISTFILESREQUEST']._serialized_start=2766
180
+ _globals['_LISTFILESREQUEST']._serialized_end=2848
181
+ _globals['_LISTFILESRESPONSE']._serialized_start=2850
182
+ _globals['_LISTFILESRESPONSE']._serialized_end=2884
183
+ _globals['_FINDCOMMITREQUEST']._serialized_start=2886
184
+ _globals['_FINDCOMMITREQUEST']._serialized_end=2987
185
+ _globals['_FINDCOMMITRESPONSE']._serialized_start=2989
186
+ _globals['_FINDCOMMITRESPONSE']._serialized_end=3044
187
+ _globals['_LISTCOMMITSBYOIDREQUEST']._serialized_start=3046
188
+ _globals['_LISTCOMMITSBYOIDREQUEST']._serialized_end=3130
189
+ _globals['_LISTCOMMITSBYOIDRESPONSE']._serialized_start=3132
190
+ _globals['_LISTCOMMITSBYOIDRESPONSE']._serialized_end=3194
191
+ _globals['_LISTCOMMITSBYREFNAMEREQUEST']._serialized_start=3196
192
+ _globals['_LISTCOMMITSBYREFNAMEREQUEST']._serialized_end=3290
193
+ _globals['_LISTCOMMITSBYREFNAMERESPONSE']._serialized_start=3293
194
+ _globals['_LISTCOMMITSBYREFNAMERESPONSE']._serialized_end=3470
195
+ _globals['_LISTCOMMITSBYREFNAMERESPONSE_COMMITFORREF']._serialized_start=3397
196
+ _globals['_LISTCOMMITSBYREFNAMERESPONSE_COMMITFORREF']._serialized_end=3464
197
+ _globals['_FINDALLCOMMITSREQUEST']._serialized_start=3473
198
+ _globals['_FINDALLCOMMITSREQUEST']._serialized_end=3684
199
+ _globals['_FINDALLCOMMITSREQUEST_ORDER']._serialized_start=558
200
+ _globals['_FINDALLCOMMITSREQUEST_ORDER']._serialized_end=595
201
+ _globals['_FINDALLCOMMITSRESPONSE']._serialized_start=3686
202
+ _globals['_FINDALLCOMMITSRESPONSE']._serialized_end=3746
203
+ _globals['_FINDCOMMITSREQUEST']._serialized_start=3749
204
+ _globals['_FINDCOMMITSREQUEST']._serialized_end=4304
205
+ _globals['_FINDCOMMITSREQUEST_ORDER']._serialized_start=558
206
+ _globals['_FINDCOMMITSREQUEST_ORDER']._serialized_end=585
207
+ _globals['_FINDCOMMITSRESPONSE']._serialized_start=4306
208
+ _globals['_FINDCOMMITSRESPONSE']._serialized_end=4363
209
+ _globals['_FINDCOMMITSERROR']._serialized_start=4366
210
+ _globals['_FINDCOMMITSERROR']._serialized_end=4552
211
+ _globals['_COMMITLANGUAGESREQUEST']._serialized_start=4554
212
+ _globals['_COMMITLANGUAGESREQUEST']._serialized_end=4642
213
+ _globals['_COMMITLANGUAGESRESPONSE']._serialized_start=4645
214
+ _globals['_COMMITLANGUAGESRESPONSE']._serialized_end=4841
215
+ _globals['_COMMITLANGUAGESRESPONSE_LANGUAGE']._serialized_start=4733
216
+ _globals['_COMMITLANGUAGESRESPONSE_LANGUAGE']._serialized_end=4841
217
+ _globals['_RAWBLAMEREQUEST']._serialized_start=4844
218
+ _globals['_RAWBLAMEREQUEST']._serialized_end=4985
219
+ _globals['_RAWBLAMERESPONSE']._serialized_start=4987
220
+ _globals['_RAWBLAMERESPONSE']._serialized_end=5019
221
+ _globals['_RAWBLAMEERROR']._serialized_start=5022
222
+ _globals['_RAWBLAMEERROR']._serialized_end=5476
223
+ _globals['_RAWBLAMEERROR_OUTOFRANGEERROR']._serialized_start=5322
224
+ _globals['_RAWBLAMEERROR_OUTOFRANGEERROR']._serialized_end=5361
225
+ _globals['_RAWBLAMEERROR_INVALIDIGNOREREVSFORMATERROR']._serialized_start=5363
226
+ _globals['_RAWBLAMEERROR_INVALIDIGNOREREVSFORMATERROR']._serialized_end=5410
227
+ _globals['_RAWBLAMEERROR_RESOLVEIGNOREREVSERROR']._serialized_start=5412
228
+ _globals['_RAWBLAMEERROR_RESOLVEIGNOREREVSERROR']._serialized_end=5467
229
+ _globals['_LASTCOMMITFORPATHREQUEST']._serialized_start=5479
230
+ _globals['_LASTCOMMITFORPATHREQUEST']._serialized_end=5656
231
+ _globals['_LASTCOMMITFORPATHRESPONSE']._serialized_start=5658
232
+ _globals['_LASTCOMMITFORPATHRESPONSE']._serialized_end=5720
233
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST']._serialized_start=5723
234
+ _globals['_LISTLASTCOMMITSFORTREEREQUEST']._serialized_end=5940
235
+ _globals['_LISTLASTCOMMITSFORTREERESPONSE']._serialized_start=5943
236
+ _globals['_LISTLASTCOMMITSFORTREERESPONSE']._serialized_end=6130
237
+ _globals['_LISTLASTCOMMITSFORTREERESPONSE_COMMITFORTREE']._serialized_start=6048
238
+ _globals['_LISTLASTCOMMITSFORTREERESPONSE_COMMITFORTREE']._serialized_end=6130
239
+ _globals['_COMMITSBYMESSAGEREQUEST']._serialized_start=6133
240
+ _globals['_COMMITSBYMESSAGEREQUEST']._serialized_end=6329
241
+ _globals['_COMMITSBYMESSAGERESPONSE']._serialized_start=6331
242
+ _globals['_COMMITSBYMESSAGERESPONSE']._serialized_end=6393
243
+ _globals['_FILTERSHASWITHSIGNATURESREQUEST']._serialized_start=6395
244
+ _globals['_FILTERSHASWITHSIGNATURESREQUEST']._serialized_end=6488
245
+ _globals['_FILTERSHASWITHSIGNATURESRESPONSE']._serialized_start=6490
246
+ _globals['_FILTERSHASWITHSIGNATURESRESPONSE']._serialized_end=6538
247
+ _globals['_GETCOMMITSIGNATURESREQUEST']._serialized_start=6540
248
+ _globals['_GETCOMMITSIGNATURESREQUEST']._serialized_end=6634
249
+ _globals['_GETCOMMITSIGNATURESRESPONSE']._serialized_start=6637
250
+ _globals['_GETCOMMITSIGNATURESRESPONSE']._serialized_end=6934
251
+ _globals['_GETCOMMITSIGNATURESRESPONSE_SIGNER']._serialized_start=6866
252
+ _globals['_GETCOMMITSIGNATURESRESPONSE_SIGNER']._serialized_end=6934
253
+ _globals['_GETCOMMITMESSAGESREQUEST']._serialized_start=6936
254
+ _globals['_GETCOMMITMESSAGESREQUEST']._serialized_end=7028
255
+ _globals['_GETCOMMITMESSAGESRESPONSE']._serialized_start=7030
256
+ _globals['_GETCOMMITMESSAGESRESPONSE']._serialized_end=7093
257
+ _globals['_CHECKOBJECTSEXISTREQUEST']._serialized_start=7095
258
+ _globals['_CHECKOBJECTSEXISTREQUEST']._serialized_end=7186
259
+ _globals['_CHECKOBJECTSEXISTRESPONSE']._serialized_start=7189
260
+ _globals['_CHECKOBJECTSEXISTRESPONSE']._serialized_end=7339
261
+ _globals['_CHECKOBJECTSEXISTRESPONSE_REVISIONEXISTENCE']._serialized_start=7290
262
+ _globals['_CHECKOBJECTSEXISTRESPONSE_REVISIONEXISTENCE']._serialized_end=7339
263
+ _globals['_COMMITSERVICE']._serialized_start=7342
264
+ _globals['_COMMITSERVICE']._serialized_end=9503
265
+ # @@protoc_insertion_point(module_scope)