kpmx 2.0.0__tar.gz → 2.0.2__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.0/src/kpmx.egg-info → kpmx-2.0.2}/PKG-INFO +1 -1
  2. {kpmx-2.0.0 → kpmx-2.0.2}/pyproject.toml +1 -1
  3. {kpmx-2.0.0 → kpmx-2.0.2/src/kpmx.egg-info}/PKG-INFO +1 -1
  4. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/makefile.py +1 -3
  5. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/changelog_lint.py +8 -6
  6. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/changelog_md.py +19 -6
  7. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/editor.py +16 -3
  8. {kpmx-2.0.0 → kpmx-2.0.2}/LICENSE +0 -0
  9. {kpmx-2.0.0 → kpmx-2.0.2}/README.md +0 -0
  10. {kpmx-2.0.0 → kpmx-2.0.2}/setup.cfg +0 -0
  11. {kpmx-2.0.0 → kpmx-2.0.2}/src/kpmx.egg-info/SOURCES.txt +0 -0
  12. {kpmx-2.0.0 → kpmx-2.0.2}/src/kpmx.egg-info/dependency_links.txt +0 -0
  13. {kpmx-2.0.0 → kpmx-2.0.2}/src/kpmx.egg-info/entry_points.txt +0 -0
  14. {kpmx-2.0.0 → kpmx-2.0.2}/src/kpmx.egg-info/requires.txt +0 -0
  15. {kpmx-2.0.0 → kpmx-2.0.2}/src/kpmx.egg-info/top_level.txt +0 -0
  16. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/__init__.py +0 -0
  17. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/__main__.py +0 -0
  18. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/__init__.py +0 -0
  19. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/archive/__init__.py +0 -0
  20. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/archive/discovery.py +0 -0
  21. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/archive/inspect.py +0 -0
  22. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/archive/readme.py +0 -0
  23. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/archive/workflow.py +0 -0
  24. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/branch/__init__.py +0 -0
  25. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/branch/close_branch.py +0 -0
  26. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/branch/drop_branch.py +0 -0
  27. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/branch/open_branch.py +0 -0
  28. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/changelog/__init__.py +0 -0
  29. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/code_scanning/__init__.py +0 -0
  30. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/config/__init__.py +0 -0
  31. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/config/add.py +0 -0
  32. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/config/init.py +0 -0
  33. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/config/show.py +0 -0
  34. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/__init__.py +0 -0
  35. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/capabilities.py +0 -0
  36. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/context.py +0 -0
  37. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/__init__.py +0 -0
  38. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/base.py +0 -0
  39. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/__init__.py +0 -0
  40. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/conflicts.py +0 -0
  41. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/installer.py +0 -0
  42. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/__init__.py +0 -0
  43. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/inspector.py +0 -0
  44. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/matcher.py +0 -0
  45. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/models.py +0 -0
  46. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/normalizer.py +0 -0
  47. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/parser.py +0 -0
  48. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile/result.py +0 -0
  49. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/profile_list.py +0 -0
  50. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/retry.py +0 -0
  51. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/runner.py +0 -0
  52. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/textparse.py +0 -0
  53. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/nix/types.py +0 -0
  54. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/os_packages/__init__.py +0 -0
  55. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/os_packages/arch_pkgbuild.py +0 -0
  56. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/os_packages/debian_control.py +0 -0
  57. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/os_packages/rpm_spec.py +0 -0
  58. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/installers/python.py +0 -0
  59. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/layers.py +0 -0
  60. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/install/pipeline.py +0 -0
  61. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/__init__.py +0 -0
  62. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/context.py +0 -0
  63. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/diff_cmd.py +0 -0
  64. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/git_remote.py +0 -0
  65. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/io.py +0 -0
  66. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/list_cmd.py +0 -0
  67. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/merge_cmd.py +0 -0
  68. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/printing.py +0 -0
  69. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/remote_provision.py +0 -0
  70. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/setup_cmd.py +0 -0
  71. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/types.py +0 -0
  72. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/url_utils.py +0 -0
  73. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/mirror/visibility_cmd.py +0 -0
  74. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/proxy.py +0 -0
  75. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/publish/__init__.py +0 -0
  76. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/publish/git_tags.py +0 -0
  77. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/publish/pypi_url.py +0 -0
  78. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/publish/types.py +0 -0
  79. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/publish/workflow.py +0 -0
  80. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/__init__.py +0 -0
  81. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/__init__.py +0 -0
  82. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/debian.py +0 -0
  83. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/flake.py +0 -0
  84. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/pkgbuild.py +0 -0
  85. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/pyproject.py +0 -0
  86. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/rpm_changelog.py +0 -0
  87. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/files/rpm_spec.py +0 -0
  88. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/git_ops.py +0 -0
  89. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/package_name.py +0 -0
  90. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/prompts.py +0 -0
  91. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/retry.py +0 -0
  92. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/versioning.py +0 -0
  93. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/release/workflow.py +0 -0
  94. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/__init__.py +0 -0
  95. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/_parallel.py +0 -0
  96. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/clone.py +0 -0
  97. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/__init__.py +0 -0
  98. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/config_writer.py +0 -0
  99. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/git_bootstrap.py +0 -0
  100. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/mirrors.py +0 -0
  101. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/model.py +0 -0
  102. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/parser.py +0 -0
  103. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/planner.py +0 -0
  104. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/service.py +0 -0
  105. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/create/templates.py +0 -0
  106. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/deinstall.py +0 -0
  107. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/delete.py +0 -0
  108. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/list.py +0 -0
  109. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/pull.py +0 -0
  110. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/push.py +0 -0
  111. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/repository/status.py +0 -0
  112. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/update/__init__.py +0 -0
  113. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/update/manager.py +0 -0
  114. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/update/os_release.py +0 -0
  115. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/actions/update/system_updater.py +0 -0
  116. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/__init__.py +0 -0
  117. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/__init__.py +0 -0
  118. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/archive.py +0 -0
  119. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/branch.py +0 -0
  120. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/changelog.py +0 -0
  121. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/code_scanning.py +0 -0
  122. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/config.py +0 -0
  123. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/make.py +0 -0
  124. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/mirror.py +0 -0
  125. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/publish.py +0 -0
  126. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/release.py +0 -0
  127. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/repos.py +0 -0
  128. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/tools.py +0 -0
  129. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/commands/version.py +0 -0
  130. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/context.py +0 -0
  131. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/dispatch.py +0 -0
  132. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/__init__.py +0 -0
  133. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/archive_cmd.py +0 -0
  134. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/branch_cmd.py +0 -0
  135. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/changelog_cmd.py +0 -0
  136. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/code_scanning_cmd.py +0 -0
  137. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/common.py +0 -0
  138. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/config_cmd.py +0 -0
  139. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/install_update.py +0 -0
  140. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/list_cmd.py +0 -0
  141. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/make_cmd.py +0 -0
  142. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/mirror_cmd.py +0 -0
  143. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/navigation_cmd.py +0 -0
  144. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/publish_cmd.py +0 -0
  145. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/release_cmd.py +0 -0
  146. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/parser/version_cmd.py +0 -0
  147. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/proxy.py +0 -0
  148. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/tools/__init__.py +0 -0
  149. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/tools/paths.py +0 -0
  150. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/cli/tools/vscode.py +0 -0
  151. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/config/__init__.py +0 -0
  152. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/config/defaults.yaml +0 -0
  153. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/__init__.py +0 -0
  154. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/alias.py +0 -0
  155. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/ink.py +0 -0
  156. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/layer.py +0 -0
  157. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/resolve.py +0 -0
  158. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/command/run.py +0 -0
  159. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/config/__init__.py +0 -0
  160. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/config/load.py +0 -0
  161. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/config/save.py +0 -0
  162. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/__init__.py +0 -0
  163. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/providers/__init__.py +0 -0
  164. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/providers/env.py +0 -0
  165. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/providers/gh.py +0 -0
  166. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/providers/keyring.py +0 -0
  167. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/providers/prompt.py +0 -0
  168. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/resolver.py +0 -0
  169. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/store_keys.py +0 -0
  170. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/types.py +0 -0
  171. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/credentials/validate.py +0 -0
  172. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/__init__.py +0 -0
  173. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/__init__.py +0 -0
  174. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/add.py +0 -0
  175. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/add_all.py +0 -0
  176. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/add_remote.py +0 -0
  177. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/add_remote_push_url.py +0 -0
  178. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/branch_move.py +0 -0
  179. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/checkout.py +0 -0
  180. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/clone.py +0 -0
  181. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/commit.py +0 -0
  182. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/create_branch.py +0 -0
  183. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/delete_local_branch.py +0 -0
  184. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/delete_remote_branch.py +0 -0
  185. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/fetch.py +0 -0
  186. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/init.py +0 -0
  187. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/merge_no_ff.py +0 -0
  188. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/pull.py +0 -0
  189. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/pull_args.py +0 -0
  190. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/pull_ff_only.py +0 -0
  191. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/push.py +0 -0
  192. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/push_args.py +0 -0
  193. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/push_upstream.py +0 -0
  194. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/set_remote_url.py +0 -0
  195. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/tag_annotated.py +0 -0
  196. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/commands/tag_force_annotated.py +0 -0
  197. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/errors.py +0 -0
  198. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/__init__.py +0 -0
  199. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_changelog.py +0 -0
  200. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_config_value.py +0 -0
  201. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_current_branch.py +0 -0
  202. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_head_commit.py +0 -0
  203. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_latest_commit.py +0 -0
  204. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_latest_signing_key.py +0 -0
  205. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_remote_head_commit.py +0 -0
  206. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_remote_push_urls.py +0 -0
  207. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_repo_root.py +0 -0
  208. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_tags.py +0 -0
  209. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_tags_at_ref.py +0 -0
  210. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/get_upstream_ref.py +0 -0
  211. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/list_remotes.py +0 -0
  212. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/list_tags.py +0 -0
  213. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/probe_remote_reachable.py +0 -0
  214. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/queries/resolve_base_branch.py +0 -0
  215. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/git/run.py +0 -0
  216. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/__init__.py +0 -0
  217. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/ensure.py +0 -0
  218. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/http/__init__.py +0 -0
  219. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/http/client.py +0 -0
  220. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/http/errors.py +0 -0
  221. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/providers/__init__.py +0 -0
  222. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/providers/base.py +0 -0
  223. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/providers/gitea.py +0 -0
  224. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/providers/github.py +0 -0
  225. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/registry.py +0 -0
  226. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/types.py +0 -0
  227. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/remote_provisioning/visibility.py +0 -0
  228. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/__init__.py +0 -0
  229. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/dir.py +0 -0
  230. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/identifier.py +0 -0
  231. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/ignored.py +0 -0
  232. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/paths.py +0 -0
  233. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/resolve.py +0 -0
  234. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/selected.py +0 -0
  235. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/repository/verify.py +0 -0
  236. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/version/__init__.py +0 -0
  237. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/version/installed.py +0 -0
  238. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/version/semver.py +0 -0
  239. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/core/version/source.py +0 -0
  240. {kpmx-2.0.0 → kpmx-2.0.2}/src/pkgmgr/github/__init__.py +0 -0
  241. {kpmx-2.0.0 → kpmx-2.0.2}/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.0
3
+ Version: 2.0.2
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.0"
10
+ version = "2.0.2"
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.0
3
+ Version: 2.0.2
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)
@@ -7,10 +7,11 @@ import shutil
7
7
  import subprocess
8
8
  import tempfile
9
9
 
10
- _HEADING = re.compile(r"^\s*#{1,6}\s+(.*?)\s*#*\s*$")
10
+ _HEADING = re.compile(r"^\s*(#{1,6})\s+(.*?)\s*#*\s*$")
11
11
  _INLINE_CODE = re.compile(r"`([^`\n]+)`")
12
12
  _FINDING = re.compile(r"\bMD\d{3}\b")
13
13
  _MULTI_BLANK = re.compile(r"\n{3,}")
14
+ _ENTRY_LEVEL = 3
14
15
 
15
16
 
16
17
  class ChangelogLintError(RuntimeError):
@@ -20,10 +21,10 @@ class ChangelogLintError(RuntimeError):
20
21
  def transform_changelog_message(text: str) -> str:
21
22
  """Normalise a free-form release message into the changelog house style.
22
23
 
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.
24
+ Headings are pushed below the ``## [version]`` line the entry is filed
25
+ under, so they nest instead of competing with it. Bolding them instead
26
+ would read as a heading to markdown-lint and fail MD036. Inline ``code``
27
+ spans become ``*italic*`` so the entry stays free of backticks.
27
28
  """
28
29
  text = _INLINE_CODE.sub(r"*\1*", text)
29
30
 
@@ -31,9 +32,10 @@ def transform_changelog_message(text: str) -> str:
31
32
  for line in text.split("\n"):
32
33
  heading = _HEADING.match(line)
33
34
  if heading:
35
+ level = max(len(heading.group(1)), _ENTRY_LEVEL)
34
36
  if out and out[-1].strip():
35
37
  out.append("")
36
- out.append(f"**{heading.group(1).strip()}**")
38
+ out.append(f"{'#' * level} {heading.group(2).strip()}")
37
39
  out.append("")
38
40
  else:
39
41
  out.append(line)
@@ -16,6 +16,11 @@ H1_RE = re.compile(r"^#\s+\S", re.MULTILINE)
16
16
  H2_RE = re.compile(r"^##\s+\S", re.MULTILINE)
17
17
 
18
18
 
19
+ def _at_end_of_file(entry: str) -> str:
20
+ """Return *entry* without the blank line that separates it from a next one."""
21
+ return entry.rstrip("\n") + "\n"
22
+
23
+
19
24
  def _insert_after_h1(existing: str, entry: str) -> str:
20
25
  """Place *entry* after the H1 (and any intro prose), above the first H2.
21
26
 
@@ -26,7 +31,7 @@ def _insert_after_h1(existing: str, entry: str) -> str:
26
31
  ``## ``) is preserved: *entry* is prepended unchanged.
27
32
  """
28
33
  if not existing.strip():
29
- return f"# Changelog\n\n{entry}"
34
+ return f"# Changelog\n\n{_at_end_of_file(entry)}"
30
35
 
31
36
  if not H1_RE.search(existing):
32
37
  # Legacy layout: file starts with `## [version]` and has no H1.
@@ -43,7 +48,7 @@ def _insert_after_h1(existing: str, entry: str) -> str:
43
48
  if existing.endswith("\n\n")
44
49
  else ("\n" if existing.endswith("\n") else "\n\n")
45
50
  )
46
- return f"{existing}{suffix}{entry}"
51
+ return f"{existing}{suffix}{_at_end_of_file(entry)}"
47
52
 
48
53
  # Insert new entry just before the first H2.
49
54
  head = existing[: h2_match.start()].rstrip("\n") + "\n\n"
@@ -75,6 +80,12 @@ def update_changelog(
75
80
  print(f" - {finding}")
76
81
  print()
77
82
 
83
+ def _wait_for_reader() -> None:
84
+ try:
85
+ input("[INFO] Press Enter to re-open the editor and fix the entry...")
86
+ except EOFError:
87
+ print("[INFO] Re-opening the editor so you can fix the entry...")
88
+
78
89
  if message is not None:
79
90
  body, entry = _entry_for(message)
80
91
  findings = lint_changelog_entry(changelog_path, entry)
@@ -87,19 +98,21 @@ def update_changelog(
87
98
  body, entry = _entry_for(message or f"Release {new_version}")
88
99
  else:
89
100
  attempt: str | None = None
101
+ rejected: list[str] | None = None
90
102
  while True:
91
103
  print(
92
- "\n[INFO] Provide the changelog entry — a leading '#' becomes "
93
- "bold, `code` becomes italic.\n"
104
+ "\n[INFO] Provide the changelog entry - a leading '#' becomes "
105
+ "a sub-heading, `code` becomes italic.\n"
94
106
  )
95
- raw = _open_editor_for_changelog(attempt)
107
+ raw = _open_editor_for_changelog(attempt, rejected)
96
108
  body, entry = _entry_for(raw or f"Release {new_version}")
97
109
  findings = lint_changelog_entry(changelog_path, entry)
98
110
  if not findings:
99
111
  break
100
112
  _print_findings(findings)
101
113
  attempt = body
102
- print("[INFO] Re-opening the editor so you can fix the entry...")
114
+ rejected = findings
115
+ _wait_for_reader()
103
116
 
104
117
  changelog = ""
105
118
  if os.path.exists(changelog_path):
@@ -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
File without changes
File without changes
File without changes
File without changes