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.
- {omdev-0.0.0.dev235/omdev.egg-info → omdev-0.0.0.dev236}/PKG-INFO +2 -2
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/.manifests.json +1 -1
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/ci.py +7 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/interp.py +7 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/pyproject.py +7 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/cli.py +80 -25
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/messages.py +20 -19
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/pyproject.toml +2 -2
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/LICENSE +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/README.rst +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/consts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/antlr/gen.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/bracepy.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cacheserved.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/api.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/client.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/classdot.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/findimports.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/paths.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/home/secrets.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pycharm/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/execrss.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/exectime.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/all.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/tokenizert.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tokens/utils.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/importscan.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/SOURCES.txt +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev235 → omdev-0.0.0.dev236}/omdev.egg-info/top_level.txt +0 -0
- {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.
|
|
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.
|
|
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":
|
|
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
|
|
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 =
|
|
44
|
+
commit_date = subprocesses.check_output(
|
|
33
45
|
'git', 'show', '-s', '--format=%ci', rev,
|
|
34
|
-
|
|
46
|
+
).decode().strip().split(' ')[0]
|
|
35
47
|
|
|
36
|
-
first_commit =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
214
|
-
|
|
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
|
-
|
|
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
|
-
|
|
222
|
-
subprocess.check_call(['git', 'commit', '-m', msg], cwd=cwd)
|
|
278
|
+
check_call('git', 'commit', '-m', msg)
|
|
223
279
|
|
|
224
|
-
|
|
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
|
-
|
|
240
|
-
|
|
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) ->
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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(
|
|
68
|
-
|
|
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.
|
|
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.
|
|
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"
|
|
@@ -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.
|
|
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.
|
|
25
|
+
'omlish == 0.0.0.dev236',
|
|
26
26
|
]
|
|
27
27
|
|
|
28
28
|
[project.optional-dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|