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.
Files changed (241) hide show
  1. {kpmx-2.0.1/src/kpmx.egg-info → kpmx-2.0.3}/PKG-INFO +1 -1
  2. {kpmx-2.0.1 → kpmx-2.0.3}/pyproject.toml +1 -1
  3. {kpmx-2.0.1 → kpmx-2.0.3/src/kpmx.egg-info}/PKG-INFO +1 -1
  4. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/makefile.py +1 -3
  5. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/changelog_lint.py +43 -7
  6. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/changelog_md.py +28 -14
  7. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/editor.py +16 -3
  8. {kpmx-2.0.1 → kpmx-2.0.3}/LICENSE +0 -0
  9. {kpmx-2.0.1 → kpmx-2.0.3}/README.md +0 -0
  10. {kpmx-2.0.1 → kpmx-2.0.3}/setup.cfg +0 -0
  11. {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/SOURCES.txt +0 -0
  12. {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/dependency_links.txt +0 -0
  13. {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/entry_points.txt +0 -0
  14. {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/requires.txt +0 -0
  15. {kpmx-2.0.1 → kpmx-2.0.3}/src/kpmx.egg-info/top_level.txt +0 -0
  16. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/__init__.py +0 -0
  17. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/__main__.py +0 -0
  18. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/__init__.py +0 -0
  19. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/__init__.py +0 -0
  20. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/discovery.py +0 -0
  21. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/inspect.py +0 -0
  22. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/readme.py +0 -0
  23. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/archive/workflow.py +0 -0
  24. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/__init__.py +0 -0
  25. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/close_branch.py +0 -0
  26. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/drop_branch.py +0 -0
  27. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/branch/open_branch.py +0 -0
  28. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/changelog/__init__.py +0 -0
  29. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/code_scanning/__init__.py +0 -0
  30. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/__init__.py +0 -0
  31. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/add.py +0 -0
  32. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/init.py +0 -0
  33. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/config/show.py +0 -0
  34. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/__init__.py +0 -0
  35. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/capabilities.py +0 -0
  36. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/context.py +0 -0
  37. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/__init__.py +0 -0
  38. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/base.py +0 -0
  39. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/__init__.py +0 -0
  40. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/conflicts.py +0 -0
  41. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/installer.py +0 -0
  42. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/__init__.py +0 -0
  43. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/inspector.py +0 -0
  44. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/matcher.py +0 -0
  45. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/models.py +0 -0
  46. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/normalizer.py +0 -0
  47. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/parser.py +0 -0
  48. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile/result.py +0 -0
  49. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/profile_list.py +0 -0
  50. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/retry.py +0 -0
  51. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/runner.py +0 -0
  52. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/textparse.py +0 -0
  53. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/nix/types.py +0 -0
  54. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/__init__.py +0 -0
  55. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/arch_pkgbuild.py +0 -0
  56. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/debian_control.py +0 -0
  57. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/os_packages/rpm_spec.py +0 -0
  58. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/installers/python.py +0 -0
  59. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/layers.py +0 -0
  60. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/install/pipeline.py +0 -0
  61. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/__init__.py +0 -0
  62. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/context.py +0 -0
  63. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/diff_cmd.py +0 -0
  64. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/git_remote.py +0 -0
  65. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/io.py +0 -0
  66. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/list_cmd.py +0 -0
  67. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/merge_cmd.py +0 -0
  68. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/printing.py +0 -0
  69. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/remote_provision.py +0 -0
  70. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/setup_cmd.py +0 -0
  71. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/types.py +0 -0
  72. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/url_utils.py +0 -0
  73. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/mirror/visibility_cmd.py +0 -0
  74. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/proxy.py +0 -0
  75. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/__init__.py +0 -0
  76. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/git_tags.py +0 -0
  77. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/pypi_url.py +0 -0
  78. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/types.py +0 -0
  79. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/publish/workflow.py +0 -0
  80. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/__init__.py +0 -0
  81. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/__init__.py +0 -0
  82. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/debian.py +0 -0
  83. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/flake.py +0 -0
  84. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/pkgbuild.py +0 -0
  85. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/pyproject.py +0 -0
  86. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/rpm_changelog.py +0 -0
  87. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/files/rpm_spec.py +0 -0
  88. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/git_ops.py +0 -0
  89. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/package_name.py +0 -0
  90. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/prompts.py +0 -0
  91. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/retry.py +0 -0
  92. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/versioning.py +0 -0
  93. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/release/workflow.py +0 -0
  94. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/__init__.py +0 -0
  95. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/_parallel.py +0 -0
  96. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/clone.py +0 -0
  97. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/__init__.py +0 -0
  98. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/config_writer.py +0 -0
  99. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/git_bootstrap.py +0 -0
  100. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/mirrors.py +0 -0
  101. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/model.py +0 -0
  102. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/parser.py +0 -0
  103. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/planner.py +0 -0
  104. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/service.py +0 -0
  105. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/create/templates.py +0 -0
  106. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/deinstall.py +0 -0
  107. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/delete.py +0 -0
  108. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/list.py +0 -0
  109. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/pull.py +0 -0
  110. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/push.py +0 -0
  111. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/repository/status.py +0 -0
  112. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/__init__.py +0 -0
  113. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/manager.py +0 -0
  114. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/os_release.py +0 -0
  115. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/actions/update/system_updater.py +0 -0
  116. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/__init__.py +0 -0
  117. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/__init__.py +0 -0
  118. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/archive.py +0 -0
  119. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/branch.py +0 -0
  120. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/changelog.py +0 -0
  121. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/code_scanning.py +0 -0
  122. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/config.py +0 -0
  123. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/make.py +0 -0
  124. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/mirror.py +0 -0
  125. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/publish.py +0 -0
  126. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/release.py +0 -0
  127. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/repos.py +0 -0
  128. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/tools.py +0 -0
  129. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/commands/version.py +0 -0
  130. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/context.py +0 -0
  131. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/dispatch.py +0 -0
  132. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/__init__.py +0 -0
  133. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/archive_cmd.py +0 -0
  134. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/branch_cmd.py +0 -0
  135. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/changelog_cmd.py +0 -0
  136. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/code_scanning_cmd.py +0 -0
  137. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/common.py +0 -0
  138. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/config_cmd.py +0 -0
  139. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/install_update.py +0 -0
  140. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/list_cmd.py +0 -0
  141. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/make_cmd.py +0 -0
  142. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/mirror_cmd.py +0 -0
  143. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/navigation_cmd.py +0 -0
  144. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/publish_cmd.py +0 -0
  145. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/release_cmd.py +0 -0
  146. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/parser/version_cmd.py +0 -0
  147. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/proxy.py +0 -0
  148. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/__init__.py +0 -0
  149. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/paths.py +0 -0
  150. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/cli/tools/vscode.py +0 -0
  151. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/config/__init__.py +0 -0
  152. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/config/defaults.yaml +0 -0
  153. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/__init__.py +0 -0
  154. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/alias.py +0 -0
  155. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/ink.py +0 -0
  156. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/layer.py +0 -0
  157. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/resolve.py +0 -0
  158. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/command/run.py +0 -0
  159. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/__init__.py +0 -0
  160. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/load.py +0 -0
  161. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/config/save.py +0 -0
  162. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/__init__.py +0 -0
  163. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/__init__.py +0 -0
  164. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/env.py +0 -0
  165. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/gh.py +0 -0
  166. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/keyring.py +0 -0
  167. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/providers/prompt.py +0 -0
  168. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/resolver.py +0 -0
  169. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/store_keys.py +0 -0
  170. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/types.py +0 -0
  171. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/credentials/validate.py +0 -0
  172. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/__init__.py +0 -0
  173. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/__init__.py +0 -0
  174. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add.py +0 -0
  175. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_all.py +0 -0
  176. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_remote.py +0 -0
  177. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/add_remote_push_url.py +0 -0
  178. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/branch_move.py +0 -0
  179. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/checkout.py +0 -0
  180. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/clone.py +0 -0
  181. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/commit.py +0 -0
  182. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/create_branch.py +0 -0
  183. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/delete_local_branch.py +0 -0
  184. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/delete_remote_branch.py +0 -0
  185. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/fetch.py +0 -0
  186. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/init.py +0 -0
  187. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/merge_no_ff.py +0 -0
  188. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull.py +0 -0
  189. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull_args.py +0 -0
  190. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/pull_ff_only.py +0 -0
  191. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push.py +0 -0
  192. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push_args.py +0 -0
  193. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/push_upstream.py +0 -0
  194. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/set_remote_url.py +0 -0
  195. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/tag_annotated.py +0 -0
  196. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/commands/tag_force_annotated.py +0 -0
  197. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/errors.py +0 -0
  198. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/__init__.py +0 -0
  199. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_changelog.py +0 -0
  200. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_config_value.py +0 -0
  201. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_current_branch.py +0 -0
  202. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_head_commit.py +0 -0
  203. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_latest_commit.py +0 -0
  204. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_latest_signing_key.py +0 -0
  205. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_remote_head_commit.py +0 -0
  206. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_remote_push_urls.py +0 -0
  207. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_repo_root.py +0 -0
  208. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_tags.py +0 -0
  209. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_tags_at_ref.py +0 -0
  210. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/get_upstream_ref.py +0 -0
  211. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/list_remotes.py +0 -0
  212. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/list_tags.py +0 -0
  213. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/probe_remote_reachable.py +0 -0
  214. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/queries/resolve_base_branch.py +0 -0
  215. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/git/run.py +0 -0
  216. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/__init__.py +0 -0
  217. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/ensure.py +0 -0
  218. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/__init__.py +0 -0
  219. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/client.py +0 -0
  220. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/http/errors.py +0 -0
  221. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/__init__.py +0 -0
  222. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/base.py +0 -0
  223. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/gitea.py +0 -0
  224. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/providers/github.py +0 -0
  225. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/registry.py +0 -0
  226. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/types.py +0 -0
  227. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/remote_provisioning/visibility.py +0 -0
  228. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/__init__.py +0 -0
  229. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/dir.py +0 -0
  230. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/identifier.py +0 -0
  231. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/ignored.py +0 -0
  232. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/paths.py +0 -0
  233. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/resolve.py +0 -0
  234. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/selected.py +0 -0
  235. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/repository/verify.py +0 -0
  236. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/__init__.py +0 -0
  237. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/installed.py +0 -0
  238. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/semver.py +0 -0
  239. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/core/version/source.py +0 -0
  240. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/github/__init__.py +0 -0
  241. {kpmx-2.0.1 → kpmx-2.0.3}/src/pkgmgr/github/check_hadolint_sarif.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kpmx
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Kevin's package-manager tool (pkgmgr)
5
5
  Author-email: Kevin Veen-Birkenbach <info@veen.world>
6
6
  License: MIT
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "kpmx"
10
- version = "2.0.1"
10
+ version = "2.0.3"
11
11
  description = "Kevin's package-manager tool (pkgmgr)"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kpmx
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Kevin's package-manager tool (pkgmgr)
5
5
  Author-email: Kevin Veen-Birkenbach <info@veen.world>
6
6
  License: MIT
@@ -31,9 +31,7 @@ class MakefileInstaller(BaseInstaller):
31
31
  except OSError:
32
32
  return False
33
33
 
34
- if re.search(r"^install\s*:", content, flags=re.MULTILINE):
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*#{1,6}\s+(.*?)\s*#*\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
- A leading ``#`` heading becomes a bold line of its own (markdown
24
- headings inside an entry body would collide with the ``## [version]``
25
- structure), and inline ``code`` spans become ``*italic*`` so the entry
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"**{heading.group(1).strip()}**")
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 = lint_changelog_entry(changelog_path, entry)
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 — a leading '#' becomes "
98
- "bold, `code` becomes italic.\n"
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 = lint_changelog_entry(changelog_path, entry)
123
+ findings = _findings_for(entry)
103
124
  if not findings:
104
125
  break
105
126
  _print_findings(findings)
106
127
  attempt = body
107
- print("[INFO] Re-opening the editor so you can fix the entry...")
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(initial_message: str | None = None) -> str:
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 bold; `code` becomes italic.\n"
22
- "; Empty result will fall back to a generic message.\n\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