omdev 0.0.0.dev384__tar.gz → 0.0.0.dev386__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.dev384/omdev.egg-info → omdev-0.0.0.dev386}/PKG-INFO +2 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/paths.py +4 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/secrets.py +3 -5
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/__init__.py +3 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/confirm.py +11 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/all.py +2 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/tokenizert.py +2 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/utils.py +16 -4
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/cli.py +63 -14
- omdev-0.0.0.dev386/omdev/tools/git/cloning.py +42 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386/omdev.egg-info}/PKG-INFO +2 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/SOURCES.txt +1 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/requires.txt +1 -1
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/pyproject.toml +2 -2
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/LICENSE +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/MANIFEST.in +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/README.md +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/.manifests.json +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/__about__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/gen.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/imports.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/main.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/manifests.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/resources.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/srcfiles.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/strip.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/types.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/typing.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/contexts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/currents.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/fns.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/resolvers.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/storage.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/types.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/actions.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/consts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/defaults.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/manifests.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/specs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/aps.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/ax.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/cf.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/cg.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/linux/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/linux/x11.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cdeps.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cdeps.toml +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/srclangs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_boilerplate.cc +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/LICENSE +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/build_ext.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/options.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/dir_util.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/errors.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/extension.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/file_util.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/modified.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/spawn.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/sysconfig.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/util.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/version.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/build.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/cmake.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/importhook.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/magic.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/scan.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/ci.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/compose.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/consts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/buildcaching.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/manifests.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cmds.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/dataserver.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/imagepulling.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/packing.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/repositories.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/utils.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/clients.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/api.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/client.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/api.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/azure.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/client.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/bootstrap.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/cache.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/env.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/requirements.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/shell.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/utils.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/_pathhack.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/clicli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/install.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/main.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/managers.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/types.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/clipboard.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/darwin_cf.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/linux_x11.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmake.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/_cmdlog.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/cmdlog.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/handlers.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/http.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/routes.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/server.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/targets.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/magic.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/revisions.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/shallow.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/status.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/shadow.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/imgur.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/ides.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/open.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/default.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/inspect.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/base.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/running.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/standalone.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/system.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/install.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/provider.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/pyenv.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/resolvers.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/types.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/provider.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/uv.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/venvs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/find.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/magic.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/prepare.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/styles.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/build.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/dumping.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/main.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/debug.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/report.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/building.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/compression.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/data.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/datarefs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/dataserver.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/loading.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/media.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/packing.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/repositories.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/unpacking.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/repositories.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/tars.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/marshal.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/names.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/requires.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/revisions.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/specifiers.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/versions.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/wheelfile.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pip.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/base.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/caches.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/git.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/imports.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/lite.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/main.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/manifests.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/scripts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/unicode.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/apps/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/apps/ncdu.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/LICENSE +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/border.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/markdown.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/parser.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/styles.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/tags.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/utils.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/attrdocs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/bracepy.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/classdot.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/LICENSE +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/attrdoc.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/common.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/epydoc.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/google.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/numpydoc.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/parser.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/rest.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/findimports.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/bumpversion.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/execstat.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/importtrace.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/srcheaders.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/importscan.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/mkrelimp.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/cexts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/configs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/inject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/pkg.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/reqs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/docker-dev.sh +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/python.sh +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/venvs.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/ci.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/interp.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/pyproject.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/slowcat.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/tmpexec.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tagstrings.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/consts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/gen.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/cloc.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/diff.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/doc.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/docker.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/consts.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/messages.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/formats.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/io.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/parsing.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/processing.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/rendering.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/cli.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/jsonview.css +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/jsonview.js +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/linehisto.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/mkenv.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/notebook.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/__init__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/__main__.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/pawk.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pip.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/prof.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/qr.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/shadow.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/shell.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/sqlrepl.py +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/dependency_links.txt +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/entry_points.txt +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/top_level.txt +0 -0
- {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev386
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License-Expression: BSD-3-Clause
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Requires-Python: >=3.13
|
15
15
|
Description-Content-Type: text/markdown
|
16
16
|
License-File: LICENSE
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
17
|
+
Requires-Dist: omlish==0.0.0.dev386
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -7,16 +7,18 @@ TODO:
|
|
7
7
|
import os.path
|
8
8
|
import typing as ta
|
9
9
|
|
10
|
+
from omlish.os.environ import EnvVar
|
11
|
+
|
10
12
|
|
11
13
|
##
|
12
14
|
|
13
15
|
|
14
|
-
HOME_DIR_ENV_VAR = 'OMLISH_HOME'
|
16
|
+
HOME_DIR_ENV_VAR = EnvVar('OMLISH_HOME')
|
15
17
|
DEFAULT_HOME_DIR = '~/.omlish'
|
16
18
|
|
17
19
|
|
18
20
|
def get_home_dir() -> str:
|
19
|
-
return os.path.expanduser(
|
21
|
+
return os.path.expanduser(HOME_DIR_ENV_VAR.get(DEFAULT_HOME_DIR))
|
20
22
|
|
21
23
|
|
22
24
|
#
|
@@ -2,6 +2,7 @@ import os.path
|
|
2
2
|
import typing as ta
|
3
3
|
|
4
4
|
from omlish import lang
|
5
|
+
from omlish.os.environ import EnvVar
|
5
6
|
from omlish.secrets import all as sec
|
6
7
|
|
7
8
|
from .paths import get_home_paths
|
@@ -16,16 +17,13 @@ else:
|
|
16
17
|
##
|
17
18
|
|
18
19
|
|
19
|
-
SECRETS_FILE_ENV_VAR = 'OMLISH_SECRETS'
|
20
|
+
SECRETS_FILE_ENV_VAR = EnvVar('OMLISH_SECRETS')
|
20
21
|
DEFAULT_SECRETS_FILE_NAME = 'secrets.yml'
|
21
22
|
|
22
23
|
|
23
24
|
def get_secrets_file() -> str:
|
24
25
|
return os.path.expanduser(
|
25
|
-
os.
|
26
|
-
SECRETS_FILE_ENV_VAR,
|
27
|
-
os.path.join(get_home_paths().config_dir, DEFAULT_SECRETS_FILE_NAME),
|
28
|
-
),
|
26
|
+
SECRETS_FILE_ENV_VAR.get(lambda: os.path.join(get_home_paths().config_dir, DEFAULT_SECRETS_FILE_NAME)),
|
29
27
|
)
|
30
28
|
|
31
29
|
|
@@ -97,4 +97,7 @@ from prompt_toolkit.widgets.toolbars import SearchToolbar
|
|
97
97
|
from prompt_toolkit.widgets.toolbars import SystemToolbar
|
98
98
|
from prompt_toolkit.widgets.toolbars import ValidationToolbar
|
99
99
|
|
100
|
+
#
|
101
|
+
from .confirm import a_strict_confirm
|
102
|
+
from .confirm import create_strict_confirm_session
|
100
103
|
from .confirm import strict_confirm
|
@@ -1,9 +1,11 @@
|
|
1
|
+
|
1
2
|
from prompt_toolkit.formatted_text import merge_formatted_text
|
2
3
|
from prompt_toolkit.key_binding import KeyBindings
|
3
4
|
from prompt_toolkit.key_binding import KeyPressEvent
|
4
5
|
from prompt_toolkit.shortcuts import PromptSession
|
5
6
|
|
6
7
|
from omlish import check
|
8
|
+
from omlish import lang
|
7
9
|
|
8
10
|
|
9
11
|
##
|
@@ -37,12 +39,15 @@ def create_strict_confirm_session(
|
|
37
39
|
return session
|
38
40
|
|
39
41
|
|
40
|
-
|
42
|
+
##
|
43
|
+
|
44
|
+
|
45
|
+
def _m_strict_confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') -> lang.MaysyncGen[bool]:
|
41
46
|
"""Display a confirmation prompt that returns True/False. Requires an explicit answer."""
|
42
47
|
|
43
48
|
while True:
|
44
49
|
session = create_strict_confirm_session(message, suffix)
|
45
|
-
ret = session.prompt()
|
50
|
+
ret = yield from lang.maysync_yield(session.prompt, session.prompt_async)()
|
46
51
|
|
47
52
|
if isinstance(ret, str):
|
48
53
|
check.empty(ret)
|
@@ -52,3 +57,7 @@ def strict_confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') -> bool:
|
|
52
57
|
|
53
58
|
else:
|
54
59
|
raise TypeError(ret)
|
60
|
+
|
61
|
+
|
62
|
+
strict_confirm = lang.maysync_wrap(_m_strict_confirm)
|
63
|
+
a_strict_confirm = lang.a_maysync_wrap(_m_strict_confirm)
|
@@ -14,7 +14,7 @@
|
|
14
14
|
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
15
|
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
16
16
|
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
17
|
-
# https://github.com/asottile/tokenize-rt/blob/
|
17
|
+
# https://github.com/asottile/tokenize-rt/blob/d3874b787677593fc34aedf7174a2934e2caa94b/tokenize_rt.py
|
18
18
|
import argparse
|
19
19
|
import io
|
20
20
|
import keyword
|
@@ -123,7 +123,7 @@ class Tokenization:
|
|
123
123
|
|
124
124
|
tok_name = tokenize.tok_name[tok_type]
|
125
125
|
|
126
|
-
if tok_name
|
126
|
+
if tok_name in {'FSTRING_MIDDLE', 'TSTRING_MIDDLE'}: # pragma: >=3.12 cover
|
127
127
|
if '{' in tok_text or '}' in tok_text:
|
128
128
|
new_tok_text = cls.curly_escape(tok_text)
|
129
129
|
ecol += len(new_tok_text) - len(tok_text)
|
@@ -5,6 +5,7 @@ from .tokenizert import Token
|
|
5
5
|
|
6
6
|
|
7
7
|
Tokens: ta.TypeAlias = ta.Sequence[Token]
|
8
|
+
TokensIterable: ta.TypeAlias = ta.Iterable[Token]
|
8
9
|
|
9
10
|
|
10
11
|
##
|
@@ -37,14 +38,25 @@ def ignore_ws(
|
|
37
38
|
)
|
38
39
|
|
39
40
|
|
41
|
+
def ignore_ws_(
|
42
|
+
toks: ta.Iterable[Token],
|
43
|
+
*,
|
44
|
+
keep: ta.Container[str] = (),
|
45
|
+
) -> list[Token]:
|
46
|
+
return list(ignore_ws(
|
47
|
+
toks,
|
48
|
+
keep=keep,
|
49
|
+
))
|
50
|
+
|
51
|
+
|
40
52
|
##
|
41
53
|
|
42
54
|
|
43
|
-
def split_lines(ts:
|
55
|
+
def split_lines(ts: TokensIterable) -> list[Tokens]:
|
44
56
|
return [list(it) for g, it in itertools.groupby(ts, lambda t: t.line)]
|
45
57
|
|
46
58
|
|
47
|
-
def split_lines_dense(ts:
|
59
|
+
def split_lines_dense(ts: TokensIterable) -> list[Tokens]:
|
48
60
|
lines: list[list[Token]] = []
|
49
61
|
for t in ts:
|
50
62
|
while len(lines) < (t.line or 0):
|
@@ -53,7 +65,7 @@ def split_lines_dense(ts: Tokens) -> list[Tokens]:
|
|
53
65
|
return lines # type: ignore[return-value]
|
54
66
|
|
55
67
|
|
56
|
-
def join_toks(ts:
|
68
|
+
def join_toks(ts: TokensIterable) -> str:
|
57
69
|
return ''.join(t.src for t in ts)
|
58
70
|
|
59
71
|
|
@@ -65,7 +77,7 @@ def join_lines(ls: ta.Iterable[Tokens]) -> str:
|
|
65
77
|
|
66
78
|
|
67
79
|
def match_toks(
|
68
|
-
ts:
|
80
|
+
ts: TokensIterable,
|
69
81
|
pat: ta.Sequence[tuple[str | None, str | tuple[str, ...] | None]],
|
70
82
|
) -> bool:
|
71
83
|
it = iter(ts)
|
@@ -23,7 +23,8 @@ TODO:
|
|
23
23
|
import dataclasses as dc
|
24
24
|
import logging
|
25
25
|
import os
|
26
|
-
import
|
26
|
+
import shutil
|
27
|
+
import tempfile
|
27
28
|
import typing as ta
|
28
29
|
import urllib.parse
|
29
30
|
|
@@ -42,6 +43,9 @@ from ...git.status import get_git_status
|
|
42
43
|
from ...home.paths import get_home_paths
|
43
44
|
from ...home.shadow import get_shadow_configs
|
44
45
|
from . import consts
|
46
|
+
from .cloning import GithubCloneTarget
|
47
|
+
from .cloning import OtherCloneTarget
|
48
|
+
from .cloning import parse_clone_target
|
45
49
|
from .messages import GitMessageGenerator
|
46
50
|
from .messages import TimestampGitMessageGenerator
|
47
51
|
from .messages import load_message_generator_manifests
|
@@ -153,8 +157,6 @@ class Cli(ap.Cli):
|
|
153
157
|
|
154
158
|
#
|
155
159
|
|
156
|
-
_GITHUB_PAT = re.compile(r'((http(s)?://)?(www\./)?github(\.com)?/)?(?P<user>[^/.]+)/(?P<repo>[^/.]+)(/.*)?')
|
157
|
-
|
158
160
|
@ap.cmd(
|
159
161
|
ap.arg('repo'),
|
160
162
|
ap.arg('args', nargs=ap.REMAINDER),
|
@@ -166,25 +168,23 @@ class Cli(ap.Cli):
|
|
166
168
|
# fails.
|
167
169
|
out_dir = '.'
|
168
170
|
try:
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
os.makedirs(user, 0o755, exist_ok=True)
|
171
|
+
ct = parse_clone_target(self.args.repo)
|
172
|
+
if isinstance(ct, GithubCloneTarget):
|
173
|
+
os.makedirs(ct.user, 0o755, exist_ok=True)
|
174
174
|
|
175
175
|
subprocesses.check_call(
|
176
176
|
'git',
|
177
177
|
'clone',
|
178
178
|
*self.unknown_args,
|
179
179
|
*self.args.args,
|
180
|
-
|
181
|
-
os.path.join(user, repo),
|
180
|
+
ct.render(),
|
181
|
+
os.path.join(ct.user, ct.repo),
|
182
182
|
)
|
183
183
|
|
184
|
-
out_dir = os.path.join(user, repo)
|
184
|
+
out_dir = os.path.join(ct.user, ct.repo)
|
185
185
|
|
186
|
-
|
187
|
-
parsed = urllib.parse.urlparse(
|
186
|
+
elif isinstance(ct, OtherCloneTarget):
|
187
|
+
parsed = urllib.parse.urlparse(ct.s)
|
188
188
|
out_dir = parsed.path.split('/')[-1]
|
189
189
|
|
190
190
|
subprocesses.check_call(
|
@@ -192,12 +192,17 @@ class Cli(ap.Cli):
|
|
192
192
|
'clone',
|
193
193
|
*self.unknown_args,
|
194
194
|
*self.args.args,
|
195
|
-
|
195
|
+
ct.render(),
|
196
196
|
)
|
197
197
|
|
198
|
+
else:
|
199
|
+
raise TypeError(ct)
|
200
|
+
|
198
201
|
finally:
|
199
202
|
print(out_dir)
|
200
203
|
|
204
|
+
#
|
205
|
+
|
201
206
|
@ap.cmd(
|
202
207
|
ap.arg('rev', nargs='?', default='HEAD'),
|
203
208
|
ap.arg('-d', '--diff', action='store_true'),
|
@@ -466,6 +471,50 @@ class Cli(ap.Cli):
|
|
466
471
|
*self.unknown_args,
|
467
472
|
)
|
468
473
|
|
474
|
+
#
|
475
|
+
|
476
|
+
@ap.cmd(
|
477
|
+
ap.arg('repo'),
|
478
|
+
ap.arg('args', nargs=ap.REMAINDER),
|
479
|
+
accepts_unknown=True,
|
480
|
+
)
|
481
|
+
def anon_clone(self) -> None:
|
482
|
+
cwd = os.getcwd()
|
483
|
+
|
484
|
+
# As with the clone command, we always print a cd-able path to stdout, even on failure.
|
485
|
+
out_dir = '.'
|
486
|
+
try:
|
487
|
+
tmp_dir = tempfile.mkdtemp()
|
488
|
+
try:
|
489
|
+
ct = parse_clone_target(self.args.repo)
|
490
|
+
|
491
|
+
subprocesses.check_call(
|
492
|
+
'git',
|
493
|
+
'clone',
|
494
|
+
*self.unknown_args,
|
495
|
+
*self.args.args,
|
496
|
+
ct.render(),
|
497
|
+
cwd=tmp_dir,
|
498
|
+
)
|
499
|
+
|
500
|
+
repo_dir_name = check.single(os.listdir(tmp_dir))
|
501
|
+
repo_dir = os.path.join(tmp_dir, repo_dir_name)
|
502
|
+
check.state(os.path.isdir(repo_dir))
|
503
|
+
|
504
|
+
git_dir = os.path.join(repo_dir, '.git')
|
505
|
+
check.state(os.path.isdir(git_dir))
|
506
|
+
shutil.rmtree(git_dir)
|
507
|
+
|
508
|
+
shutil.move(repo_dir, cwd)
|
509
|
+
|
510
|
+
out_dir = repo_dir_name
|
511
|
+
|
512
|
+
finally:
|
513
|
+
shutil.rmtree(tmp_dir)
|
514
|
+
|
515
|
+
finally:
|
516
|
+
print(out_dir)
|
517
|
+
|
469
518
|
|
470
519
|
##
|
471
520
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import abc
|
2
|
+
import dataclasses as dc
|
3
|
+
import re
|
4
|
+
|
5
|
+
from omlish import lang
|
6
|
+
|
7
|
+
|
8
|
+
##
|
9
|
+
|
10
|
+
|
11
|
+
@dc.dataclass(frozen=True)
|
12
|
+
class CloneTarget(lang.Abstract, lang.Sealed):
|
13
|
+
@abc.abstractmethod
|
14
|
+
def render(self) -> str:
|
15
|
+
raise NotImplementedError
|
16
|
+
|
17
|
+
|
18
|
+
@dc.dataclass(frozen=True)
|
19
|
+
class GithubCloneTarget(CloneTarget, lang.Final):
|
20
|
+
user: str
|
21
|
+
repo: str
|
22
|
+
|
23
|
+
def render(self) -> str:
|
24
|
+
return f'git@github.com:{self.user}/{self.repo}.git'
|
25
|
+
|
26
|
+
|
27
|
+
@dc.dataclass(frozen=True)
|
28
|
+
class OtherCloneTarget(CloneTarget, lang.Final):
|
29
|
+
s: str
|
30
|
+
|
31
|
+
def render(self) -> str:
|
32
|
+
return self.s
|
33
|
+
|
34
|
+
|
35
|
+
_GITHUB_PAT = re.compile(r'((http(s)?://)?(www\./)?github(\.com)?/)?(?P<user>[^/.]+)/(?P<repo>[^/.]+)(/.*)?')
|
36
|
+
|
37
|
+
|
38
|
+
def parse_clone_target(s: str) -> CloneTarget:
|
39
|
+
if (m := _GITHUB_PAT.fullmatch(s)):
|
40
|
+
return GithubCloneTarget(m.group('user'), m.group('repo'))
|
41
|
+
else:
|
42
|
+
return OtherCloneTarget(s)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev386
|
4
4
|
Summary: omdev
|
5
5
|
Author: wrmsr
|
6
6
|
License-Expression: BSD-3-Clause
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Requires-Python: >=3.13
|
15
15
|
Description-Content-Type: text/markdown
|
16
16
|
License-File: LICENSE
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
17
|
+
Requires-Dist: omlish==0.0.0.dev386
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
13
13
|
license = 'BSD-3-Clause'
|
14
14
|
readme = 'README.md'
|
15
15
|
requires-python = '>=3.13'
|
16
|
-
version = '0.0.0.
|
16
|
+
version = '0.0.0.dev386'
|
17
17
|
classifiers = [
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
19
19
|
'Intended Audience :: Developers',
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
24
24
|
]
|
25
25
|
description = 'omdev'
|
26
26
|
dependencies = [
|
27
|
-
'omlish == 0.0.0.
|
27
|
+
'omlish == 0.0.0.dev386',
|
28
28
|
]
|
29
29
|
|
30
30
|
[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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|