kpmx 2.0.1__tar.gz → 2.0.3__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.
- {kpmx-2.0.1/src/kpmx.egg-info → kpmx-2.0.3}/PKG-INFO +1 -1
- {kpmx-2.0.1 → kpmx-2.0.3}/pyproject.toml +1 -1
- {kpmx-2.0.1 → kpmx-2.0.3/src/kpmx.egg-info}/PKG-INFO +1 -1
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/makefile.py +1 -3
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/changelog_lint.py +43 -7
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/changelog_md.py +28 -14
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/editor.py +16 -3
- {kpmx-2.0.1 → kpmx-2.0.3}/LICENSE +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/README.md +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/setup.cfg +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/SOURCES.txt +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/dependency_links.txt +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/entry_points.txt +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/requires.txt +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/top_level.txt +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/__main__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/discovery.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/inspect.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/readme.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/workflow.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/close_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/drop_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/open_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/changelog/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/code_scanning/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/add.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/init.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/show.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/capabilities.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/context.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/base.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/conflicts.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/installer.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/inspector.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/matcher.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/models.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/normalizer.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/parser.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/result.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile_list.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/retry.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/runner.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/textparse.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/types.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/arch_pkgbuild.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/debian_control.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/rpm_spec.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/python.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/layers.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/pipeline.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/context.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/diff_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/git_remote.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/io.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/list_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/merge_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/printing.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/remote_provision.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/setup_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/types.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/url_utils.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/visibility_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/proxy.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/git_tags.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/pypi_url.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/types.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/workflow.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/debian.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/flake.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/pkgbuild.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/pyproject.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/rpm_changelog.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/rpm_spec.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/git_ops.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/package_name.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/prompts.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/retry.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/versioning.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/workflow.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/_parallel.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/clone.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/config_writer.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/git_bootstrap.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/mirrors.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/model.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/parser.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/planner.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/service.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/templates.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/deinstall.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/delete.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/list.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/pull.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/push.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/status.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/manager.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/os_release.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/system_updater.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/archive.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/changelog.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/code_scanning.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/config.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/make.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/mirror.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/publish.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/release.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/repos.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/tools.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/version.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/context.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/dispatch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/archive_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/branch_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/changelog_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/code_scanning_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/common.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/config_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/install_update.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/list_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/make_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/mirror_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/navigation_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/publish_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/release_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/version_cmd.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/proxy.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/paths.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/vscode.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/config/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/config/defaults.yaml +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/alias.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/ink.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/layer.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/resolve.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/run.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/load.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/save.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/env.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/gh.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/keyring.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/prompt.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/resolver.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/store_keys.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/types.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/validate.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_all.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_remote.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_remote_push_url.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/branch_move.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/checkout.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/clone.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/commit.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/create_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/delete_local_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/delete_remote_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/fetch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/init.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/merge_no_ff.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull_args.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull_ff_only.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push_args.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push_upstream.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/set_remote_url.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/tag_annotated.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/tag_force_annotated.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/errors.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_changelog.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_config_value.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_current_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_head_commit.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_latest_commit.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_latest_signing_key.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_remote_head_commit.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_remote_push_urls.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_repo_root.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_tags.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_tags_at_ref.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_upstream_ref.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/list_remotes.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/list_tags.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/probe_remote_reachable.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/resolve_base_branch.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/run.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/ensure.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/client.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/errors.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/base.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/gitea.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/github.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/registry.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/types.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/visibility.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/dir.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/identifier.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/ignored.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/paths.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/resolve.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/selected.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/verify.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/installed.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/semver.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/source.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/github/__init__.py +0 -0
- {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/github/check_hadolint_sarif.py +0 -0
|
@@ -31,9 +31,7 @@ class MakefileInstaller(BaseInstaller):
|
|
|
31
31
|
except OSError:
|
|
32
32
|
return False
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
return True
|
|
36
|
-
return bool(re.search(r"^install-[a-zA-Z0-9_-]*\s*:", content, flags=re.MULTILINE))
|
|
34
|
+
return bool(re.search(r"^install\s*:", content, flags=re.MULTILINE))
|
|
37
35
|
|
|
38
36
|
def run(self, ctx: RepoContext) -> None:
|
|
39
37
|
makefile_path = os.path.join(ctx.repo_dir, self.MAKEFILE_NAME)
|
|
@@ -6,11 +6,15 @@ import re
|
|
|
6
6
|
import shutil
|
|
7
7
|
import subprocess
|
|
8
8
|
import tempfile
|
|
9
|
+
from collections import Counter
|
|
9
10
|
|
|
10
|
-
_HEADING = re.compile(r"^\s
|
|
11
|
+
_HEADING = re.compile(r"^\s*(#{1,6})\s+(.*?)\s*#*\s*$")
|
|
11
12
|
_INLINE_CODE = re.compile(r"`([^`\n]+)`")
|
|
12
13
|
_FINDING = re.compile(r"\bMD\d{3}\b")
|
|
14
|
+
_LOCATION = re.compile(r"^.*?:\d+(?::\d+)?\s+")
|
|
15
|
+
_NON_DASH_ITEM = re.compile(r"^\s*[*+]\s")
|
|
13
16
|
_MULTI_BLANK = re.compile(r"\n{3,}")
|
|
17
|
+
_ENTRY_LEVEL = 3
|
|
14
18
|
|
|
15
19
|
|
|
16
20
|
class ChangelogLintError(RuntimeError):
|
|
@@ -20,10 +24,10 @@ class ChangelogLintError(RuntimeError):
|
|
|
20
24
|
def transform_changelog_message(text: str) -> str:
|
|
21
25
|
"""Normalise a free-form release message into the changelog house style.
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
stays free of backticks.
|
|
27
|
+
Headings are pushed below the ``## [version]`` line the entry is filed
|
|
28
|
+
under, so they nest instead of competing with it. Bolding them instead
|
|
29
|
+
would read as a heading to markdown-lint and fail MD036. Inline ``code``
|
|
30
|
+
spans become ``*italic*`` so the entry stays free of backticks.
|
|
27
31
|
"""
|
|
28
32
|
text = _INLINE_CODE.sub(r"*\1*", text)
|
|
29
33
|
|
|
@@ -31,9 +35,10 @@ def transform_changelog_message(text: str) -> str:
|
|
|
31
35
|
for line in text.split("\n"):
|
|
32
36
|
heading = _HEADING.match(line)
|
|
33
37
|
if heading:
|
|
38
|
+
level = max(len(heading.group(1)), _ENTRY_LEVEL)
|
|
34
39
|
if out and out[-1].strip():
|
|
35
40
|
out.append("")
|
|
36
|
-
out.append(f"
|
|
41
|
+
out.append(f"{'#' * level} {heading.group(2).strip()}")
|
|
37
42
|
out.append("")
|
|
38
43
|
else:
|
|
39
44
|
out.append(line)
|
|
@@ -57,6 +62,35 @@ def lint_changelog_entry(reference_path: str, entry: str) -> list[str]:
|
|
|
57
62
|
return _builtin_lint(document)
|
|
58
63
|
|
|
59
64
|
|
|
65
|
+
def lint_changelog_context(reference_path: str, existing: str, merged: str) -> list[str]:
|
|
66
|
+
"""Return the findings *merged* has beyond those *existing* already has.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
reference_path: path of the target CHANGELOG.md; its directory supplies
|
|
70
|
+
the markdownlint config.
|
|
71
|
+
existing: the target file before the entry is inserted.
|
|
72
|
+
merged: the target file with the entry inserted.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
Findings of *merged* that *existing* does not produce. Empty when
|
|
76
|
+
``markdownlint-cli2`` is unavailable.
|
|
77
|
+
"""
|
|
78
|
+
if not shutil.which("markdownlint-cli2"):
|
|
79
|
+
return []
|
|
80
|
+
known = Counter(
|
|
81
|
+
_LOCATION.sub("", finding)
|
|
82
|
+
for finding in (_markdownlint(reference_path, existing) if existing.strip() else [])
|
|
83
|
+
)
|
|
84
|
+
new: list[str] = []
|
|
85
|
+
for finding in _markdownlint(reference_path, merged):
|
|
86
|
+
key = _LOCATION.sub("", finding)
|
|
87
|
+
if known[key]:
|
|
88
|
+
known[key] -= 1
|
|
89
|
+
else:
|
|
90
|
+
new.append(finding)
|
|
91
|
+
return new
|
|
92
|
+
|
|
93
|
+
|
|
60
94
|
def _markdownlint(reference_path: str, document: str) -> list[str]:
|
|
61
95
|
directory = os.path.dirname(os.path.abspath(reference_path)) or "."
|
|
62
96
|
fd, tmp_path = tempfile.mkstemp(
|
|
@@ -67,7 +101,7 @@ def _markdownlint(reference_path: str, document: str) -> list[str]:
|
|
|
67
101
|
with os.fdopen(fd, "w", encoding="utf-8") as handle:
|
|
68
102
|
handle.write(document)
|
|
69
103
|
proc = subprocess.run(
|
|
70
|
-
["markdownlint-cli2", name],
|
|
104
|
+
["markdownlint-cli2", "--no-globs", name],
|
|
71
105
|
cwd=directory,
|
|
72
106
|
capture_output=True,
|
|
73
107
|
text=True,
|
|
@@ -94,6 +128,8 @@ def _builtin_lint(document: str) -> list[str]:
|
|
|
94
128
|
errors.append(f"line {number}: trailing whitespace (MD009)")
|
|
95
129
|
if "`" in line:
|
|
96
130
|
errors.append(f"line {number}: backtick is not allowed (use *italic*)")
|
|
131
|
+
if _NON_DASH_ITEM.match(line):
|
|
132
|
+
errors.append(f"line {number}: list items use '-' (MD004)")
|
|
97
133
|
if "\n\n\n" in document:
|
|
98
134
|
errors.append("multiple consecutive blank lines (MD012)")
|
|
99
135
|
return errors
|
|
@@ -7,6 +7,7 @@ from datetime import date
|
|
|
7
7
|
|
|
8
8
|
from .changelog_lint import (
|
|
9
9
|
ChangelogLintError,
|
|
10
|
+
lint_changelog_context,
|
|
10
11
|
lint_changelog_entry,
|
|
11
12
|
transform_changelog_message,
|
|
12
13
|
)
|
|
@@ -80,9 +81,28 @@ def update_changelog(
|
|
|
80
81
|
print(f" - {finding}")
|
|
81
82
|
print()
|
|
82
83
|
|
|
84
|
+
def _wait_for_reader() -> None:
|
|
85
|
+
try:
|
|
86
|
+
input("[INFO] Press Enter to re-open the editor and fix the entry...")
|
|
87
|
+
except EOFError:
|
|
88
|
+
print("[INFO] Re-opening the editor so you can fix the entry...")
|
|
89
|
+
|
|
90
|
+
changelog = ""
|
|
91
|
+
if os.path.exists(changelog_path):
|
|
92
|
+
try:
|
|
93
|
+
with open(changelog_path, encoding="utf-8") as f:
|
|
94
|
+
changelog = f.read()
|
|
95
|
+
except (OSError, UnicodeDecodeError) as exc:
|
|
96
|
+
print(f"[WARN] Could not read existing CHANGELOG.md: {exc}")
|
|
97
|
+
|
|
98
|
+
def _findings_for(entry: str) -> list[str]:
|
|
99
|
+
return lint_changelog_entry(changelog_path, entry) or lint_changelog_context(
|
|
100
|
+
changelog_path, changelog, _insert_after_h1(changelog, entry)
|
|
101
|
+
)
|
|
102
|
+
|
|
83
103
|
if message is not None:
|
|
84
104
|
body, entry = _entry_for(message)
|
|
85
|
-
findings =
|
|
105
|
+
findings = _findings_for(entry)
|
|
86
106
|
if findings:
|
|
87
107
|
_print_findings(findings)
|
|
88
108
|
raise ChangelogLintError(
|
|
@@ -92,27 +112,21 @@ def update_changelog(
|
|
|
92
112
|
body, entry = _entry_for(message or f"Release {new_version}")
|
|
93
113
|
else:
|
|
94
114
|
attempt: str | None = None
|
|
115
|
+
rejected: list[str] | None = None
|
|
95
116
|
while True:
|
|
96
117
|
print(
|
|
97
|
-
"\n[INFO] Provide the changelog entry
|
|
98
|
-
"
|
|
118
|
+
"\n[INFO] Provide the changelog entry - a leading '#' becomes "
|
|
119
|
+
"a sub-heading, `code` becomes italic.\n"
|
|
99
120
|
)
|
|
100
|
-
raw = _open_editor_for_changelog(attempt)
|
|
121
|
+
raw = _open_editor_for_changelog(attempt, rejected)
|
|
101
122
|
body, entry = _entry_for(raw or f"Release {new_version}")
|
|
102
|
-
findings =
|
|
123
|
+
findings = _findings_for(entry)
|
|
103
124
|
if not findings:
|
|
104
125
|
break
|
|
105
126
|
_print_findings(findings)
|
|
106
127
|
attempt = body
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
changelog = ""
|
|
110
|
-
if os.path.exists(changelog_path):
|
|
111
|
-
try:
|
|
112
|
-
with open(changelog_path, encoding="utf-8") as f:
|
|
113
|
-
changelog = f.read()
|
|
114
|
-
except (OSError, UnicodeDecodeError) as exc:
|
|
115
|
-
print(f"[WARN] Could not read existing CHANGELOG.md: {exc}")
|
|
128
|
+
rejected = findings
|
|
129
|
+
_wait_for_reader()
|
|
116
130
|
|
|
117
131
|
new_changelog = _insert_after_h1(changelog, entry)
|
|
118
132
|
|
|
@@ -6,7 +6,14 @@ import subprocess
|
|
|
6
6
|
import tempfile
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def _open_editor_for_changelog(
|
|
9
|
+
def _open_editor_for_changelog(
|
|
10
|
+
initial_message: str | None = None,
|
|
11
|
+
findings: list[str] | None = None,
|
|
12
|
+
) -> str:
|
|
13
|
+
"""Args:
|
|
14
|
+
initial_message: the previous attempt, pre-loaded for editing.
|
|
15
|
+
findings: why that attempt was rejected, shown above it.
|
|
16
|
+
"""
|
|
10
17
|
editor = os.environ.get("EDITOR", "nano")
|
|
11
18
|
|
|
12
19
|
with tempfile.NamedTemporaryFile(
|
|
@@ -18,9 +25,15 @@ def _open_editor_for_changelog(initial_message: str | None = None) -> str:
|
|
|
18
25
|
tmp.write(
|
|
19
26
|
"; Write the changelog entry for this release.\n"
|
|
20
27
|
"; Lines starting with ';' are ignored.\n"
|
|
21
|
-
"; A leading '#' becomes
|
|
22
|
-
"; Empty result will fall back to a generic message.\n
|
|
28
|
+
"; A leading '#' becomes a sub-heading; `code` becomes italic.\n"
|
|
29
|
+
"; Empty result will fall back to a generic message.\n"
|
|
23
30
|
)
|
|
31
|
+
if findings:
|
|
32
|
+
tmp.write(";\n; markdown-lint rejected the previous entry:\n")
|
|
33
|
+
for finding in findings:
|
|
34
|
+
for line in str(finding).splitlines() or [""]:
|
|
35
|
+
tmp.write(f"; {line}\n")
|
|
36
|
+
tmp.write("\n")
|
|
24
37
|
if initial_message:
|
|
25
38
|
tmp.write(initial_message.strip() + "\n")
|
|
26
39
|
tmp.flush()
|
|
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
|
{kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/arch_pkgbuild.py
RENAMED
|
File without changes
|
{kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/debian_control.py
RENAMED
|
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
|
|
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
|