omdev 0.0.0.dev250__tar.gz → 0.0.0.dev251__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 (269) hide show
  1. {omdev-0.0.0.dev250/omdev.egg-info → omdev-0.0.0.dev251}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/.manifests.json +15 -12
  3. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/compilers/unixccompiler.py +1 -1
  4. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/compose.py +1 -2
  5. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/ci.py +2 -3
  6. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/pyproject.py +1 -1
  7. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/git/cli.py +63 -19
  8. omdev-0.0.0.dev250/omdev/pycharm/cli.py → omdev-0.0.0.dev251/omdev/tools/intellij.py +131 -13
  9. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251/omdev.egg-info}/PKG-INFO +2 -2
  10. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev.egg-info/SOURCES.txt +1 -3
  11. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev.egg-info/requires.txt +1 -1
  12. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/pyproject.toml +2 -2
  13. omdev-0.0.0.dev250/omdev/pycharm/__main__.py +0 -11
  14. omdev-0.0.0.dev250/omdev/tools/pawk/__init__.py +0 -0
  15. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/LICENSE +0 -0
  16. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/MANIFEST.in +0 -0
  17. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/README.rst +0 -0
  18. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/__about__.py +0 -0
  19. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/__init__.py +0 -0
  20. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/__init__.py +0 -0
  21. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/__main__.py +0 -0
  22. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/gen.py +0 -0
  23. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/imports.py +0 -0
  24. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/main.py +0 -0
  25. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/manifests.py +0 -0
  26. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/resources.py +0 -0
  27. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/srcfiles.py +0 -0
  28. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/strip.py +0 -0
  29. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/types.py +0 -0
  30. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/amalg/typing.py +0 -0
  31. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/antlr/__init__.py +0 -0
  32. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/antlr/consts.py +0 -0
  33. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/antlr/gen.py +0 -0
  34. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/bracepy.py +0 -0
  35. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/__init__.py +0 -0
  36. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/__init__.py +0 -0
  37. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/cache.py +0 -0
  38. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/contexts.py +0 -0
  39. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/currents.py +0 -0
  40. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/fns.py +0 -0
  41. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/resolvers.py +0 -0
  42. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/storage.py +0 -0
  43. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/compute/types.py +0 -0
  44. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/__init__.py +0 -0
  45. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/actions.py +0 -0
  46. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/cache.py +0 -0
  47. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/consts.py +0 -0
  48. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/defaults.py +0 -0
  49. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/manifests.py +0 -0
  50. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cache/data/specs.py +0 -0
  51. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cc/__init__.py +0 -0
  52. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cc/__main__.py +0 -0
  53. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cc/cdeps.py +0 -0
  54. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cc/cdeps.toml +0 -0
  55. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cc/cli.py +0 -0
  56. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/__init__.py +0 -0
  57. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_boilerplate.cc +0 -0
  58. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/LICENSE +0 -0
  59. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/__init__.py +0 -0
  60. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/build_ext.py +0 -0
  61. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  62. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  63. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/compilers/options.py +0 -0
  64. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/dir_util.py +0 -0
  65. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/errors.py +0 -0
  66. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/extension.py +0 -0
  67. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/file_util.py +0 -0
  68. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/modified.py +0 -0
  69. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/spawn.py +0 -0
  70. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/sysconfig.py +0 -0
  71. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/util.py +0 -0
  72. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/_distutils/version.py +0 -0
  73. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/build.py +0 -0
  74. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/cmake.py +0 -0
  75. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/importhook.py +0 -0
  76. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/magic.py +0 -0
  77. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cexts/scan.py +0 -0
  78. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/__init__.py +0 -0
  79. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/__main__.py +0 -0
  80. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/cache.py +0 -0
  81. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/ci.py +0 -0
  82. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/cli.py +0 -0
  83. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/consts.py +0 -0
  84. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/__init__.py +0 -0
  85. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/buildcaching.py +0 -0
  86. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/cache.py +0 -0
  87. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  88. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/cacheserved/cache.py +0 -0
  89. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  90. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/cmds.py +0 -0
  91. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/dataserver.py +0 -0
  92. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/imagepulling.py +0 -0
  93. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/inject.py +0 -0
  94. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/packing.py +0 -0
  95. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/repositories.py +0 -0
  96. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/docker/utils.py +0 -0
  97. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/__init__.py +0 -0
  98. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/api.py +0 -0
  99. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/bootstrap.py +0 -0
  100. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/cache.py +0 -0
  101. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/cli.py +0 -0
  102. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/client.py +0 -0
  103. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/env.py +0 -0
  104. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/github/inject.py +0 -0
  105. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/inject.py +0 -0
  106. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/requirements.py +0 -0
  107. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/shell.py +0 -0
  108. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ci/utils.py +0 -0
  109. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/classdot.py +0 -0
  110. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/__init__.py +0 -0
  111. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/__main__.py +0 -0
  112. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/_pathhack.py +0 -0
  113. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/clicli.py +0 -0
  114. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/install.py +0 -0
  115. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/main.py +0 -0
  116. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/managers.py +0 -0
  117. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cli/types.py +0 -0
  118. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/clipboard/__init__.py +0 -0
  119. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/clipboard/clipboard.py +0 -0
  120. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/clipboard/darwin_cf.py +0 -0
  121. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/clipboard/linux_x11.py +0 -0
  122. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/cmake.py +0 -0
  123. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/__init__.py +0 -0
  124. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/handlers.py +0 -0
  125. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/http.py +0 -0
  126. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/routes.py +0 -0
  127. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/server.py +0 -0
  128. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/dataserver/targets.py +0 -0
  129. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/findimports.py +0 -0
  130. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/git/__init__.py +0 -0
  131. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/git/magic.py +0 -0
  132. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/git/revisions.py +0 -0
  133. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/git/shallow.py +0 -0
  134. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/git/status.py +0 -0
  135. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/home/__init__.py +0 -0
  136. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/home/paths.py +0 -0
  137. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/home/secrets.py +0 -0
  138. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/home/shadow.py +0 -0
  139. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/imgur.py +0 -0
  140. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/__init__.py +0 -0
  141. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/__main__.py +0 -0
  142. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/cli.py +0 -0
  143. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/default.py +0 -0
  144. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/inject.py +0 -0
  145. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/inspect.py +0 -0
  146. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/__init__.py +0 -0
  147. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/base.py +0 -0
  148. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/inject.py +0 -0
  149. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/running.py +0 -0
  150. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/standalone.py +0 -0
  151. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/providers/system.py +0 -0
  152. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/pyenv/__init__.py +0 -0
  153. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/pyenv/inject.py +0 -0
  154. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/pyenv/install.py +0 -0
  155. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/pyenv/provider.py +0 -0
  156. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/pyenv/pyenv.py +0 -0
  157. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/resolvers.py +0 -0
  158. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/types.py +0 -0
  159. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/uv/__init__.py +0 -0
  160. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/uv/inject.py +0 -0
  161. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/uv/provider.py +0 -0
  162. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/uv/uv.py +0 -0
  163. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/interp/venvs.py +0 -0
  164. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/__init__.py +0 -0
  165. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/__main__.py +0 -0
  166. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/cli.py +0 -0
  167. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/find.py +0 -0
  168. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/magic.py +0 -0
  169. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/prepare.py +0 -0
  170. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/magic/styles.py +0 -0
  171. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/manifests/__init__.py +0 -0
  172. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/manifests/__main__.py +0 -0
  173. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/manifests/build.py +0 -0
  174. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/manifests/dumping.py +0 -0
  175. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/manifests/main.py +0 -0
  176. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/mypy/__init__.py +0 -0
  177. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/mypy/debug.py +0 -0
  178. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/__init__.py +0 -0
  179. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/building.py +0 -0
  180. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/compression.py +0 -0
  181. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/data.py +0 -0
  182. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/datarefs.py +0 -0
  183. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/dataserver.py +0 -0
  184. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/loading.py +0 -0
  185. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/media.py +0 -0
  186. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/pack/__init__.py +0 -0
  187. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/pack/packing.py +0 -0
  188. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/pack/repositories.py +0 -0
  189. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/pack/unpacking.py +0 -0
  190. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/repositories.py +0 -0
  191. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/oci/tars.py +0 -0
  192. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/__init__.py +0 -0
  193. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/marshal.py +0 -0
  194. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/names.py +0 -0
  195. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/requires.py +0 -0
  196. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/revisions.py +0 -0
  197. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/specifiers.py +0 -0
  198. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/versions.py +0 -0
  199. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/packaging/wheelfile.py +0 -0
  200. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pip.py +0 -0
  201. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/__init__.py +0 -0
  202. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/__main__.py +0 -0
  203. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/base.py +0 -0
  204. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/git.py +0 -0
  205. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/lite.py +0 -0
  206. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/main.py +0 -0
  207. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/manifests.py +0 -0
  208. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/precheck/scripts.py +0 -0
  209. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ptk/__init__.py +0 -0
  210. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ptk/apps/__init__.py +0 -0
  211. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/ptk/apps/ncdu.py +0 -0
  212. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/__init__.py +0 -0
  213. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/__main__.py +0 -0
  214. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/cexts.py +0 -0
  215. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/cli.py +0 -0
  216. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/configs.py +0 -0
  217. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/inject.py +0 -0
  218. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/pkg.py +0 -0
  219. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/reqs.py +0 -0
  220. {omdev-0.0.0.dev250/omdev/pycharm → omdev-0.0.0.dev251/omdev/pyproject/resources}/__init__.py +0 -0
  221. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/resources/docker-dev.sh +0 -0
  222. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/resources/python.sh +0 -0
  223. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/pyproject/venvs.py +0 -0
  224. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/__init__.py +0 -0
  225. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/bumpversion.py +0 -0
  226. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/execrss.py +0 -0
  227. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/exectime.py +0 -0
  228. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/importtrace.py +0 -0
  229. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/interp.py +0 -0
  230. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/slowcat.py +0 -0
  231. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/scripts/tmpexec.py +0 -0
  232. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tagstrings.py +0 -0
  233. {omdev-0.0.0.dev250/omdev/pyproject/resources → omdev-0.0.0.dev251/omdev/tokens}/__init__.py +0 -0
  234. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tokens/all.py +0 -0
  235. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tokens/tokenizert.py +0 -0
  236. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tokens/utils.py +0 -0
  237. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/__init__.py +0 -0
  238. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/cloc.py +0 -0
  239. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/doc.py +0 -0
  240. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/docker.py +0 -0
  241. {omdev-0.0.0.dev250/omdev/tokens → omdev-0.0.0.dev251/omdev/tools/git}/__init__.py +0 -0
  242. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/git/__main__.py +0 -0
  243. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/git/consts.py +0 -0
  244. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/git/messages.py +0 -0
  245. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/importscan.py +0 -0
  246. {omdev-0.0.0.dev250/omdev/tools/git → omdev-0.0.0.dev251/omdev/tools/json}/__init__.py +0 -0
  247. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/__main__.py +0 -0
  248. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/cli.py +0 -0
  249. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/formats.py +0 -0
  250. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/io.py +0 -0
  251. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/parsing.py +0 -0
  252. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/processing.py +0 -0
  253. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/json/rendering.py +0 -0
  254. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/linehisto.py +0 -0
  255. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/mkenv.py +0 -0
  256. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/mkrelimp.py +0 -0
  257. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/notebook.py +0 -0
  258. {omdev-0.0.0.dev250/omdev/tools/json → omdev-0.0.0.dev251/omdev/tools/pawk}/__init__.py +0 -0
  259. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/pawk/__main__.py +0 -0
  260. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/pawk/pawk.py +0 -0
  261. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/pip.py +0 -0
  262. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/prof.py +0 -0
  263. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/qr.py +0 -0
  264. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/shadow.py +0 -0
  265. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev/tools/sqlrepl.py +0 -0
  266. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev.egg-info/dependency_links.txt +0 -0
  267. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev.egg-info/entry_points.txt +0 -0
  268. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/omdev.egg-info/top_level.txt +0 -0
  269. {omdev-0.0.0.dev250 → omdev-0.0.0.dev251}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev250
3
+ Version: 0.0.0.dev251
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.dev250
15
+ Requires-Dist: omlish==0.0.0.dev251
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -155,18 +155,6 @@
155
155
  }
156
156
  }
157
157
  },
158
- {
159
- "module": ".pycharm.__main__",
160
- "attr": "_CLI_MODULE",
161
- "file": "omdev/pycharm/__main__.py",
162
- "line": 4,
163
- "value": {
164
- "$.cli.types.CliModule": {
165
- "cmd_name": "pycharm",
166
- "mod_name": "omdev.pycharm.__main__"
167
- }
168
- }
169
- },
170
158
  {
171
159
  "module": ".pyproject.__main__",
172
160
  "attr": "_CLI_MODULE",
@@ -315,6 +303,21 @@
315
303
  }
316
304
  }
317
305
  },
306
+ {
307
+ "module": ".tools.intellij",
308
+ "attr": "_CLI_MODULE",
309
+ "file": "omdev/tools/intellij.py",
310
+ "line": 248,
311
+ "value": {
312
+ "$.cli.types.CliModule": {
313
+ "cmd_name": [
314
+ "intellij",
315
+ "ij"
316
+ ],
317
+ "mod_name": "omdev.tools.intellij"
318
+ }
319
+ }
320
+ },
318
321
  {
319
322
  "module": ".tools.json.__main__",
320
323
  "attr": "_CLI_MODULE",
@@ -372,7 +372,7 @@ class UnixCCompiler(CCompiler):
372
372
  """
373
373
  lib_names = (
374
374
  self.library_filename(lib, lib_type=ty)
375
- for ty in 'dylib xcode_stub shared static'.split()
375
+ for ty in ['dylib', 'xcode_stub', 'shared', 'static']
376
376
  )
377
377
 
378
378
  roots = map(self._library_root, dirs)
@@ -99,8 +99,7 @@ class DockerComposeRun(AsyncExitStacked):
99
99
  out_service['image'] = self._cfg.image
100
100
 
101
101
  for k in ['build', 'platform']:
102
- if k in out_service:
103
- del out_service[k]
102
+ out_service.pop(k, None)
104
103
 
105
104
  #
106
105
 
@@ -4653,7 +4653,7 @@ _DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
4653
4653
 
4654
4654
  _OBJ_MARSHALER_GENERIC_MAPPING_TYPES: ta.Dict[ta.Any, type] = {
4655
4655
  **{t: t for t in (dict,)},
4656
- **{t: dict for t in (collections.abc.Mapping, collections.abc.MutableMapping)},
4656
+ **{t: dict for t in (collections.abc.Mapping, collections.abc.MutableMapping)}, # noqa
4657
4657
  }
4658
4658
 
4659
4659
  _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
@@ -10945,8 +10945,7 @@ class DockerComposeRun(AsyncExitStacked):
10945
10945
  out_service['image'] = self._cfg.image
10946
10946
 
10947
10947
  for k in ['build', 'platform']:
10948
- if k in out_service:
10949
- del out_service[k]
10948
+ out_service.pop(k, None)
10950
10949
 
10951
10950
  #
10952
10951
 
@@ -5487,7 +5487,7 @@ _DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
5487
5487
 
5488
5488
  _OBJ_MARSHALER_GENERIC_MAPPING_TYPES: ta.Dict[ta.Any, type] = {
5489
5489
  **{t: t for t in (dict,)},
5490
- **{t: dict for t in (collections.abc.Mapping, collections.abc.MutableMapping)},
5490
+ **{t: dict for t in (collections.abc.Mapping, collections.abc.MutableMapping)}, # noqa
5491
5491
  }
5492
5492
 
5493
5493
  _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES: ta.Dict[ta.Any, type] = {
@@ -1,27 +1,26 @@
1
1
  # ruff: noqa: UP006 UP007
2
2
  """
3
3
  TODO:
4
- - https://github.com/vegardit/bash-funk/blob/main/docs/git.md
5
- - git submodule foreach 'git remote show origin | grep "HEAD branch" | cut -f5 -d" " | xargs git checkout && git pull'
6
- - Handle:
7
- Your branch and 'origin/main' have diverged,
8
- and have 2691 and 2708 different commits each, respectively.
9
- (use "git pull" if you want to integrate the remote branch with yours)
10
- hint: You have divergent branches and need to specify how to reconcile them.
11
- hint: You can do so by running one of the following commands sometime before
12
- hint: your next pull:
13
- hint:
14
- hint: git config pull.rebase false # merge
15
- hint: git config pull.rebase true # rebase
16
- hint: git config pull.ff only # fast-forward only
17
- hint:
18
- hint: You can replace "git config" with "git config --global" to set a default
19
- hint: preference for all repositories. You can also pass --rebase, --no-rebase,
20
- hint: or --ff-only on the command line to override the configured default per
21
- hint: invocation.
22
- fatal: Need to specify how to reconcile divergent branches.
4
+ - Handle:
5
+ Your branch and 'origin/main' have diverged,
6
+ and have 2691 and 2708 different commits each, respectively.
7
+ (use "git pull" if you want to integrate the remote branch with yours)
8
+ hint: You have divergent branches and need to specify how to reconcile them.
9
+ hint: You can do so by running one of the following commands sometime before
10
+ hint: your next pull:
11
+ hint:
12
+ hint: git config pull.rebase false # merge
13
+ hint: git config pull.rebase true # rebase
14
+ hint: git config pull.ff only # fast-forward only
15
+ hint:
16
+ hint: You can replace "git config" with "git config --global" to set a default
17
+ hint: preference for all repositories. You can also pass --rebase, --no-rebase,
18
+ hint: or --ff-only on the command line to override the configured default per
19
+ hint: invocation.
20
+ fatal: Need to specify how to reconcile divergent branches.
23
21
  """
24
22
  import dataclasses as dc
23
+ import logging
25
24
  import os
26
25
  import re
27
26
  import typing as ta
@@ -54,6 +53,9 @@ else:
54
53
  msh = lang.proxy_import('omlish.marshal')
55
54
 
56
55
 
56
+ log = logging.getLogger(__name__)
57
+
58
+
57
59
  ##
58
60
 
59
61
 
@@ -370,6 +372,48 @@ class Cli(ap.Cli):
370
372
  for d in self.args.dir:
371
373
  run(d)
372
374
 
375
+ @ap.cmd(
376
+ ap.arg('dir', nargs='*'),
377
+ aliases=['usb'],
378
+ )
379
+ def update_submodule_branches(self) -> None:
380
+ def run_submodule(submodule: str, cwd: str | None) -> None:
381
+ submodule_path = submodule if cwd is None else os.path.join(cwd, submodule)
382
+
383
+ # Get the HEAD branch from origin
384
+ remote_show = subprocesses.check_output(
385
+ 'git', 'remote', 'show', 'origin',
386
+ cwd=submodule_path,
387
+ ).decode()
388
+ head_branch: str | None = None
389
+ for line in remote_show.splitlines():
390
+ line = line.strip()
391
+ if line.startswith('HEAD branch:'):
392
+ head_branch = line.split(':')[1].strip()
393
+ break
394
+
395
+ if not head_branch:
396
+ log.warning('Could not determine HEAD branch for submodule %s', submodule)
397
+ return
398
+
399
+ subprocesses.check_call('git', 'checkout', head_branch, cwd=submodule_path)
400
+ subprocesses.check_call('git', 'pull', cwd=submodule_path)
401
+
402
+ def run(cwd: str | None) -> None:
403
+ submodules = subprocesses.check_output(
404
+ 'git', 'submodule', 'foreach', '-q', 'echo $name',
405
+ cwd=cwd,
406
+ ).decode().strip().splitlines()
407
+
408
+ for submodule in submodules:
409
+ run_submodule(submodule, cwd)
410
+
411
+ if not self.args.dir:
412
+ run(None)
413
+ else:
414
+ for d in self.args.dir:
415
+ run(d)
416
+
373
417
  #
374
418
 
375
419
  @ap.cmd()
@@ -1,25 +1,114 @@
1
1
  """
2
2
  TODO:
3
+ - read .idea/ for inference?
3
4
  - PyCharm.app/Contents/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_constants.py -> USE_LOW_IMPACT_MONITORING
4
5
  - DISPLAY=":1" - ls /tmp/.X11-unix/X1 ?
5
6
  - https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine
6
7
  - w -oush
7
8
  """
8
9
  import dataclasses as dc
10
+ import enum
9
11
  import inspect
10
12
  import os.path
11
13
  import shlex
12
14
  import subprocess
13
15
  import sys
14
16
  import tempfile
17
+ import typing as ta
15
18
 
16
19
  from omlish.argparse import all as ap
17
20
  from omlish.diag.pycharm import get_pycharm_version
18
21
 
22
+ from ..cli import CliModule
23
+
24
+
25
+ ##
26
+
27
+
28
+ class Ide(enum.Enum):
29
+ PYCHARM = enum.auto()
30
+ IDEA = enum.auto()
31
+ CLION = enum.auto()
32
+ WEBSTORM = enum.auto()
33
+ GOLAND = enum.auto()
34
+
19
35
 
20
36
  ##
21
37
 
22
38
 
39
+ _INFER_FILE_NAME_SETS_BY_IDE: ta.Mapping[Ide, ta.AbstractSet[str]] = {
40
+ Ide.PYCHARM: frozenset([
41
+ 'setup.py',
42
+ 'setup.cfg',
43
+ 'pyproject.toml',
44
+ 'requirements.txt',
45
+ 'Pipfile',
46
+ 'poetry.lock',
47
+ '.python-version',
48
+ 'wsgi.py',
49
+ 'asgi.py',
50
+ 'manage.py',
51
+ ]),
52
+ Ide.IDEA: frozenset([
53
+ 'pom.xml',
54
+ 'mvnw',
55
+ 'build.gradle',
56
+ 'build.gradle.kts',
57
+ 'gradlew',
58
+ 'module-info.java',
59
+ '.java-version',
60
+ ]),
61
+ Ide.CLION: frozenset([
62
+ 'CMakeLists.txt',
63
+ 'configure.ac',
64
+ 'configure.in',
65
+ 'config.h.in',
66
+ 'vcpkg.json',
67
+ ]),
68
+ Ide.WEBSTORM: frozenset([
69
+ 'package.json',
70
+ 'package-lock.json',
71
+ ]),
72
+ Ide.GOLAND: frozenset([
73
+ 'go.mod',
74
+ 'go.sum',
75
+ ]),
76
+ }
77
+
78
+
79
+ def _infer_directory_ide(cwd: str | None) -> Ide | None:
80
+ if cwd is None:
81
+ cwd = os.getcwd()
82
+
83
+ for i, fs in _INFER_FILE_NAME_SETS_BY_IDE.items():
84
+ for f in fs:
85
+ if os.path.exists(os.path.join(cwd, f)):
86
+ return i
87
+
88
+ return None
89
+
90
+
91
+ ##
92
+
93
+
94
+ def _get_ide_version(ide: Ide) -> str:
95
+ if ide is Ide.PYCHARM:
96
+ return get_pycharm_version()
97
+ else:
98
+ raise ValueError(ide)
99
+
100
+
101
+ ##
102
+
103
+
104
+ _DARWIN_OPEN_SCRIPT_APP_BY_IDE: ta.Mapping[Ide, str] = {
105
+ Ide.PYCHARM: 'PyCharm',
106
+ Ide.CLION: 'CLion',
107
+ Ide.IDEA: 'IntelliJ IDEA',
108
+ Ide.WEBSTORM: 'WebStorm',
109
+ Ide.GOLAND: 'GoLand',
110
+ }
111
+
23
112
  _DARWIN_OPEN_SCRIPT = """
24
113
  tell application "{app}"
25
114
  activate
@@ -32,8 +121,13 @@ return
32
121
  ##
33
122
 
34
123
 
35
- _LINUX_PYCHARM_WM_CLASS = 'jetbrains-pycharm.jetbrains-pycharm'
36
- _LINUX_CLION_WM_CLASS = 'jetbrains-clion.jetbrains-pycharm'
124
+ _LINUX_WM_CLASS_BY_IDE: ta.Mapping[Ide, str] = {
125
+ Ide.PYCHARM: 'jetbrains-pycharm.jetbrains-pycharm',
126
+ Ide.CLION: 'jetbrains-clion.jetbrains-clion',
127
+ Ide.IDEA: 'jetbrains-idea.jetbrains-idea',
128
+ Ide.WEBSTORM: 'jetbrains-webstorm.jetbrains-webstorm',
129
+ Ide.GOLAND: 'jetbrains-goland.jetbrains-goland',
130
+ }
37
131
 
38
132
 
39
133
  # sudo apt install xdotool wmctrl
@@ -63,16 +157,12 @@ def parse_wmctrl_lxp_line(l: str) -> WmctrlLine:
63
157
  ##
64
158
 
65
159
 
66
- class Cli(ap.Cli):
67
- @ap.cmd()
68
- def version(self) -> None:
69
- print(get_pycharm_version())
70
-
160
+ class IntellijCli(ap.Cli):
71
161
  @ap.cmd(
72
162
  ap.arg('python-exe'),
73
163
  ap.arg('args', nargs=ap.REMAINDER),
74
164
  )
75
- def runhack(self) -> int:
165
+ def pycharm_runhack(self) -> int:
76
166
  if not os.path.isfile(exe := self.args.python_exe):
77
167
  raise FileNotFoundError(exe)
78
168
 
@@ -86,23 +176,47 @@ class Cli(ap.Cli):
86
176
  proc = subprocess.run([exe, src_file, *self.args.args], check=False)
87
177
  return proc.returncode
88
178
 
179
+ #
180
+
181
+ def _get_ide(
182
+ self,
183
+ *,
184
+ cwd: str | None = None,
185
+ ) -> Ide: # noqa
186
+ if (ai := self.args.ide) is not None:
187
+ return Ide(ai)
188
+
189
+ if (ii := _infer_directory_ide(cwd)) is not None:
190
+ return ii
191
+
192
+ return Ide.PYCHARM
193
+
194
+ @ap.cmd(
195
+ ap.arg('-e', '--ide'),
196
+ )
197
+ def version(self) -> None:
198
+ i = self._get_ide()
199
+ v = _get_ide_version(i)
200
+ print(v)
201
+
89
202
  @ap.cmd(
90
203
  ap.arg('dir', nargs='?'),
91
- ap.arg('-c', '--clion', action='store_true'),
204
+ ap.arg('-e', '--ide'),
92
205
  )
93
206
  def open(self) -> None:
94
207
  dir = os.path.abspath(self.args.dir or '.') # noqa
208
+ ide = self._get_ide(cwd=dir)
95
209
 
96
210
  if (plat := sys.platform) == 'darwin':
97
211
  if '"' in dir:
98
212
  raise ValueError(dir)
99
213
 
100
214
  scpt_src = _DARWIN_OPEN_SCRIPT.format(
101
- app='CLion' if self.args.clion else 'PyCharm',
215
+ app=_DARWIN_OPEN_SCRIPT_APP_BY_IDE[ide],
102
216
  dir=dir,
103
217
  )
104
218
 
105
- scpt_file = tempfile.mktemp(__package__ + '-pycharm-open') # noqa
219
+ scpt_file = tempfile.mktemp(__package__ + '-intellij-open') # noqa
106
220
  with open(scpt_file, 'w') as f:
107
221
  f.write(scpt_src)
108
222
 
@@ -114,7 +228,7 @@ class Cli(ap.Cli):
114
228
 
115
229
  wmc_out = subprocess.check_output(['wmctrl', '-lxp'], env=env).decode()
116
230
  wls = [parse_wmctrl_lxp_line(l) for l in wmc_out.splitlines()]
117
- tgt_wmc = _LINUX_CLION_WM_CLASS if self.args.clion else _LINUX_PYCHARM_WM_CLASS
231
+ tgt_wmc = _LINUX_WM_CLASS_BY_IDE[ide]
118
232
  tgt_wl = next(wl for wl in wls if wl.wm_class == tgt_wmc)
119
233
  subprocess.check_call(['wmctrl', '-ia', tgt_wl.window_id], env=env)
120
234
 
@@ -128,7 +242,11 @@ class Cli(ap.Cli):
128
242
 
129
243
 
130
244
  def _main() -> None:
131
- Cli()(exit=True)
245
+ IntellijCli()(exit=True)
246
+
247
+
248
+ # @omlish-manifest
249
+ _CLI_MODULE = CliModule(['intellij', 'ij'], __name__)
132
250
 
133
251
 
134
252
  if __name__ == '__main__':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev250
3
+ Version: 0.0.0.dev251
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.dev250
15
+ Requires-Dist: omlish==0.0.0.dev251
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -206,9 +206,6 @@ omdev/precheck/scripts.py
206
206
  omdev/ptk/__init__.py
207
207
  omdev/ptk/apps/__init__.py
208
208
  omdev/ptk/apps/ncdu.py
209
- omdev/pycharm/__init__.py
210
- omdev/pycharm/__main__.py
211
- omdev/pycharm/cli.py
212
209
  omdev/pyproject/__init__.py
213
210
  omdev/pyproject/__main__.py
214
211
  omdev/pyproject/cexts.py
@@ -240,6 +237,7 @@ omdev/tools/cloc.py
240
237
  omdev/tools/doc.py
241
238
  omdev/tools/docker.py
242
239
  omdev/tools/importscan.py
240
+ omdev/tools/intellij.py
243
241
  omdev/tools/linehisto.py
244
242
  omdev/tools/mkenv.py
245
243
  omdev/tools/mkrelimp.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev250
1
+ omlish==0.0.0.dev251
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.dev250'
15
+ version = '0.0.0.dev251'
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.dev250',
25
+ 'omlish == 0.0.0.dev251',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
@@ -1,11 +0,0 @@
1
- from ..cli import CliModule
2
-
3
-
4
- # @omlish-manifest
5
- _CLI_MODULE = CliModule('pycharm', __name__)
6
-
7
-
8
- if __name__ == '__main__':
9
- from .cli import _main
10
-
11
- _main()
File without changes
File without changes
File without changes
File without changes