hgitaly 18.6.0.dev1__tar.gz → 18.7.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 (179) hide show
  1. {hgitaly-18.6.0.dev1/hgitaly.egg-info → hgitaly-18.7.0}/PKG-INFO +11 -6
  2. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/README.md +9 -4
  3. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/rhgitaly.py +8 -1
  4. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_blob_tree.py +4 -5
  5. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_commit.py +24 -16
  6. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_diff.py +7 -0
  7. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_ref.py +2 -4
  8. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_repository_service.py +12 -11
  9. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/hgitaly/__init__.py +2 -13
  10. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/hgitaly/tests/test_serve.py +0 -31
  11. hgitaly-18.7.0/hgitaly/VERSION +1 -0
  12. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/diff.py +11 -0
  13. hgitaly-18.7.0/hgitaly/git.py +34 -0
  14. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/gitlab_ref.py +3 -39
  15. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/manifest.py +0 -13
  16. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/message.py +2 -12
  17. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/procutil.py +2 -10
  18. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/__init__.py +6 -3
  19. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/worker.py +1 -1
  20. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/commit.py +17 -499
  21. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/ref.py +2 -1
  22. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/repository.py +0 -86
  23. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/fixture.py +0 -12
  24. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_commit.py +33 -622
  25. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_mercurial_operations.py +13 -53
  26. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_operations.py +5 -25
  27. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_repository_service.py +0 -156
  28. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/analysis_pb2.py +2 -2
  29. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/analysis_pb2_grpc.py +1 -1
  30. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/blob_pb2.py +2 -2
  31. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/blob_pb2_grpc.py +1 -1
  32. hgitaly-18.7.0/hgitaly/stub/commit_pb2.py +265 -0
  33. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/commit_pb2_grpc.py +1 -1
  34. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/diff_pb2.py +37 -37
  35. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/diff_pb2_grpc.py +1 -1
  36. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/errors_pb2.py +2 -2
  37. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/errors_pb2_grpc.py +1 -1
  38. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/lint_pb2.py +2 -2
  39. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/lint_pb2_grpc.py +1 -1
  40. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_aux_git_pb2_grpc.py +1 -1
  41. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_changeset_pb2_grpc.py +1 -1
  42. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_namespace_pb2_grpc.py +1 -1
  43. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_operations_pb2_grpc.py +1 -1
  44. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_repository_pb2_grpc.py +1 -1
  45. hgitaly-18.7.0/hgitaly/stub/operations_pb2.py +215 -0
  46. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/operations_pb2_grpc.py +1 -1
  47. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/ref_pb2.py +2 -2
  48. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/ref_pb2_grpc.py +1 -1
  49. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/remote_pb2.py +2 -2
  50. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/remote_pb2_grpc.py +1 -1
  51. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/repository_pb2.py +2 -2
  52. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/repository_pb2_grpc.py +1 -1
  53. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/server_pb2.py +2 -2
  54. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/server_pb2_grpc.py +1 -1
  55. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/shared_pb2.py +2 -2
  56. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/shared_pb2_grpc.py +1 -1
  57. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/storage.py +17 -3
  58. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_gitlab_ref.py +1 -23
  59. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_messages.py +1 -1
  60. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_servicer.py +16 -8
  61. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_workdir.py +18 -0
  62. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0/hgitaly.egg-info}/PKG-INFO +11 -6
  63. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly.egg-info/SOURCES.txt +21 -23
  64. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly.egg-info/requires.txt +1 -1
  65. hgitaly-18.7.0/hgitaly.egg-info/top_level.txt +3 -0
  66. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/install-requirements.txt +1 -1
  67. hgitaly-18.6.0.dev1/hgitaly/VERSION +0 -1
  68. hgitaly-18.6.0.dev1/hgitaly/git.py +0 -137
  69. hgitaly-18.6.0.dev1/hgitaly/server/prefork.py +0 -215
  70. hgitaly-18.6.0.dev1/hgitaly/server/tests/test_prefork.py +0 -288
  71. hgitaly-18.6.0.dev1/hgitaly/stub/commit_pb2.py +0 -265
  72. hgitaly-18.6.0.dev1/hgitaly/stub/operations_pb2.py +0 -215
  73. hgitaly-18.6.0.dev1/hgitaly.egg-info/top_level.txt +0 -3
  74. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/LICENSE +0 -0
  75. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/MANIFEST.in +0 -0
  76. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/__init__.py +0 -0
  77. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/comparison.py +0 -0
  78. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/conftest.py +0 -0
  79. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/gitaly.py +0 -0
  80. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/hgitaly_rhgitaly_comparison.py +0 -0
  81. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_comparison.py +0 -0
  82. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_gitaly_server.py +0 -0
  83. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_mercurial_aux_git.py +0 -0
  84. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_mercurial_operations.py +0 -0
  85. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_mercurial_repository.py +0 -0
  86. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_operations.py +0 -0
  87. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_remote.py +0 -0
  88. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_rhgitaly_server.py +0 -0
  89. {hgitaly-18.6.0.dev1/tests_with_gitaly → hgitaly-18.7.0/functional_tests}/test_server.py +0 -0
  90. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/__init__.py +0 -0
  91. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/hgitaly/revset.py +0 -0
  92. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/hgitaly/tests/__init__.py +0 -0
  93. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgext3rd/hgitaly/tests/test_revset.py +0 -0
  94. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/__init__.py +0 -0
  95. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/branch.py +0 -0
  96. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/changelog.py +0 -0
  97. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/errors.py +0 -0
  98. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/feature.py +0 -0
  99. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/file_content.py +0 -0
  100. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/file_context.py +0 -0
  101. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/identification.py +0 -0
  102. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/logging.py +0 -0
  103. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/oid.py +0 -0
  104. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/pagination.py +0 -0
  105. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/path.py +0 -0
  106. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/peer.py +0 -0
  107. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/repository.py +0 -0
  108. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/revision.py +0 -0
  109. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/revset.py +0 -0
  110. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/scripts.py +0 -0
  111. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/address.py +0 -0
  112. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/mono.py +0 -0
  113. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/tests/__init__.py +0 -0
  114. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/tests/test_address.py +0 -0
  115. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/tests/test_mono.py +0 -0
  116. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/server/tests/test_worker.py +0 -0
  117. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/__init__.py +0 -0
  118. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/analysis.py +0 -0
  119. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/blob.py +0 -0
  120. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/diff.py +0 -0
  121. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/interceptors.py +0 -0
  122. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/mercurial_changeset.py +0 -0
  123. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/mercurial_namespace.py +0 -0
  124. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/mercurial_operations.py +0 -0
  125. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/mercurial_repository.py +0 -0
  126. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/operations.py +0 -0
  127. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/server.py +0 -0
  128. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/__init__.py +0 -0
  129. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_analysis.py +0 -0
  130. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_blob.py +0 -0
  131. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_default_branch.py +0 -0
  132. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_diff.py +0 -0
  133. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_mercurial_changeset.py +0 -0
  134. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_mercurial_namespace.py +0 -0
  135. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_mercurial_repository.py +0 -0
  136. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_ref.py +0 -0
  137. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/service/tests/test_server.py +0 -0
  138. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/servicer.py +0 -0
  139. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/ssh.py +0 -0
  140. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stream.py +0 -0
  141. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/__init__.py +0 -0
  142. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_aux_git_pb2.py +0 -0
  143. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_changeset_pb2.py +0 -0
  144. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_namespace_pb2.py +0 -0
  145. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_operations_pb2.py +0 -0
  146. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/stub/mercurial_repository_pb2.py +0 -0
  147. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tag.py +0 -0
  148. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/__init__.py +0 -0
  149. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/bundle.py +0 -0
  150. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/context.py +0 -0
  151. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/grpc.py +0 -0
  152. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/multiprocessing.py +0 -0
  153. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/repo.py +0 -0
  154. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/ssh.py +0 -0
  155. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/sshd.py +0 -0
  156. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/tests/__init__.py +0 -0
  157. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/testing/tests/test_sshd.py +0 -0
  158. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/__init__.py +0 -0
  159. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/common.py +0 -0
  160. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_branch.py +0 -0
  161. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_diff.py +0 -0
  162. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_errors.py +0 -0
  163. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_feature.py +0 -0
  164. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_file_context.py +0 -0
  165. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_identification.py +0 -0
  166. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_manifest.py +0 -0
  167. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_oid.py +0 -0
  168. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_peer.py +0 -0
  169. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_repository.py +0 -0
  170. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_revision.py +0 -0
  171. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_revset.py +0 -0
  172. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_stream.py +0 -0
  173. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/tests/test_tag.py +0 -0
  174. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/util.py +0 -0
  175. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly/workdir.py +0 -0
  176. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly.egg-info/dependency_links.txt +0 -0
  177. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/hgitaly.egg-info/entry_points.txt +0 -0
  178. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/setup.cfg +0 -0
  179. {hgitaly-18.6.0.dev1 → hgitaly-18.7.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hgitaly
3
- Version: 18.6.0.dev1
3
+ Version: 18.7.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
@@ -10,7 +10,7 @@ Keywords: hg mercurial heptapod gitlab
10
10
  Requires-Python: >=3.8
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
- Requires-Dist: heptapod>=5.4.0
13
+ Requires-Dist: heptapod~=5.5.0
14
14
  Requires-Dist: protobuf~=6.31.1
15
15
  Requires-Dist: grpcio~=1.76.0
16
16
  Requires-Dist: grpcio-status~=1.76.0
@@ -278,16 +278,21 @@ actually a mix of:
278
278
  - Gitaly documentation and source code.
279
279
  - sampling of Gitaly responses.
280
280
 
281
- #### Gitaly comparison tests
281
+ #### Gitaly comparison and other functional tests
282
282
 
283
283
  If an appropriate Gitaly installation is found, `run-all-tests` will also
284
- run the tests from the `tests_with_gitaly` package. This happens automatically
284
+ run the tests from the `functional_tests` package. This happens automatically
285
285
  from within a [HDK] workspace.
286
286
 
287
287
  These are precisely meant for what the Mercurial integration tests can't do:
288
288
  check that HGitaly responses take the form expected by the various Gitaly
289
289
  clients, by comparing directly with the reference Gitaly implementation.
290
290
 
291
+ Some of the included tests also compare the output of RHGitaly and HGitaly,
292
+ when both implementations exist or just test RHGitaly standalone (when
293
+ comparison with Gitaly makes no sense, e.g. because the method is defined
294
+ in the HGitaly protocol, and there is no Python implementation).
295
+
291
296
  The comparisons work by using the conversions to Git provided by
292
297
  `py-heptapod`, which are precisely what HGitaly aims to replace as a mean
293
298
  to expose Mercurial content to GitLab.
@@ -368,10 +373,10 @@ In some rare cases, the drop in coverage could be due to an actual change
368
373
  between Mercurial versions. If that happens, there are good chances that an
369
374
  actual bug is lurking around.
370
375
 
371
- #### How to run the tests with coverage of the Gitaly comparison tests
376
+ #### How to run the tests with coverage of the functional tests
372
377
 
373
378
  ```
374
- ./run-all-tests --cov tests_with_gitaly --cov-report html
379
+ ./run-all-tests --cov functional_tests --cov-report html
375
380
  ```
376
381
 
377
382
  The HTML report will be nice if you don't have 100% coverage. To display it,
@@ -255,16 +255,21 @@ actually a mix of:
255
255
  - Gitaly documentation and source code.
256
256
  - sampling of Gitaly responses.
257
257
 
258
- #### Gitaly comparison tests
258
+ #### Gitaly comparison and other functional tests
259
259
 
260
260
  If an appropriate Gitaly installation is found, `run-all-tests` will also
261
- run the tests from the `tests_with_gitaly` package. This happens automatically
261
+ run the tests from the `functional_tests` package. This happens automatically
262
262
  from within a [HDK] workspace.
263
263
 
264
264
  These are precisely meant for what the Mercurial integration tests can't do:
265
265
  check that HGitaly responses take the form expected by the various Gitaly
266
266
  clients, by comparing directly with the reference Gitaly implementation.
267
267
 
268
+ Some of the included tests also compare the output of RHGitaly and HGitaly,
269
+ when both implementations exist or just test RHGitaly standalone (when
270
+ comparison with Gitaly makes no sense, e.g. because the method is defined
271
+ in the HGitaly protocol, and there is no Python implementation).
272
+
268
273
  The comparisons work by using the conversions to Git provided by
269
274
  `py-heptapod`, which are precisely what HGitaly aims to replace as a mean
270
275
  to expose Mercurial content to GitLab.
@@ -345,10 +350,10 @@ In some rare cases, the drop in coverage could be due to an actual change
345
350
  between Mercurial versions. If that happens, there are good chances that an
346
351
  actual bug is lurking around.
347
352
 
348
- #### How to run the tests with coverage of the Gitaly comparison tests
353
+ #### How to run the tests with coverage of the functional tests
349
354
 
350
355
  ```
351
- ./run-all-tests --cov tests_with_gitaly --cov-report html
356
+ ./run-all-tests --cov functional_tests --cov-report html
352
357
  ```
353
358
 
354
359
  The HTML report will be nice if you don't have 100% coverage. To display it,
@@ -69,11 +69,18 @@ class RHGitalyServer:
69
69
  if rhgitaly_exe is None: # pragma no cover
70
70
  subprocess.check_call(('cargo', 'build', '--locked'),
71
71
  cwd=rhgitaly_dir)
72
- run_cmd = ('cargo', 'run')
72
+ run_cmd = ['cargo', 'run', '--']
73
73
  else: # pragma no cover
74
74
  # Popen would not run a relative binary so easily
75
75
  run_cmd = [Path(rhgitaly_exe).resolve()]
76
76
 
77
+ conf = self.home_dir / 'rhgitaly.toml'
78
+ conf.write_text('\n'.join((
79
+ "[sidecar]",
80
+ "managed = false",
81
+ )))
82
+ run_cmd.extend(("--config", conf))
83
+
77
84
  with open(self.home_dir / 'rhgitaly.log', 'w') as logf:
78
85
  rhgitaly = subprocess.Popen(
79
86
  run_cmd,
@@ -108,9 +108,9 @@ def oid_normalizer(oid2git):
108
108
  return normalizer
109
109
 
110
110
 
111
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
112
- def test_compare_tree_entry_request(gitaly_rhgitaly_comparison, hg_server):
111
+ def test_compare_tree_entry_request(gitaly_rhgitaly_comparison):
113
112
  fixture = gitaly_rhgitaly_comparison
113
+ hg_server = 'rhgitaly'
114
114
 
115
115
  wrapper = fixture.hg_repo_wrapper
116
116
  wrapper.write_commit('foo', message="Some foo")
@@ -302,10 +302,9 @@ def test_compare_tree_entry_request(gitaly_rhgitaly_comparison, hg_server):
302
302
  )
303
303
 
304
304
 
305
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
306
- def test_compare_get_tree_entries_pagination(gitaly_rhgitaly_comparison,
307
- hg_server):
305
+ def test_compare_get_tree_entries_pagination(gitaly_rhgitaly_comparison):
308
306
  fixture = gitaly_rhgitaly_comparison
307
+ hg_server = 'rhgitaly'
309
308
 
310
309
  wrapper = fixture.hg_repo_wrapper
311
310
  wrapper.write_commit('foo', message="Some foo")
@@ -41,8 +41,7 @@ if skip_comparison_tests(): # pragma no cover
41
41
  parametrize = pytest.mark.parametrize
42
42
 
43
43
 
44
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
45
- def test_compare_last_commit_for(gitaly_rhgitaly_comparison, hg_server):
44
+ def test_compare_last_commit_for(gitaly_rhgitaly_comparison):
46
45
  fixture = gitaly_rhgitaly_comparison
47
46
  git_repo = fixture.git_repo
48
47
 
@@ -80,7 +79,7 @@ def test_compare_last_commit_for(gitaly_rhgitaly_comparison, hg_server):
80
79
  normalize_commit_message(commit_for_tree.commit)
81
80
 
82
81
  rpc_helper = fixture.rpc_helper(stub_cls=CommitServiceStub,
83
- hg_server=hg_server,
82
+ hg_server='rhgitaly',
84
83
  method_name='ListLastCommitsForTree',
85
84
  streaming=True,
86
85
  request_cls=ListLastCommitsForTreeRequest,
@@ -131,7 +130,7 @@ def test_compare_last_commit_for(gitaly_rhgitaly_comparison, hg_server):
131
130
  normalize_commit_message(response.commit)
132
131
 
133
132
  rpc_helper = fixture.rpc_helper(stub_cls=CommitServiceStub,
134
- hg_server=hg_server,
133
+ hg_server='rhgitaly',
135
134
  method_name='LastCommitForPath',
136
135
  request_cls=LastCommitForPathRequest,
137
136
  request_sha_attrs=['revision'],
@@ -407,8 +406,7 @@ def test_compare_list_files(gitaly_comparison):
407
406
  rpc_helper.assert_compare(revision=rev)
408
407
 
409
408
 
410
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
411
- def test_compare_find_commit(gitaly_rhgitaly_comparison, hg_server):
409
+ def test_compare_find_commit(gitaly_rhgitaly_comparison):
412
410
  fixture = gitaly_rhgitaly_comparison
413
411
  wrapper = fixture.hg_repo_wrapper
414
412
 
@@ -417,7 +415,7 @@ def test_compare_find_commit(gitaly_rhgitaly_comparison, hg_server):
417
415
  normalize_commit_message(response.commit)
418
416
 
419
417
  rpc_helper = fixture.rpc_helper(
420
- hg_server=hg_server,
418
+ hg_server='rhgitaly',
421
419
  stub_cls=CommitServiceStub,
422
420
  method_name='FindCommit',
423
421
  request_cls=FindCommitRequest,
@@ -722,7 +720,7 @@ def test_compare_list_commits(gitaly_comparison):
722
720
  #
723
721
  # @ 4 (branch/default) merge with stable
724
722
  # |\
725
- # | o 3 creates 'animal' (branch/stable)
723
+ # | o 3 creates 'animals' (branch/stable)
726
724
  # | |
727
725
  # o | 2 rename 'foo' to 'zoo' (user: testuser)
728
726
  # |/
@@ -763,7 +761,8 @@ def test_compare_list_commits(gitaly_comparison):
763
761
  request_defaults=dict(
764
762
  pagination_params=PaginationParameter(limit=10)),
765
763
  request_sha_attrs=['revision'],
766
- response_sha_attrs=['commits[].id', 'commits[].parent_ids[]'],
764
+ response_sha_attrs=['commits[].id', 'commits[].parent_ids[]',
765
+ 'pagination_cursor.next_cursor'],
767
766
  normalizer=normalizer,
768
767
  )
769
768
  rpc_helper.sorted = False
@@ -812,6 +811,18 @@ def test_compare_list_commits(gitaly_comparison):
812
811
  # no result
813
812
  assert_compare(revisions=[ctx4.hex(), caret(ctx4)])
814
813
 
814
+ # with paths
815
+ assert_compare(revisions=[ctx4.hex()], paths=[b'animals'])
816
+ assert_compare(revisions=[ctx4.hex()], paths=[b'foo'])
817
+ assert_compare(revisions=[ctx4.hex()], paths=[b'zoo'])
818
+ assert_compare(revisions=[ctx3.hex(), ctx2.hex()],
819
+ paths=[b'animals', b'zoo'])
820
+ assert_compare(revisions=[ctx4.hex()], paths=[b'anim*'])
821
+ # with two paths, Git starts returning the merge
822
+ # but Mercurial does not. This seems more consistent on the Mercurial
823
+ # side, so we won't compare. It would be:
824
+ # assert_compare(revisions=[ctx4.hex()], paths=[b'anim*', b'foo'])
825
+
815
826
  # orderings
816
827
  #
817
828
  # Comparison is limited because Mercurial orderings don't exactly
@@ -910,8 +921,7 @@ def test_compare_list_commits(gitaly_comparison):
910
921
  same_details=False)
911
922
 
912
923
 
913
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
914
- def test_compare_list_commits_by_oid(gitaly_rhgitaly_comparison, hg_server):
924
+ def test_compare_list_commits_by_oid(gitaly_rhgitaly_comparison):
915
925
  fixture = gitaly_rhgitaly_comparison
916
926
  wrapper = fixture.hg_repo_wrapper
917
927
 
@@ -932,7 +942,7 @@ def test_compare_list_commits_by_oid(gitaly_rhgitaly_comparison, hg_server):
932
942
  del response.commits[:]
933
943
 
934
944
  rpc_helper = fixture.rpc_helper(
935
- hg_server=hg_server,
945
+ hg_server='rhgitaly',
936
946
  stub_cls=CommitServiceStub,
937
947
  method_name='ListCommitsByOid',
938
948
  request_cls=ListCommitsByOidRequest,
@@ -968,9 +978,7 @@ def test_compare_list_commits_by_oid(gitaly_rhgitaly_comparison, hg_server):
968
978
  rpc_helper.assert_compare(oid=[NULL_HEX, hexes[0]])
969
979
 
970
980
 
971
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
972
- def test_compare_list_commits_by_ref_name(gitaly_rhgitaly_comparison,
973
- hg_server):
981
+ def test_compare_list_commits_by_ref_name(gitaly_rhgitaly_comparison):
974
982
  fixture = gitaly_rhgitaly_comparison
975
983
  wrapper = fixture.hg_repo_wrapper
976
984
 
@@ -984,7 +992,7 @@ def test_compare_list_commits_by_ref_name(gitaly_rhgitaly_comparison,
984
992
  )
985
993
 
986
994
  rpc_helper = fixture.rpc_helper(
987
- hg_server=hg_server,
995
+ hg_server='rhgitaly',
988
996
  stub_cls=CommitServiceStub,
989
997
  method_name='ListCommitsByRefName',
990
998
  request_cls=ListCommitsByRefNameRequest,
@@ -545,6 +545,11 @@ def test_compare_find_changed_paths(gitaly_comparison):
545
545
  add_remove=True)
546
546
  git_sha1 = git_repo.branches()[gl_branch]['sha']
547
547
 
548
+ def hg2git(hg_sha):
549
+ # TODO duplicated from RpcHelper
550
+ git_sha = fixture.hg_git.map_git_get(as_bytes(hg_sha))
551
+ return hg_sha if git_sha is None else git_sha.decode()
552
+
548
553
  diff_stubs = dict(
549
554
  git=DiffServiceStub(fixture.gitaly_channel),
550
555
  hg=DiffServiceStub(fixture.hgitaly_channel)
@@ -576,6 +581,8 @@ def test_compare_find_changed_paths(gitaly_comparison):
576
581
  path.old_blob_id = oid_to_git[path.old_blob_id]
577
582
  if path.new_blob_id:
578
583
  path.new_blob_id = oid_to_git[path.new_blob_id]
584
+ if path.commit_id:
585
+ path.commit_id = hg2git(path.commit_id)
579
586
  return final
580
587
 
581
588
  def do_rpc_depr(vcs, commits):
@@ -122,6 +122,7 @@ def test_update_references(gitaly_rhgitaly_comparison,
122
122
  normalize_commit_message(response.commit)
123
123
 
124
124
  find_commit_helper = fixture.rpc_helper(
125
+ hg_server='rhgitaly',
125
126
  stub_cls=CommitServiceStub,
126
127
  method_name='FindCommit',
127
128
  request_cls=FindCommitRequest,
@@ -490,15 +491,12 @@ def test_find_tag(gitaly_rhgitaly_comparison, hg_server):
490
491
 
491
492
  def normalize_response(rpc_helper, resp, **kw):
492
493
  normalize_commit_message(resp.tag.target_commit)
493
- # no tag ids in Mercurial until we can assign a tagging changeset
494
- # (requires a long-term core change)
495
- resp.tag.id = ''
496
494
 
497
495
  rpc_helper = fixture.rpc_helper(
498
496
  hg_server=hg_server,
499
497
  stub_cls=RefServiceStub,
500
498
  method_name='FindTag',
501
- response_sha_attrs=['tag.target_commit.id'],
499
+ response_sha_attrs=['tag.target_commit.id', 'tag.id'],
502
500
  request_cls=FindTagRequest,
503
501
  normalizer=normalize_response,
504
502
  )
@@ -77,8 +77,7 @@ TESTS_DATA_DIR = Path(__file__).parent / 'data'
77
77
  TIP_TAG_NAME = b'tip'
78
78
 
79
79
 
80
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
81
- def test_compare_find_merge_base(gitaly_rhgitaly_comparison, hg_server):
80
+ def test_compare_find_merge_base(gitaly_rhgitaly_comparison):
82
81
  fixture = gitaly_rhgitaly_comparison
83
82
  gitaly_repo = fixture.gitaly_repo
84
83
  git_repo = fixture.git_repo
@@ -112,10 +111,7 @@ def test_compare_find_merge_base(gitaly_rhgitaly_comparison, hg_server):
112
111
  parent=node_mod.nullid).hex()
113
112
  git_shas[sha4] = git_repo.branches()[b'branch/other']['sha']
114
113
 
115
- if hg_server == 'rhgitaly':
116
- hgitaly_channel = fixture.rhgitaly_channel
117
- else:
118
- hgitaly_channel = fixture.hgitaly_channel
114
+ hgitaly_channel = fixture.rhgitaly_channel
119
115
  diff_stubs = dict(
120
116
  git=RepositoryServiceStub(fixture.gitaly_channel),
121
117
  hg=RepositoryServiceStub(hgitaly_channel),
@@ -365,11 +361,10 @@ def test_repository_size(gitaly_comparison,
365
361
  relative_path='/some/path'))
366
362
 
367
363
 
368
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
369
364
  def test_has_local_branches(gitaly_rhgitaly_comparison,
370
- server_repos_root,
371
- hg_server):
365
+ server_repos_root):
372
366
  fixture = gitaly_rhgitaly_comparison
367
+ hg_server = 'rhgitaly'
373
368
  grpc_repo = fixture.gitaly_repo
374
369
  rpc_helper = fixture.rpc_helper(
375
370
  hg_server=hg_server,
@@ -382,6 +377,11 @@ def test_has_local_branches(gitaly_rhgitaly_comparison,
382
377
 
383
378
  assert_compare(repository=grpc_repo)
384
379
 
380
+ wrapper = fixture.hg_repo_wrapper
381
+ wrapper.commit_file('foo')
382
+ wrapper.command('gitlab-mirror')
383
+ assert_compare(repository=grpc_repo)
384
+
385
385
  # repo does not exist
386
386
  assert_compare_errors(
387
387
  same_details=False,
@@ -657,9 +657,9 @@ def test_create_bundle_from_ref_list(
657
657
  assert not target_repo_path(vcs, 'broken-bundle').exists()
658
658
 
659
659
 
660
- @parametrize('hg_server', ('hgitaly', 'rhgitaly'))
661
- def test_search_files_by_name(gitaly_rhgitaly_comparison, hg_server):
660
+ def test_search_files_by_name(gitaly_rhgitaly_comparison):
662
661
  fixture = gitaly_rhgitaly_comparison
662
+ hg_server = 'rhgitaly'
663
663
 
664
664
  wrapper = fixture.hg_repo_wrapper
665
665
  ctx0 = wrapper.write_commit('afoo', message="Some foo")
@@ -841,6 +841,7 @@ def test_write_ref(gitaly_rhgitaly_comparison, server_repos_root, hg_server):
841
841
  normalize_commit_message(response.commit)
842
842
 
843
843
  find_commit_helper = fixture.rpc_helper(
844
+ hg_server='rhgitaly',
844
845
  stub_cls=CommitServiceStub,
845
846
  method_name='FindCommit',
846
847
  request_cls=FindCommitRequest,
@@ -73,7 +73,7 @@ def reraise_abort(msg, exc):
73
73
  b'repeated to listen on several addresses' % DEFAULT_LISTEN_URL),
74
74
  _(b'ADDRESS')),
75
75
  (b'', b'mono-process',
76
- False,
76
+ True,
77
77
  _(b'Mono process mode (useful for debugging, notably with pdb).'
78
78
  b'No forking occurs, the main process is the single worker. '
79
79
  b'In particular the hgitaly.workers configuration item is '
@@ -125,18 +125,7 @@ def serve(ui, **opts):
125
125
  client_id_slug = opts.get('client_id_file_name', DEFAULT_CLIENT_ID_SLUG)
126
126
  client_id_path = Path(config_root) / '+hgitaly' / os.fsdecode(client_id_slug)
127
127
  ensure_client_id(client_id_path)
128
- nb_workers = ui.configint(b'hgitaly', b'workers')
129
- run_opts = dict(nb_workers=nb_workers,
130
- restart_done_workers=True,
131
- mono_process=opts.get('mono_process'))
132
- max_rss_mib = ui.configint(b'hgitaly', b'worker.max-rss-mib')
133
- if max_rss_mib is not None:
134
- run_opts['max_rss_mib'] = max_rss_mib
135
- monitoring_interval = ui.configint(b'hgitaly',
136
- b'worker.monitoring-interval-seconds')
137
- if monitoring_interval is not None:
138
- run_opts['monitoring_interval'] = monitoring_interval
139
-
128
+ run_opts = {}
140
129
  shutdown_timeout = ui.configint(
141
130
  b'hgitaly',
142
131
  b'worker.graceful-shutdown-timeout-seconds')
@@ -69,37 +69,6 @@ def test_serve_default_url(tmpdir, monkeypatch):
69
69
  assert kwargs.get('nb_workers') is None
70
70
 
71
71
 
72
- def test_serve_workers_config(tmpdir, monkeypatch):
73
- ui, records = mock_run_forever(
74
- tmpdir, monkeypatch,
75
- config=dict(hgitaly={'workers': '47',
76
- 'configuration-root': str(tmpdir / 'config')}),
77
- )
78
- hgitaly_ext.serve(ui, listen=[], repositories_root=b'/some/path')
79
- kwargs = records[0][1]
80
- assert kwargs.get('nb_workers') == 47
81
-
82
-
83
- def test_serve_max_rss_mb(tmpdir, monkeypatch):
84
- ui, records = mock_run_forever(
85
- tmpdir, monkeypatch,
86
- config=dict(hgitaly={'worker.max-rss-mib': '128'}))
87
- repositories_root = repos_root(tmpdir)
88
- hgitaly_ext.serve(ui, listen=[], repositories_root=repositories_root)
89
- kwargs = records[0][1]
90
- assert kwargs.get('max_rss_mib') == 128
91
-
92
-
93
- def test_serve_monitoring_interval(tmpdir, monkeypatch):
94
- ui, records = mock_run_forever(
95
- tmpdir, monkeypatch,
96
- config=dict(hgitaly={'worker.monitoring-interval-seconds': '13'}))
97
- repositories_root = repos_root(tmpdir)
98
- hgitaly_ext.serve(ui, listen=[], repositories_root=repositories_root)
99
- kwargs = records[0][1]
100
- assert kwargs.get('monitoring_interval') == 13
101
-
102
-
103
72
  def test_serve_graceful_shutdown(tmpdir, monkeypatch):
104
73
  ui, records = mock_run_forever(
105
74
  tmpdir, monkeypatch,
@@ -0,0 +1 @@
1
+ 18.7.0
@@ -17,6 +17,7 @@ from mercurial import (
17
17
  match as matchmod,
18
18
  patch as patchmod,
19
19
  )
20
+ from mercurial.node import hex as nodehex
20
21
 
21
22
  from .file_context import git_perms
22
23
  from .git import (
@@ -78,7 +79,9 @@ def changed_paths(repo, from_ctx, to_ctx, base_path,
78
79
  if base_path is None:
79
80
  matcher = None
80
81
  path_trim_at = 0
82
+ include_commit_id = True
81
83
  else:
84
+ include_commit_id = False
82
85
  # scmutil's match is more geared towards the CLI
83
86
  # `hg log` etc and its include patterns would
84
87
  # force us to convert everything to absolute paths
@@ -101,6 +104,7 @@ def changed_paths(repo, from_ctx, to_ctx, base_path,
101
104
  yield from status_changed_paths(from_ctx, to_ctx, status, copy_info,
102
105
  diff_filters=diff_filters,
103
106
  find_renames=find_renames,
107
+ include_commit_id=include_commit_id,
104
108
  trim_at=path_trim_at)
105
109
  if filtered_out('copied', diff_filters):
106
110
  return
@@ -119,6 +123,7 @@ def filtered_out(status_type, diff_filters):
119
123
 
120
124
  def status_changed_paths(from_ctx, to_ctx, status, copy_info,
121
125
  diff_filters=(),
126
+ include_commit_id=True,
122
127
  find_renames=False, trim_at=0):
123
128
  rcopy_info = {v: k for k, v in copy_info.items()}
124
129
  """Return ChangedPaths from Mercurial status object"""
@@ -165,6 +170,11 @@ def status_changed_paths(from_ctx, to_ctx, status, copy_info,
165
170
  new_mode = git_perms(to_ctx.filectx(path))
166
171
  new_blob_id = ctx_blob_oid(to_ctx, path)
167
172
 
173
+ if include_commit_id:
174
+ commit_id = nodehex(to_ctx.node()).decode('ascii')
175
+ else:
176
+ commit_id = None
177
+
168
178
  yield ChangedPaths(
169
179
  path=path[trim_at:],
170
180
  old_mode=old_mode,
@@ -172,6 +182,7 @@ def status_changed_paths(from_ctx, to_ctx, status, copy_info,
172
182
  old_blob_id=old_blob_id,
173
183
  new_blob_id=new_blob_id,
174
184
  old_path=old_path,
185
+ commit_id=commit_id,
175
186
  status=Status_Type_Map[stype]
176
187
  )
177
188
 
@@ -0,0 +1,34 @@
1
+ # Copyright 2020 Georges Racinet <georges.racinet@octobus.net>
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
+ """Git specific things, mostly constants."""
8
+
9
+ ZERO_SHA_1 = '0' * 40
10
+
11
+ NULL_COMMIT_ID = ZERO_SHA_1
12
+ NULL_BLOB_OID = ZERO_SHA_1
13
+
14
+ # from `sha1-file.c` in Git 2.28 sources
15
+ # we're not dealing for now with the fact that there will be
16
+ # two kinds of OIDs with SHA-1 and SHA-256 soon.
17
+
18
+ # The Git tree object hash that corresponds to an empty tree (directory)
19
+ EMPTY_TREE_OID = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
20
+
21
+ # The Git blob object hash that corresponds to an empty blob (file)
22
+ EMPTY_BLOB_OID = 'e69de29bb2d1d6434b8b29ae775ad8c2e48c5391'
23
+
24
+ OBJECT_MODE_DOES_NOT_EXIST = 0 # see, e.g, ChangedPaths in diff.proto
25
+ OBJECT_MODE_LINK = 0o120000 # symlink to file or directory
26
+ OBJECT_MODE_EXECUTABLE = 0o100755 # for blobs only
27
+ OBJECT_MODE_NON_EXECUTABLE = 0o100644 # for blobs only
28
+ OBJECT_MODE_TREE = 0o40000
29
+
30
+ FILECTX_FLAGS_TO_GIT_MODE_BYTES = {
31
+ b'l': b'%o' % OBJECT_MODE_LINK,
32
+ b'x': b'%o' % OBJECT_MODE_EXECUTABLE,
33
+ b'': b'%o' % OBJECT_MODE_NON_EXECUTABLE,
34
+ }
@@ -13,7 +13,6 @@ utilities about refs, i.e, anything about a full ref path, such as
13
13
  or tags.
14
14
  """
15
15
  from fnmatch import fnmatch
16
- import os
17
16
  import re
18
17
 
19
18
  from heptapod.gitlab.branch import gitlab_branch_ref
@@ -23,8 +22,6 @@ from hgext3rd.heptapod.branch import (
23
22
  get_default_gitlab_branch,
24
23
  )
25
24
  from hgext3rd.heptapod.tag import gitlab_tags
26
- from hgext3rd.heptapod import ensure_gitlab_special_refs
27
- from hgext3rd.heptapod import ensure_gitlab_keep_arounds
28
25
  from hgext3rd.heptapod.special_ref import (
29
26
  GITLAB_TYPED_REFS_MISSING,
30
27
  parse_special_ref,
@@ -40,33 +37,6 @@ from hgext3rd.heptapod.keep_around import (
40
37
  DOT_HG_RX = re.compile(br'\.hg$')
41
38
 
42
39
 
43
- def has_legacy_git_repo(repo):
44
- """Return whether there is a legacy Git repo for this Mercurial repo.
45
-
46
- With "legacy" here is meant the Git repository for a non-native project.
47
- Git repositories meant for mirroring are *not* included in this scope.
48
-
49
- As of Heptapod 17.6, this is the best way to know without direct indication
50
- (from the inside) that a repository is not legacy (hg-git based).
51
- The reverse implication is false, as there are loopholes:
52
-
53
- - leftover Git repositories for Projects that have migrated to native
54
- - native projects with addition conversion for mirrors whose Git
55
- repositories have not been moved yet (bug, time to run the migration,
56
- etc.)
57
-
58
- The caller must be aware of these loopholes and avoid overwriting existing
59
- data based on the legacy Git repo. In the intended case where this is to
60
- decide on calling the `ensure` methods, this means it is ok only if there
61
- is no existing data.
62
- """
63
- # if a repository is legacy, based on hg-git conversion, is whether
64
- # it has a `.git` repository at the same location. Git repositories
65
- # for mirroring are in a different place
66
- git_path = DOT_HG_RX.sub(b'', repo.root) + b'.git'
67
- return os.path.exists(git_path)
68
-
69
-
70
40
  def gitlab_special_ref_target(repo, ref_path):
71
41
  """Return the changeset for a special ref.
72
42
 
@@ -135,8 +105,6 @@ def iter_gitlab_special_refs_as_refs(repo, deref=True, patterns=None):
135
105
  """
136
106
  all_special_refs = special_refs(repo)
137
107
  if all_special_refs is GITLAB_TYPED_REFS_MISSING:
138
- # transitional while we still have an inner Git repo
139
- # would still be the best we can do near the end of HGitaly2 milestone
140
108
  all_special_refs = ensure_special_refs(repo)
141
109
 
142
110
  for sref, sha in all_special_refs.items():
@@ -147,22 +115,18 @@ def iter_gitlab_special_refs_as_refs(repo, deref=True, patterns=None):
147
115
 
148
116
 
149
117
  def ensure_special_refs(repo):
150
- if has_legacy_git_repo(repo):
151
- return ensure_gitlab_special_refs(repo.ui, repo)
152
118
  return {}
153
119
 
154
120
 
155
121
  def ensure_keep_arounds(repo, init_empty=False):
156
- """Ensure keep around from Git repo if present or create.
122
+ """Ensure keep around file by creating it if needed
157
123
 
158
124
  An empty file is created so that the keep-arounds file is no
159
125
  more missing, but only if `init_empty` is `True`, so that
160
- responsibility is handed to the caller, than must use the
126
+ responsibility is handed to the caller, that must use the
161
127
  option only after having obtained the missing marker.
162
128
  """
163
- if has_legacy_git_repo(repo):
164
- ensure_gitlab_keep_arounds(repo.ui, repo)
165
- elif init_empty:
129
+ if init_empty:
166
130
  init_keep_arounds(repo, ())
167
131
 
168
132
 
@@ -234,19 +234,6 @@ class ManifestMiner:
234
234
  prefix + b'/'.join(flat_path) if flat_path else dir_path
235
235
  )
236
236
 
237
- def file_names_by_regexp(self, rx, subdir=b''):
238
- manifest = self.changeset.manifest()
239
- subdir_prefix = subdir + b'/' if subdir else b''
240
-
241
- for file_path in manifest.iterkeys():
242
- if not file_path.startswith(subdir_prefix):
243
- continue
244
-
245
- if rx is not None and rx.search(file_path) is None:
246
- continue
247
-
248
- yield file_path
249
-
250
237
  def iter_files_with_content(self, exclude_binary=False):
251
238
  manifest = self.changeset.manifest()
252
239
  repo = self.changeset.repo().unfiltered()