omdev 0.0.0.dev235__tar.gz → 0.0.0.dev236__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 (262) hide show
  1. {omdev-0.0.0.dev235/omdev.egg-info → omdev-0.0.0.dev236}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/.manifests.json +1 -1
  3. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/ci.py +7 -0
  4. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/interp.py +7 -0
  5. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/pyproject.py +7 -0
  6. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/cli.py +80 -25
  7. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/messages.py +20 -19
  8. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236/omdev.egg-info}/PKG-INFO +2 -2
  9. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/requires.txt +1 -1
  10. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/pyproject.toml +2 -2
  11. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/LICENSE +0 -0
  12. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/MANIFEST.in +0 -0
  13. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/README.rst +0 -0
  14. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/__about__.py +0 -0
  15. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/__init__.py +0 -0
  16. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/__init__.py +0 -0
  17. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/__main__.py +0 -0
  18. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/gen.py +0 -0
  19. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/imports.py +0 -0
  20. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/main.py +0 -0
  21. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/manifests.py +0 -0
  22. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/resources.py +0 -0
  23. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/srcfiles.py +0 -0
  24. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/strip.py +0 -0
  25. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/types.py +0 -0
  26. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/typing.py +0 -0
  27. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/__init__.py +0 -0
  28. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/consts.py +0 -0
  29. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/gen.py +0 -0
  30. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/bracepy.py +0 -0
  31. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/__init__.py +0 -0
  32. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/__init__.py +0 -0
  33. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/cache.py +0 -0
  34. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/contexts.py +0 -0
  35. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/currents.py +0 -0
  36. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/fns.py +0 -0
  37. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/resolvers.py +0 -0
  38. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/storage.py +0 -0
  39. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/types.py +0 -0
  40. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/__init__.py +0 -0
  41. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/actions.py +0 -0
  42. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/cache.py +0 -0
  43. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/consts.py +0 -0
  44. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/defaults.py +0 -0
  45. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/manifests.py +0 -0
  46. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/specs.py +0 -0
  47. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/__init__.py +0 -0
  48. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/__main__.py +0 -0
  49. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cdeps.py +0 -0
  50. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cdeps.toml +0 -0
  51. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cli.py +0 -0
  52. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/__init__.py +0 -0
  53. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_boilerplate.cc +0 -0
  54. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/LICENSE +0 -0
  55. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/__init__.py +0 -0
  56. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/build_ext.py +0 -0
  57. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  58. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  59. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/options.py +0 -0
  60. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  61. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/dir_util.py +0 -0
  62. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/errors.py +0 -0
  63. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/extension.py +0 -0
  64. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/file_util.py +0 -0
  65. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/modified.py +0 -0
  66. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/spawn.py +0 -0
  67. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/sysconfig.py +0 -0
  68. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/util.py +0 -0
  69. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/version.py +0 -0
  70. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/build.py +0 -0
  71. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/cmake.py +0 -0
  72. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/importhook.py +0 -0
  73. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/magic.py +0 -0
  74. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/scan.py +0 -0
  75. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/__init__.py +0 -0
  76. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/__main__.py +0 -0
  77. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/cache.py +0 -0
  78. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/ci.py +0 -0
  79. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/cli.py +0 -0
  80. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/compose.py +0 -0
  81. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/consts.py +0 -0
  82. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/__init__.py +0 -0
  83. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/buildcaching.py +0 -0
  84. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cache.py +0 -0
  85. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cacheserved.py +0 -0
  86. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cmds.py +0 -0
  87. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/dataserver.py +0 -0
  88. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/imagepulling.py +0 -0
  89. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/inject.py +0 -0
  90. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/packing.py +0 -0
  91. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/repositories.py +0 -0
  92. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/utils.py +0 -0
  93. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/__init__.py +0 -0
  94. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/api.py +0 -0
  95. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/bootstrap.py +0 -0
  96. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/cache.py +0 -0
  97. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/cli.py +0 -0
  98. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/client.py +0 -0
  99. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/env.py +0 -0
  100. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/inject.py +0 -0
  101. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/inject.py +0 -0
  102. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/requirements.py +0 -0
  103. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/shell.py +0 -0
  104. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/utils.py +0 -0
  105. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/classdot.py +0 -0
  106. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/__init__.py +0 -0
  107. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/__main__.py +0 -0
  108. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/_pathhack.py +0 -0
  109. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/clicli.py +0 -0
  110. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/install.py +0 -0
  111. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/main.py +0 -0
  112. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/managers.py +0 -0
  113. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/types.py +0 -0
  114. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/__init__.py +0 -0
  115. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/clipboard.py +0 -0
  116. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/darwin_cf.py +0 -0
  117. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/linux_x11.py +0 -0
  118. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cmake.py +0 -0
  119. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/__init__.py +0 -0
  120. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/handlers.py +0 -0
  121. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/http.py +0 -0
  122. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/routes.py +0 -0
  123. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/server.py +0 -0
  124. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/targets.py +0 -0
  125. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/findimports.py +0 -0
  126. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/__init__.py +0 -0
  127. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/revisions.py +0 -0
  128. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/shallow.py +0 -0
  129. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/status.py +0 -0
  130. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/__init__.py +0 -0
  131. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/paths.py +0 -0
  132. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/secrets.py +0 -0
  133. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/imgur.py +0 -0
  134. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/__init__.py +0 -0
  135. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/__main__.py +0 -0
  136. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/cli.py +0 -0
  137. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/default.py +0 -0
  138. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/inject.py +0 -0
  139. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/inspect.py +0 -0
  140. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/__init__.py +0 -0
  141. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/base.py +0 -0
  142. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/inject.py +0 -0
  143. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/running.py +0 -0
  144. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/standalone.py +0 -0
  145. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/system.py +0 -0
  146. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/__init__.py +0 -0
  147. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/inject.py +0 -0
  148. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/install.py +0 -0
  149. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/provider.py +0 -0
  150. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/pyenv.py +0 -0
  151. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/resolvers.py +0 -0
  152. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/types.py +0 -0
  153. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/__init__.py +0 -0
  154. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/inject.py +0 -0
  155. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/provider.py +0 -0
  156. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/uv.py +0 -0
  157. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/venvs.py +0 -0
  158. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/__init__.py +0 -0
  159. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/__main__.py +0 -0
  160. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/cli.py +0 -0
  161. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/find.py +0 -0
  162. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/magic.py +0 -0
  163. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/prepare.py +0 -0
  164. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/styles.py +0 -0
  165. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/__init__.py +0 -0
  166. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/__main__.py +0 -0
  167. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/build.py +0 -0
  168. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/main.py +0 -0
  169. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/mypy/__init__.py +0 -0
  170. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/mypy/debug.py +0 -0
  171. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/__init__.py +0 -0
  172. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/building.py +0 -0
  173. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/compression.py +0 -0
  174. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/data.py +0 -0
  175. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/datarefs.py +0 -0
  176. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/dataserver.py +0 -0
  177. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/loading.py +0 -0
  178. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/media.py +0 -0
  179. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/__init__.py +0 -0
  180. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/packing.py +0 -0
  181. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/repositories.py +0 -0
  182. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/unpacking.py +0 -0
  183. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/repositories.py +0 -0
  184. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/tars.py +0 -0
  185. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/__init__.py +0 -0
  186. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/marshal.py +0 -0
  187. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/names.py +0 -0
  188. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/requires.py +0 -0
  189. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/revisions.py +0 -0
  190. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/specifiers.py +0 -0
  191. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/versions.py +0 -0
  192. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/wheelfile.py +0 -0
  193. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pip.py +0 -0
  194. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/__init__.py +0 -0
  195. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/__main__.py +0 -0
  196. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/base.py +0 -0
  197. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/git.py +0 -0
  198. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/lite.py +0 -0
  199. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/main.py +0 -0
  200. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/manifests.py +0 -0
  201. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/scripts.py +0 -0
  202. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/__init__.py +0 -0
  203. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/apps/__init__.py +0 -0
  204. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/apps/ncdu.py +0 -0
  205. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/__init__.py +0 -0
  206. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/__main__.py +0 -0
  207. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/cli.py +0 -0
  208. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/__init__.py +0 -0
  209. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/__main__.py +0 -0
  210. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/cexts.py +0 -0
  211. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/cli.py +0 -0
  212. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/configs.py +0 -0
  213. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/inject.py +0 -0
  214. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/pkg.py +0 -0
  215. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/reqs.py +0 -0
  216. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/__init__.py +0 -0
  217. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/docker-dev.sh +0 -0
  218. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/python.sh +0 -0
  219. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/venvs.py +0 -0
  220. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/__init__.py +0 -0
  221. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/bumpversion.py +0 -0
  222. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/execrss.py +0 -0
  223. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/exectime.py +0 -0
  224. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/importtrace.py +0 -0
  225. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/slowcat.py +0 -0
  226. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/tmpexec.py +0 -0
  227. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tagstrings.py +0 -0
  228. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/__init__.py +0 -0
  229. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/all.py +0 -0
  230. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/tokenizert.py +0 -0
  231. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/utils.py +0 -0
  232. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/__init__.py +0 -0
  233. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/cloc.py +0 -0
  234. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/doc.py +0 -0
  235. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/docker.py +0 -0
  236. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/__init__.py +0 -0
  237. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/__main__.py +0 -0
  238. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/importscan.py +0 -0
  239. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/__init__.py +0 -0
  240. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/__main__.py +0 -0
  241. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/cli.py +0 -0
  242. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/formats.py +0 -0
  243. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/io.py +0 -0
  244. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/parsing.py +0 -0
  245. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/processing.py +0 -0
  246. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/rendering.py +0 -0
  247. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/linehisto.py +0 -0
  248. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/mkenv.py +0 -0
  249. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/mkrelimp.py +0 -0
  250. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/notebook.py +0 -0
  251. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/__init__.py +0 -0
  252. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/__main__.py +0 -0
  253. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/pawk.py +0 -0
  254. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pip.py +0 -0
  255. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/prof.py +0 -0
  256. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/qr.py +0 -0
  257. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/sqlrepl.py +0 -0
  258. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/SOURCES.txt +0 -0
  259. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/dependency_links.txt +0 -0
  260. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/entry_points.txt +0 -0
  261. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/top_level.txt +0 -0
  262. {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev235
3
+ Version: 0.0.0.dev236
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev235
15
+ Requires-Dist: omlish==0.0.0.dev236
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -291,7 +291,7 @@
291
291
  "module": ".tools.git.messages",
292
292
  "attr": "_TIMESTAMP_GIT_MESSAGE_GENERATOR_MANIFEST",
293
293
  "file": "omdev/tools/git/messages.py",
294
- "line": 74,
294
+ "line": 75,
295
295
  "value": {
296
296
  "$.tools.git.messages.GitMessageGeneratorManifest": {
297
297
  "mod_name": "omdev.tools.git.messages",
@@ -1732,6 +1732,9 @@ def is_in_github_actions() -> bool:
1732
1732
  ########################################
1733
1733
  # ../../../omlish/argparse/cli.py
1734
1734
  """
1735
+ FIXME:
1736
+ - exit_on_error lol
1737
+
1735
1738
  TODO:
1736
1739
  - default command
1737
1740
  - auto match all underscores to hyphens
@@ -1759,6 +1762,10 @@ def argparse_arg(*args, **kwargs) -> ArgparseArg:
1759
1762
  return ArgparseArg(args, kwargs)
1760
1763
 
1761
1764
 
1765
+ def argparse_arg_(*args, **kwargs) -> ta.Any:
1766
+ return argparse_arg(*args, **kwargs)
1767
+
1768
+
1762
1769
  #
1763
1770
 
1764
1771
 
@@ -2127,6 +2127,9 @@ class SpecifierSet(BaseSpecifier):
2127
2127
  ########################################
2128
2128
  # ../../../omlish/argparse/cli.py
2129
2129
  """
2130
+ FIXME:
2131
+ - exit_on_error lol
2132
+
2130
2133
  TODO:
2131
2134
  - default command
2132
2135
  - auto match all underscores to hyphens
@@ -2154,6 +2157,10 @@ def argparse_arg(*args, **kwargs) -> ArgparseArg:
2154
2157
  return ArgparseArg(args, kwargs)
2155
2158
 
2156
2159
 
2160
+ def argparse_arg_(*args, **kwargs) -> ta.Any:
2161
+ return argparse_arg(*args, **kwargs)
2162
+
2163
+
2157
2164
  #
2158
2165
 
2159
2166
 
@@ -3785,6 +3785,9 @@ class RequirementsRewriter:
3785
3785
  ########################################
3786
3786
  # ../../../omlish/argparse/cli.py
3787
3787
  """
3788
+ FIXME:
3789
+ - exit_on_error lol
3790
+
3788
3791
  TODO:
3789
3792
  - default command
3790
3793
  - auto match all underscores to hyphens
@@ -3812,6 +3815,10 @@ def argparse_arg(*args, **kwargs) -> ArgparseArg:
3812
3815
  return ArgparseArg(args, kwargs)
3813
3816
 
3814
3817
 
3818
+ def argparse_arg_(*args, **kwargs) -> ta.Any:
3819
+ return argparse_arg(*args, **kwargs)
3820
+
3821
+
3815
3822
  #
3816
3823
 
3817
3824
 
@@ -1,44 +1,56 @@
1
+ # ruff: noqa: UP006 UP007
1
2
  """
2
3
  TODO:
3
4
  - https://github.com/vegardit/bash-funk/blob/main/docs/git.md
4
5
  """
6
+ import dataclasses as dc
5
7
  import os
6
8
  import re
7
- import subprocess
8
9
  import typing as ta
9
10
  import urllib.parse
10
11
 
12
+ from omlish import cached
11
13
  from omlish import check
14
+ from omlish import lang
12
15
  from omlish.argparse import all as ap
13
16
  from omlish.formats import json
17
+ from omlish.formats import yaml
14
18
  from omlish.logs import all as logs
19
+ from omlish.subprocesses.sync import subprocesses
15
20
 
16
21
  from ...git.status import GitStatusItem
17
22
  from ...git.status import get_git_status
23
+ from ...home.paths import get_home_dir
18
24
  from .messages import GitMessageGenerator
19
25
  from .messages import TimestampGitMessageGenerator
20
26
  from .messages import load_message_generator_manifests
21
27
  from .messages import load_message_generator_manifests_map
22
28
 
23
29
 
30
+ if ta.TYPE_CHECKING:
31
+ from omlish import marshal as msh
32
+ else:
33
+ msh = lang.proxy_import('omlish.marshal')
34
+
35
+
24
36
  ##
25
37
 
26
38
 
27
39
  def rev_parse(rev: str) -> str:
28
- return subprocess.check_output(['git', 'rev-parse', rev]).decode().strip()
40
+ return subprocesses.check_output('git', 'rev-parse', rev).decode().strip()
29
41
 
30
42
 
31
43
  def get_first_commit_of_day(rev: str) -> str | None:
32
- commit_date = subprocess.check_output([
44
+ commit_date = subprocesses.check_output(
33
45
  'git', 'show', '-s', '--format=%ci', rev,
34
- ]).decode().strip().split(' ')[0]
46
+ ).decode().strip().split(' ')[0]
35
47
 
36
- first_commit = subprocess.check_output([
48
+ first_commit = subprocesses.check_output(
37
49
  'git', 'rev-list', '--reverse', '--max-parents=1',
38
50
  '--since', f'{commit_date} 00:00:00',
39
51
  '--until', f'{commit_date} 23:59:59',
40
52
  rev,
41
- ]).decode().strip().splitlines()
53
+ ).decode().strip().splitlines()
42
54
 
43
55
  # Return the first commit (if there is any)
44
56
  if first_commit:
@@ -48,10 +60,41 @@ def get_first_commit_of_day(rev: str) -> str | None:
48
60
 
49
61
 
50
62
  class Cli(ap.Cli):
63
+ @dc.dataclass(frozen=True, kw_only=True)
64
+ class Config:
65
+ default_message_generator: str | None = None
66
+
67
+ _config_file_path_arg: ta.Optional[str] = ap.arg_('-c', '--config-file-path', nargs='?')
68
+
69
+ @cached.function
70
+ def config_file_path(self) -> str:
71
+ if (arg := self._config_file_path_arg) is not None:
72
+ return os.path.expanduser(arg)
73
+ else:
74
+ return os.path.join(get_home_dir(), 'tools', 'git.yml')
75
+
76
+ @cached.function
77
+ def load_config(self) -> Config:
78
+ try:
79
+ with open(self.config_file_path()) as f:
80
+ buf = f.read()
81
+ except FileNotFoundError:
82
+ return self.Config()
83
+
84
+ dct = yaml.safe_load(buf)
85
+ return msh.unmarshal(dct, self.Config)
86
+
87
+ @ap.cmd()
88
+ def print_cfg(self) -> None:
89
+ cfg = self.load_config()
90
+ print(yaml.dump(msh.marshal(cfg)))
91
+
92
+ #
93
+
51
94
  @ap.cmd()
52
95
  def blob_sizes(self) -> None:
53
96
  # https://stackoverflow.com/a/42544963
54
- subprocess.check_call( # noqa
97
+ subprocesses.check_call( # noqa
55
98
  "git rev-list --objects --all | "
56
99
  "git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | "
57
100
  "sed -n 's/^blob //p' | "
@@ -63,7 +106,7 @@ class Cli(ap.Cli):
63
106
 
64
107
  @ap.cmd()
65
108
  def commits_by_date(self) -> None:
66
- subprocess.check_call(['git log --date=short --pretty=format:%ad | sort | uniq -c'], shell=True) # noqa
109
+ subprocesses.check_call('git log --date=short --pretty=format:%ad | sort | uniq -c', shell=True) # noqa
67
110
 
68
111
  #
69
112
 
@@ -86,14 +129,14 @@ class Cli(ap.Cli):
86
129
 
87
130
  os.makedirs(user, 0o755, exist_ok=True)
88
131
 
89
- subprocess.check_call([
132
+ subprocesses.check_call(
90
133
  'git',
91
134
  'clone',
92
135
  *self.unknown_args,
93
136
  *self.args.args,
94
137
  f'git@github.com:{user}/{repo}.git',
95
138
  os.path.join(user, repo),
96
- ])
139
+ )
97
140
 
98
141
  out_dir = os.path.join(user, repo)
99
142
 
@@ -101,13 +144,13 @@ class Cli(ap.Cli):
101
144
  parsed = urllib.parse.urlparse(self.args.repo)
102
145
  out_dir = parsed.path.split('/')[-1]
103
146
 
104
- subprocess.check_call([
147
+ subprocesses.check_call(
105
148
  'git',
106
149
  'clone',
107
150
  *self.unknown_args,
108
151
  *self.args.args,
109
152
  self.args.repo,
110
- ])
153
+ )
111
154
 
112
155
  finally:
113
156
  print(out_dir)
@@ -128,7 +171,7 @@ class Cli(ap.Cli):
128
171
  os.execvp('git', ['git', 'diff', *(['--stat'] if self.args.stat else []), base_rev, rev])
129
172
 
130
173
  elif self.args.github or self.args.open:
131
- rm_url = subprocess.check_output(['git', 'remote', 'get-url', 'origin']).decode('utf-8').strip()
174
+ rm_url = subprocesses.check_output('git', 'remote', 'get-url', 'origin').decode('utf-8').strip()
132
175
 
133
176
  if rm_url.startswith(git_pfx := 'git@github.com:'):
134
177
  s = rm_url[len(git_pfx):]
@@ -144,7 +187,7 @@ class Cli(ap.Cli):
144
187
  gh_url = f'https://github.com/{user}/{repo}/compare/{base_rev}...{rev}#files_bucket'
145
188
 
146
189
  if self.args.open:
147
- subprocess.check_call(['open', gh_url])
190
+ subprocesses.check_call('open', gh_url)
148
191
  else:
149
192
  print(gh_url)
150
193
 
@@ -194,35 +237,47 @@ class Cli(ap.Cli):
194
237
  ap.arg('-g', '--message-generator', nargs='?'),
195
238
  ap.arg('--time-fmt', default=GitMessageGenerator.GenerateCommitMessageArgs.DEFAULT_TIME_FMT),
196
239
  ap.arg('--dry-run', action='store_true'),
240
+ ap.arg('-y', '--no-confirmation', action='store_true'),
197
241
  ap.arg('dir', nargs='*'),
198
242
  aliases=['acp'],
199
243
  )
200
244
  def add_commit_push(self) -> None:
201
245
  def run(cwd: str | None) -> None:
246
+ def check_call(*cmd: str) -> None:
247
+ if self.args.dry_run:
248
+ print(cmd)
249
+ else:
250
+ subprocesses.check_call(*cmd, cwd=cwd)
251
+
202
252
  st = get_git_status(cwd=cwd)
203
253
 
204
254
  if st.has_dirty:
205
- if not self.args.dry_run:
206
- subprocess.check_call(['git', 'add', '.'], cwd=cwd)
255
+ check_call('git', 'add', '.')
207
256
 
208
257
  if st.has_staged or st.has_dirty:
209
258
  if self.args.message is not None:
210
259
  msg = self.args.message
260
+
211
261
  else:
212
262
  mg_cls: type[GitMessageGenerator] = TimestampGitMessageGenerator
213
- if (mg_name := self.args.message_generator) is not None:
214
- mg_cls = load_message_generator_manifests_map()[mg_name].get_cls()
263
+ if (mg_name := self.args.message_generator) is None:
264
+ mg_name = self.load_config().default_message_generator
265
+ if mg_name is not None:
266
+ mg_cls = load_message_generator_manifests_map()[mg_name].load_cls()
215
267
  mg = mg_cls()
216
- msg = mg.generate_commit_message(GitMessageGenerator.GenerateCommitMessageArgs(
268
+
269
+ mgr = mg.generate_commit_message(GitMessageGenerator.GenerateCommitMessageArgs(
217
270
  cwd=cwd,
218
271
  time_fmt=self.args.time_fmt,
219
272
  ))
273
+ if mgr.confirm and not self._args.no_confirmation:
274
+ print(mgr.msg)
275
+ input()
276
+ msg = mgr.msg
220
277
 
221
- if not self.args.dry_run:
222
- subprocess.check_call(['git', 'commit', '-m', msg], cwd=cwd)
278
+ check_call('git', 'commit', '-m', msg)
223
279
 
224
- if not self.args.dry_run:
225
- subprocess.check_call(['git', 'push'], cwd=cwd)
280
+ check_call('git', 'push')
226
281
 
227
282
  if not self.args.dir:
228
283
  run(None)
@@ -236,8 +291,8 @@ class Cli(ap.Cli):
236
291
  )
237
292
  def pull_submodule_update(self) -> None:
238
293
  def run(cwd: str | None) -> None:
239
- subprocess.check_call(['git', 'pull'], cwd=cwd)
240
- subprocess.check_call(['git', 'submodule', 'update'], cwd=cwd)
294
+ subprocesses.check_call('git', 'pull', cwd=cwd)
295
+ subprocesses.check_call('git', 'submodule', 'update', cwd=cwd)
241
296
 
242
297
  if not self.args.dir:
243
298
  run(None)
@@ -1,6 +1,5 @@
1
1
  import abc
2
2
  import dataclasses as dc
3
- import importlib
4
3
  import os
5
4
  import typing as ta
6
5
 
@@ -8,6 +7,8 @@ from omlish import cached
8
7
  from omlish import check
9
8
  from omlish import lang
10
9
  from omlish.manifests import load as manifest_load
10
+ from omlish.manifests.base import ModAttrManifest
11
+ from omlish.manifests.base import NameAliasesManifest
11
12
 
12
13
 
13
14
  ##
@@ -21,8 +22,14 @@ class GitMessageGenerator(abc.ABC):
21
22
  DEFAULT_TIME_FMT: ta.ClassVar[str] = '%Y-%m-%dT%H:%M:%SZ'
22
23
  time_fmt: str = DEFAULT_TIME_FMT
23
24
 
25
+ @dc.dataclass(frozen=True, kw_only=True)
26
+ class GenerateCommitMessageResult:
27
+ msg: str
28
+
29
+ confirm: bool = False
30
+
24
31
  @abc.abstractmethod
25
- def generate_commit_message(self, args: GenerateCommitMessageArgs) -> str:
32
+ def generate_commit_message(self, args: GenerateCommitMessageArgs) -> GenerateCommitMessageResult:
26
33
  raise NotImplementedError
27
34
 
28
35
 
@@ -30,15 +37,9 @@ class GitMessageGenerator(abc.ABC):
30
37
 
31
38
 
32
39
  @dc.dataclass(frozen=True, kw_only=True)
33
- class GitMessageGeneratorManifest:
34
- mod_name: str
35
- attr_name: str
36
- name: str
37
- aliases: ta.Collection[str] | None = None
38
-
39
- def get_cls(self) -> type[GitMessageGenerator]:
40
- mod = importlib.import_module(self.mod_name)
41
- return check.issubclass(getattr(mod, self.attr_name), GitMessageGenerator)
40
+ class GitMessageGeneratorManifest(NameAliasesManifest, ModAttrManifest):
41
+ def load_cls(self) -> type[GitMessageGenerator]:
42
+ return check.issubclass(self.load(), GitMessageGenerator)
42
43
 
43
44
 
44
45
  @cached.function
@@ -51,12 +52,7 @@ def load_message_generator_manifests() -> ta.Sequence[GitMessageGeneratorManifes
51
52
 
52
53
  @cached.function
53
54
  def load_message_generator_manifests_map() -> ta.Mapping[str, GitMessageGeneratorManifest]:
54
- dct: dict[str, GitMessageGeneratorManifest] = {}
55
- for m in load_message_generator_manifests():
56
- for n in (m.name, *(m.aliases or ())):
57
- check.not_in(n, dct)
58
- dct[n] = m
59
- return dct
55
+ return GitMessageGeneratorManifest.build_name_dict(load_message_generator_manifests())
60
56
 
61
57
 
62
58
  ##
@@ -64,8 +60,13 @@ def load_message_generator_manifests_map() -> ta.Mapping[str, GitMessageGenerato
64
60
 
65
61
  @dc.dataclass(frozen=True)
66
62
  class TimestampGitMessageGenerator(GitMessageGenerator):
67
- def generate_commit_message(self, args: GitMessageGenerator.GenerateCommitMessageArgs) -> str:
68
- return lang.utcnow().strftime(args.time_fmt)
63
+ def generate_commit_message(
64
+ self,
65
+ args: GitMessageGenerator.GenerateCommitMessageArgs,
66
+ ) -> GitMessageGenerator.GenerateCommitMessageResult:
67
+ return GitMessageGenerator.GenerateCommitMessageResult(
68
+ msg=lang.utcnow().strftime(args.time_fmt),
69
+ )
69
70
 
70
71
 
71
72
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev235
3
+ Version: 0.0.0.dev236
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev235
15
+ Requires-Dist: omlish==0.0.0.dev236
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev235
1
+ omlish==0.0.0.dev236
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev235'
15
+ version = '0.0.0.dev236'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev235',
25
+ 'omlish == 0.0.0.dev236',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes