omdev 0.0.0.dev158__tar.gz → 0.0.0.dev160__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.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

Files changed (170) hide show
  1. {omdev-0.0.0.dev158/omdev.egg-info → omdev-0.0.0.dev160}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/amalg/amalg.py +3 -3
  3. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/cache.py +2 -2
  4. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/manifests.py +1 -1
  5. omdev-0.0.0.dev160/omdev/git/revisions.py +50 -0
  6. omdev-0.0.0.dev158/omdev/git.py → omdev-0.0.0.dev160/omdev/git/status.py +0 -111
  7. omdev-0.0.0.dev160/omdev/git/subtrees.py +100 -0
  8. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/cli.py +2 -2
  9. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/cli.py +2 -2
  10. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/revisions.py +1 -1
  11. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/interp.py +16 -10
  12. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/pyproject.py +48 -389
  13. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/git.py +2 -2
  14. omdev-0.0.0.dev160/omdev/tools/pawk/__init__.py +0 -0
  15. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160/omdev.egg-info}/PKG-INFO +2 -2
  16. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev.egg-info/SOURCES.txt +4 -1
  17. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev.egg-info/requires.txt +1 -1
  18. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/pyproject.toml +2 -2
  19. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/LICENSE +0 -0
  20. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/MANIFEST.in +0 -0
  21. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/README.rst +0 -0
  22. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/.manifests.json +0 -0
  23. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/__about__.py +0 -0
  24. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/__init__.py +0 -0
  25. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/amalg/__init__.py +0 -0
  26. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/amalg/__main__.py +0 -0
  27. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/antlr/__init__.py +0 -0
  28. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/antlr/consts.py +0 -0
  29. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/antlr/gen.py +0 -0
  30. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/bracepy.py +0 -0
  31. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/__init__.py +0 -0
  32. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/__init__.py +0 -0
  33. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/cache.py +0 -0
  34. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/contexts.py +0 -0
  35. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/currents.py +0 -0
  36. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/fns.py +0 -0
  37. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/resolvers.py +0 -0
  38. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/storage.py +0 -0
  39. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/compute/types.py +0 -0
  40. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/__init__.py +0 -0
  41. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/actions.py +0 -0
  42. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/consts.py +0 -0
  43. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/defaults.py +0 -0
  44. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cache/data/specs.py +0 -0
  45. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/__init__.py +0 -0
  46. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_boilerplate.cc +0 -0
  47. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/LICENSE +0 -0
  48. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/__init__.py +0 -0
  49. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/build_ext.py +0 -0
  50. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  51. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  52. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/compilers/options.py +0 -0
  53. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  54. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/dir_util.py +0 -0
  55. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/errors.py +0 -0
  56. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/extension.py +0 -0
  57. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/file_util.py +0 -0
  58. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/modified.py +0 -0
  59. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/spawn.py +0 -0
  60. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/sysconfig.py +0 -0
  61. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/util.py +0 -0
  62. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/_distutils/version.py +0 -0
  63. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/build.py +0 -0
  64. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/cmake.py +0 -0
  65. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/importhook.py +0 -0
  66. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/magic.py +0 -0
  67. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cexts/scan.py +0 -0
  68. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/classdot.py +0 -0
  69. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/__init__.py +0 -0
  70. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/__main__.py +0 -0
  71. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/_pathhack.py +0 -0
  72. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/clicli.py +0 -0
  73. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/install.py +0 -0
  74. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/main.py +0 -0
  75. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/managers.py +0 -0
  76. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cli/types.py +0 -0
  77. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/clipboard/__init__.py +0 -0
  78. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/clipboard/clipboard.py +0 -0
  79. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/clipboard/darwin_cf.py +0 -0
  80. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/clipboard/linux_x11.py +0 -0
  81. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/cmake.py +0 -0
  82. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/findimports.py +0 -0
  83. {omdev-0.0.0.dev158/omdev/mypy → omdev-0.0.0.dev160/omdev/git}/__init__.py +0 -0
  84. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/imgur.py +0 -0
  85. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/__init__.py +0 -0
  86. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/__main__.py +0 -0
  87. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/inspect.py +0 -0
  88. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/providers.py +0 -0
  89. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/pyenv.py +0 -0
  90. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/resolvers.py +0 -0
  91. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/standalone.py +0 -0
  92. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/system.py +0 -0
  93. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/interp/types.py +0 -0
  94. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/magic/__init__.py +0 -0
  95. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/magic/find.py +0 -0
  96. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/magic/magic.py +0 -0
  97. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/magic/prepare.py +0 -0
  98. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/magic/styles.py +0 -0
  99. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/manifests/__init__.py +0 -0
  100. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/manifests/__main__.py +0 -0
  101. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/manifests/build.py +0 -0
  102. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/manifests/main.py +0 -0
  103. {omdev-0.0.0.dev158/omdev/packaging → omdev-0.0.0.dev160/omdev/mypy}/__init__.py +0 -0
  104. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/mypy/debug.py +0 -0
  105. {omdev-0.0.0.dev158/omdev/precheck → omdev-0.0.0.dev160/omdev/packaging}/__init__.py +0 -0
  106. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/packaging/marshal.py +0 -0
  107. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/packaging/names.py +0 -0
  108. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/packaging/requires.py +0 -0
  109. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/packaging/specifiers.py +0 -0
  110. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/packaging/versions.py +0 -0
  111. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pip.py +0 -0
  112. {omdev-0.0.0.dev158/omdev/ptk/apps → omdev-0.0.0.dev160/omdev/precheck}/__init__.py +0 -0
  113. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/__main__.py +0 -0
  114. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/base.py +0 -0
  115. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/git.py +0 -0
  116. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/lite.py +0 -0
  117. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/main.py +0 -0
  118. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/manifests.py +0 -0
  119. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/precheck/scripts.py +0 -0
  120. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/ptk/__init__.py +0 -0
  121. {omdev-0.0.0.dev158/omdev/pycharm → omdev-0.0.0.dev160/omdev/ptk/apps}/__init__.py +0 -0
  122. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/ptk/apps/ncdu.py +0 -0
  123. {omdev-0.0.0.dev158/omdev/tools/json → omdev-0.0.0.dev160/omdev/pycharm}/__init__.py +0 -0
  124. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pycharm/__main__.py +0 -0
  125. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pycharm/cli.py +0 -0
  126. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/__init__.py +0 -0
  127. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/__main__.py +0 -0
  128. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/cexts.py +0 -0
  129. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/configs.py +0 -0
  130. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/pkg.py +0 -0
  131. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/reqs.py +0 -0
  132. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/pyproject/venvs.py +0 -0
  133. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/__init__.py +0 -0
  134. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/bumpversion.py +0 -0
  135. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/execrss.py +0 -0
  136. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/exectime.py +0 -0
  137. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/importtrace.py +0 -0
  138. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/slowcat.py +0 -0
  139. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/scripts/tmpexec.py +0 -0
  140. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/secrets.py +0 -0
  141. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tokens.py +0 -0
  142. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/toml/__init__.py +0 -0
  143. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/toml/parser.py +0 -0
  144. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/toml/writer.py +0 -0
  145. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/__init__.py +0 -0
  146. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/cloc.py +0 -0
  147. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/doc.py +0 -0
  148. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/docker.py +0 -0
  149. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/importscan.py +0 -0
  150. {omdev-0.0.0.dev158/omdev/tools/pawk → omdev-0.0.0.dev160/omdev/tools/json}/__init__.py +0 -0
  151. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/__main__.py +0 -0
  152. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/cli.py +0 -0
  153. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/formats.py +0 -0
  154. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/io.py +0 -0
  155. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/parsing.py +0 -0
  156. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/processing.py +0 -0
  157. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/json/rendering.py +0 -0
  158. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/mkrelimp.py +0 -0
  159. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/notebook.py +0 -0
  160. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/pawk/__main__.py +0 -0
  161. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/pawk/pawk.py +0 -0
  162. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/pip.py +0 -0
  163. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/prof.py +0 -0
  164. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/qr.py +0 -0
  165. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/tools/sqlrepl.py +0 -0
  166. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev/wheelfile.py +0 -0
  167. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev.egg-info/dependency_links.txt +0 -0
  168. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev.egg-info/entry_points.txt +0 -0
  169. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/omdev.egg-info/top_level.txt +0 -0
  170. {omdev-0.0.0.dev158 → omdev-0.0.0.dev160}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev158
3
+ Version: 0.0.0.dev160
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.dev158
15
+ Requires-Dist: omlish==0.0.0.dev160
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -41,7 +41,7 @@ import tokenize_rt as trt
41
41
  from omlish import check
42
42
  from omlish import collections as col
43
43
  from omlish import lang
44
- from omlish.lite.runtime import REQUIRED_PYTHON_VERSION
44
+ from omlish.lite.runtime import LITE_REQUIRED_PYTHON_VERSION
45
45
  from omlish.logs import all as logs
46
46
 
47
47
  from .. import magic
@@ -595,11 +595,11 @@ def gen_amalg(
595
595
  out.write('\n\n')
596
596
 
597
597
  version_check_fail_msg = (
598
- f'Requires python {REQUIRED_PYTHON_VERSION!r}, '
598
+ f'Requires python {LITE_REQUIRED_PYTHON_VERSION!r}, '
599
599
  f'got {{sys.version_info}} from {{sys.executable}}'
600
600
  )
601
601
  out.write(textwrap.dedent(f"""
602
- if sys.version_info < {REQUIRED_PYTHON_VERSION!r}:
602
+ if sys.version_info < {LITE_REQUIRED_PYTHON_VERSION!r}:
603
603
  raise OSError(f{version_check_fail_msg!r}) # noqa
604
604
  """).lstrip())
605
605
  out.write('\n\n')
@@ -27,7 +27,7 @@ from omlish import marshal as msh
27
27
  from omlish.formats import json
28
28
  from omlish.os.files import touch
29
29
 
30
- from ... import git
30
+ from ...git.subtrees import git_clone_subtree
31
31
  from .actions import Action
32
32
  from .actions import ExtractAction
33
33
  from .manifests import Manifest
@@ -148,7 +148,7 @@ class Cache:
148
148
 
149
149
  log.info('Cloning git repo: %s -> %s', spec.url, tmp_dir)
150
150
 
151
- git.git_clone_subtree(
151
+ git_clone_subtree(
152
152
  base_dir=tmp_dir,
153
153
  repo_url=spec.url,
154
154
  repo_dir='data',
@@ -4,7 +4,7 @@ from omlish import __about__ as about
4
4
  from omlish import cached
5
5
  from omlish import dataclasses as dc
6
6
 
7
- from ...git import get_git_revision
7
+ from ...git.revisions import get_git_revision
8
8
  from .consts import SERIALIZATION_VERSION
9
9
  from .specs import Spec
10
10
 
@@ -0,0 +1,50 @@
1
+ # ruff: noqa: UP006 UP007
2
+ # @omlish-lite
3
+ import os.path
4
+ import subprocess
5
+ import typing as ta
6
+
7
+ from omlish.subprocesses import subprocess_maybe_shell_wrap_exec
8
+ from omlish.subprocesses import subprocesses
9
+
10
+
11
+ def get_git_revision(
12
+ *,
13
+ cwd: ta.Optional[str] = None,
14
+ ) -> ta.Optional[str]:
15
+ subprocesses.check_output('git', '--version')
16
+
17
+ if cwd is None:
18
+ cwd = os.getcwd()
19
+
20
+ if subprocess.run( # noqa
21
+ subprocess_maybe_shell_wrap_exec(
22
+ 'git',
23
+ 'rev-parse',
24
+ '--is-inside-work-tree',
25
+ ),
26
+ stdout=subprocess.PIPE,
27
+ stderr=subprocess.PIPE,
28
+ ).returncode:
29
+ return None
30
+
31
+ has_untracked = bool(subprocesses.check_output(
32
+ 'git',
33
+ 'ls-files',
34
+ '.',
35
+ '--exclude-standard',
36
+ '--others',
37
+ cwd=cwd,
38
+ ).decode().strip())
39
+
40
+ dirty_rev = subprocesses.check_output(
41
+ 'git',
42
+ 'describe',
43
+ '--match=NeVeRmAtCh',
44
+ '--always',
45
+ '--abbrev=40',
46
+ '--dirty',
47
+ cwd=cwd,
48
+ ).decode().strip()
49
+
50
+ return dirty_rev + ('-untracked' if has_untracked else '')
@@ -1,11 +1,5 @@
1
1
  # ruff: noqa: UP006 UP007
2
2
  # @omlish-lite
3
- """
4
- git status
5
- --porcelain=v1
6
- --ignore-submodules
7
- 2>/dev/null
8
- """
9
3
  import dataclasses as dc
10
4
  import enum
11
5
  import os.path
@@ -16,111 +10,6 @@ from omlish.lite.check import check
16
10
  from omlish.subprocesses import subprocess_maybe_shell_wrap_exec
17
11
 
18
12
 
19
- ##
20
-
21
-
22
- def git_clone_subtree(
23
- *,
24
- base_dir: str,
25
- repo_url: str,
26
- repo_dir: str,
27
- branch: ta.Optional[str] = None,
28
- rev: ta.Optional[str] = None,
29
- repo_subtrees: ta.Sequence[str],
30
- ) -> None:
31
- if not bool(branch) ^ bool(rev):
32
- raise ValueError('must set branch or rev')
33
-
34
- if isinstance(repo_subtrees, str):
35
- raise TypeError(repo_subtrees)
36
-
37
- git_opts = [
38
- '-c', 'advice.detachedHead=false',
39
- ]
40
-
41
- subprocess.check_call(
42
- subprocess_maybe_shell_wrap_exec(
43
- 'git',
44
- *git_opts,
45
- 'clone',
46
- '-n',
47
- '--depth=1',
48
- '--filter=tree:0',
49
- *(['-b', branch] if branch else []),
50
- '--single-branch',
51
- repo_url,
52
- repo_dir,
53
- ),
54
- cwd=base_dir,
55
- )
56
-
57
- rd = os.path.join(base_dir, repo_dir)
58
- subprocess.check_call(
59
- subprocess_maybe_shell_wrap_exec(
60
- 'git',
61
- *git_opts,
62
- 'sparse-checkout',
63
- 'set',
64
- '--no-cone',
65
- *repo_subtrees,
66
- ),
67
- cwd=rd,
68
- )
69
-
70
- subprocess.check_call(
71
- subprocess_maybe_shell_wrap_exec(
72
- 'git',
73
- *git_opts,
74
- 'checkout',
75
- *([rev] if rev else []),
76
- ),
77
- cwd=rd,
78
- )
79
-
80
-
81
- def get_git_revision(
82
- *,
83
- cwd: ta.Optional[str] = None,
84
- ) -> ta.Optional[str]:
85
- subprocess.check_output(subprocess_maybe_shell_wrap_exec('git', '--version'))
86
-
87
- if cwd is None:
88
- cwd = os.getcwd()
89
-
90
- if subprocess.run( # noqa
91
- subprocess_maybe_shell_wrap_exec(
92
- 'git',
93
- 'rev-parse',
94
- '--is-inside-work-tree',
95
- ),
96
- stdout=subprocess.PIPE,
97
- stderr=subprocess.PIPE,
98
- ).returncode:
99
- return None
100
-
101
- has_untracked = bool(subprocess.check_output(subprocess_maybe_shell_wrap_exec(
102
- 'git',
103
- 'ls-files',
104
- '.',
105
- '--exclude-standard',
106
- '--others',
107
- ), cwd=cwd).decode().strip())
108
-
109
- dirty_rev = subprocess.check_output(subprocess_maybe_shell_wrap_exec(
110
- 'git',
111
- 'describe',
112
- '--match=NeVeRmAtCh',
113
- '--always',
114
- '--abbrev=40',
115
- '--dirty',
116
- ), cwd=cwd).decode().strip()
117
-
118
- return dirty_rev + ('-untracked' if has_untracked else '')
119
-
120
-
121
- ##
122
-
123
-
124
13
  _GIT_STATUS_LINE_ESCAPE_CODES: ta.Mapping[str, str] = {
125
14
  '\\': '\\',
126
15
  '"': '"',
@@ -0,0 +1,100 @@
1
+ # ruff: noqa: UP006 UP007
2
+ # @omlish-lite
3
+ import dataclasses as dc
4
+ import os.path
5
+ import typing as ta
6
+
7
+ from omlish.subprocesses import subprocesses
8
+
9
+
10
+ @dc.dataclass(frozen=True)
11
+ class GitSubtreeCloner:
12
+ base_dir: str
13
+ repo_url: str
14
+ repo_dir: str
15
+
16
+ # _: dc.KW_ONLY
17
+
18
+ repo_subtrees: ta.Sequence[str]
19
+
20
+ branch: ta.Optional[str] = None
21
+ rev: ta.Optional[str] = None
22
+
23
+ def __post_init__(self) -> None:
24
+ if not bool(self.branch) ^ bool(self.rev):
25
+ raise ValueError('must set branch or rev')
26
+
27
+ if isinstance(self.repo_subtrees, str):
28
+ raise TypeError(self.repo_subtrees)
29
+
30
+ @dc.dataclass(frozen=True)
31
+ class Command:
32
+ cmd: ta.Sequence[str]
33
+ cwd: str
34
+
35
+ def build_commands(self) -> ta.Iterator[Command]:
36
+ git_opts = [
37
+ '-c', 'advice.detachedHead=false',
38
+ ]
39
+
40
+ yield GitSubtreeCloner.Command(
41
+ cmd=(
42
+ 'git',
43
+ *git_opts,
44
+ 'clone',
45
+ '-n',
46
+ '--depth=1',
47
+ '--filter=tree:0',
48
+ *(['-b', self.branch] if self.branch else []),
49
+ '--single-branch',
50
+ self.repo_url,
51
+ self.repo_dir,
52
+ ),
53
+ cwd=self.base_dir,
54
+ )
55
+
56
+ rd = os.path.join(self.base_dir, self.repo_dir)
57
+ yield GitSubtreeCloner.Command(
58
+ cmd=(
59
+ 'git',
60
+ *git_opts,
61
+ 'sparse-checkout',
62
+ 'set',
63
+ '--no-cone',
64
+ *self.repo_subtrees,
65
+ ),
66
+ cwd=rd,
67
+ )
68
+
69
+ yield GitSubtreeCloner.Command(
70
+ cmd=(
71
+ 'git',
72
+ *git_opts,
73
+ 'checkout',
74
+ *([self.rev] if self.rev else []),
75
+ ),
76
+ cwd=rd,
77
+ )
78
+
79
+
80
+ def git_clone_subtree(
81
+ *,
82
+ base_dir: str,
83
+ repo_url: str,
84
+ repo_dir: str,
85
+ branch: ta.Optional[str] = None,
86
+ rev: ta.Optional[str] = None,
87
+ repo_subtrees: ta.Sequence[str],
88
+ ) -> None:
89
+ for cmd in GitSubtreeCloner(
90
+ base_dir=base_dir,
91
+ repo_url=repo_url,
92
+ repo_dir=repo_dir,
93
+ branch=branch,
94
+ rev=rev,
95
+ repo_subtrees=repo_subtrees,
96
+ ).build_commands():
97
+ subprocesses.check_call(
98
+ *cmd.cmd,
99
+ cwd=cmd.cwd,
100
+ )
@@ -12,7 +12,7 @@ import asyncio
12
12
  import typing as ta
13
13
 
14
14
  from omlish.lite.check import check
15
- from omlish.lite.runtime import check_runtime_version
15
+ from omlish.lite.runtime import check_lite_runtime_version
16
16
  from omlish.logs.standard import configure_standard_logging
17
17
 
18
18
  from .resolvers import DEFAULT_INTERP_RESOLVER
@@ -58,7 +58,7 @@ def _build_parser() -> argparse.ArgumentParser:
58
58
 
59
59
 
60
60
  async def _async_main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
61
- check_runtime_version()
61
+ check_lite_runtime_version()
62
62
  configure_standard_logging()
63
63
 
64
64
  parser = _build_parser()
@@ -39,7 +39,7 @@ from omlish.argparse.cli import argparse_command
39
39
  from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
40
40
  from omlish.lite.cached import cached_nullary
41
41
  from omlish.lite.check import check
42
- from omlish.lite.runtime import check_runtime_version
42
+ from omlish.lite.runtime import check_lite_runtime_version
43
43
  from omlish.logs.standard import configure_standard_logging
44
44
 
45
45
  from ..toml.parser import toml_loads
@@ -288,7 +288,7 @@ class PyprojectCli(ArgparseCli):
288
288
 
289
289
 
290
290
  async def _async_main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
291
- check_runtime_version()
291
+ check_lite_runtime_version()
292
292
  configure_standard_logging()
293
293
 
294
294
  await PyprojectCli(argv).async_cli_run()
@@ -18,7 +18,7 @@ from omlish.lite.check import check
18
18
  from omlish.lite.logs import log
19
19
  from omlish.logs.standard import configure_standard_logging
20
20
 
21
- from .git import get_git_revision
21
+ from .git.revisions import get_git_revision
22
22
  from .wheelfile import WheelFile
23
23
 
24
24
 
@@ -1086,6 +1086,10 @@ def is_new_type(spec: ta.Any) -> bool:
1086
1086
  return isinstance(spec, types.FunctionType) and spec.__code__ is ta.NewType.__code__.co_consts[1] # type: ignore # noqa
1087
1087
 
1088
1088
 
1089
+ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
1090
+ return spec.__supertype__
1091
+
1092
+
1089
1093
  def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
1090
1094
  seen = set()
1091
1095
  todo = list(reversed(cls.__subclasses__()))
@@ -1806,12 +1810,12 @@ def is_debugger_attached() -> bool:
1806
1810
  return any(frame[1].endswith('pydevd.py') for frame in inspect.stack())
1807
1811
 
1808
1812
 
1809
- REQUIRED_PYTHON_VERSION = (3, 8)
1813
+ LITE_REQUIRED_PYTHON_VERSION = (3, 8)
1810
1814
 
1811
1815
 
1812
- def check_runtime_version() -> None:
1813
- if sys.version_info < REQUIRED_PYTHON_VERSION:
1814
- raise OSError(f'Requires python {REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
1816
+ def check_lite_runtime_version() -> None:
1817
+ if sys.version_info < LITE_REQUIRED_PYTHON_VERSION:
1818
+ raise OSError(f'Requires python {LITE_REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
1815
1819
 
1816
1820
 
1817
1821
  ########################################
@@ -1968,6 +1972,7 @@ TODO:
1968
1972
  - structured
1969
1973
  - prefixed
1970
1974
  - debug
1975
+ - optional noisy? noisy will never be lite - some kinda configure_standard callback mechanism?
1971
1976
  """
1972
1977
 
1973
1978
 
@@ -2004,8 +2009,9 @@ class StandardLogFormatter(logging.Formatter):
2004
2009
  ##
2005
2010
 
2006
2011
 
2007
- class StandardLogHandler(ProxyLogHandler):
2008
- pass
2012
+ class StandardConfiguredLogHandler(ProxyLogHandler):
2013
+ def __init_subclass__(cls, **kwargs):
2014
+ raise TypeError('This class serves only as a marker and should not be subclassed.')
2009
2015
 
2010
2016
 
2011
2017
  ##
@@ -2036,7 +2042,7 @@ def configure_standard_logging(
2036
2042
  target: ta.Optional[logging.Logger] = None,
2037
2043
  force: bool = False,
2038
2044
  handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
2039
- ) -> ta.Optional[StandardLogHandler]:
2045
+ ) -> ta.Optional[StandardConfiguredLogHandler]:
2040
2046
  with _locking_logging_module_lock():
2041
2047
  if target is None:
2042
2048
  target = logging.root
@@ -2044,7 +2050,7 @@ def configure_standard_logging(
2044
2050
  #
2045
2051
 
2046
2052
  if not force:
2047
- if any(isinstance(h, StandardLogHandler) for h in list(target.handlers)):
2053
+ if any(isinstance(h, StandardConfiguredLogHandler) for h in list(target.handlers)):
2048
2054
  return None
2049
2055
 
2050
2056
  #
@@ -2078,7 +2084,7 @@ def configure_standard_logging(
2078
2084
 
2079
2085
  #
2080
2086
 
2081
- return StandardLogHandler(handler)
2087
+ return StandardConfiguredLogHandler(handler)
2082
2088
 
2083
2089
 
2084
2090
  ########################################
@@ -3486,7 +3492,7 @@ def _build_parser() -> argparse.ArgumentParser:
3486
3492
 
3487
3493
 
3488
3494
  async def _async_main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
3489
- check_runtime_version()
3495
+ check_lite_runtime_version()
3490
3496
  configure_standard_logging()
3491
3497
 
3492
3498
  parser = _build_parser()