dotman-git 1.2.0__tar.gz → 1.2.1__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 (178) hide show
  1. {dotman_git-1.2.0 → dotman_git-1.2.1}/CHANGELOG.md +26 -1
  2. {dotman_git-1.2.0/dotman_git.egg-info → dotman_git-1.2.1}/PKG-INFO +1 -1
  3. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/__init__.py +1 -1
  4. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/common.py +0 -4
  5. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/config_cmd.py +252 -262
  6. dotman_git-1.2.1/dot_man/cli/edit_cmd.py +185 -0
  7. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/init_cmd.py +58 -50
  8. dotman_git-1.2.1/dot_man/cli/remote_cmd.py +537 -0
  9. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/core.py +1 -1
  10. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/dotman_config.py +2 -34
  11. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/global_config.py +42 -22
  12. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/save_deploy_ops.py +105 -148
  13. {dotman_git-1.2.0 → dotman_git-1.2.1/dotman_git.egg-info}/PKG-INFO +1 -1
  14. {dotman_git-1.2.0 → dotman_git-1.2.1}/dotman_git.egg-info/SOURCES.txt +3 -1
  15. {dotman_git-1.2.0 → dotman_git-1.2.1}/pyproject.toml +1 -1
  16. dotman_git-1.2.1/tests/test_branch_cmd.py +483 -0
  17. dotman_git-1.2.1/tests/test_config_cmd.py +401 -0
  18. dotman_git-1.2.1/tests/test_deploy_cmd.py +579 -0
  19. dotman_git-1.2.1/tests/test_discover_cmd.py +387 -0
  20. dotman_git-1.2.1/tests/test_doctor_cmd.py +606 -0
  21. dotman_git-1.2.1/tests/test_edit_cmd.py +309 -0
  22. dotman_git-1.2.1/tests/test_encrypt_cmd.py +847 -0
  23. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_files_comprehensive.py +4 -2
  24. dotman_git-1.2.1/tests/test_import_cmd.py +914 -0
  25. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_init_cmd.py +1 -1
  26. dotman_git-1.2.1/tests/test_interactive.py +786 -0
  27. dotman_git-1.2.1/tests/test_log_cmd.py +755 -0
  28. dotman_git-1.2.1/tests/test_onboarding.py +618 -0
  29. dotman_git-1.2.1/tests/test_remote_cmd.py +850 -0
  30. dotman_git-1.2.1/tests/test_rollback_cmd.py +453 -0
  31. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_status_ops.py +8 -4
  32. dotman_git-1.2.1/tests/test_watch_cmd.py +307 -0
  33. dotman_git-1.2.0/dot_man/cli/edit_cmd.py +0 -177
  34. dotman_git-1.2.0/dot_man/cli/remote_cmd.py +0 -454
  35. dotman_git-1.2.0/tests/test_branch_cmd.py +0 -107
  36. dotman_git-1.2.0/tests/test_config_cmd.py +0 -116
  37. dotman_git-1.2.0/tests/test_deploy_cmd.py +0 -112
  38. dotman_git-1.2.0/tests/test_discover_cmd.py +0 -33
  39. dotman_git-1.2.0/tests/test_doctor_cmd.py +0 -90
  40. dotman_git-1.2.0/tests/test_edit_cmd.py +0 -50
  41. dotman_git-1.2.0/tests/test_encrypt_cmd.py +0 -114
  42. dotman_git-1.2.0/tests/test_import_cmd.py +0 -83
  43. dotman_git-1.2.0/tests/test_interactive.py +0 -188
  44. dotman_git-1.2.0/tests/test_log_cmd.py +0 -123
  45. dotman_git-1.2.0/tests/test_onboarding.py +0 -119
  46. dotman_git-1.2.0/tests/test_remote_cmd.py +0 -161
  47. {dotman_git-1.2.0 → dotman_git-1.2.1}/CONTRIBUTING.md +0 -0
  48. {dotman_git-1.2.0 → dotman_git-1.2.1}/LICENSE +0 -0
  49. {dotman_git-1.2.0 → dotman_git-1.2.1}/MANIFEST.in +0 -0
  50. {dotman_git-1.2.0 → dotman_git-1.2.1}/README.md +0 -0
  51. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/backups.py +0 -0
  52. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/branch_ops.py +0 -0
  53. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/__init__.py +0 -0
  54. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/add_cmd.py +0 -0
  55. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/audit_cmd.py +0 -0
  56. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/backup_cmd.py +0 -0
  57. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/branch_cmd.py +0 -0
  58. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/clean_cmd.py +0 -0
  59. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/completions_cmd.py +0 -0
  60. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/deploy_cmd.py +0 -0
  61. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/discover_cmd.py +0 -0
  62. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/doctor_cmd.py +0 -0
  63. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/encrypt_cmd.py +0 -0
  64. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/export_cmd.py +0 -0
  65. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/import_cmd.py +0 -0
  66. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/interface.py +0 -0
  67. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/log_cmd.py +0 -0
  68. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/main.py +0 -0
  69. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/navigate_cmd.py +0 -0
  70. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/onboarding.py +0 -0
  71. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/profile_cmd.py +0 -0
  72. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/restore_cmd.py +0 -0
  73. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/revert_cmd.py +0 -0
  74. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/rollback_cmd.py +0 -0
  75. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/show_cmd.py +0 -0
  76. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/status_cmd.py +0 -0
  77. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/switch_cmd.py +0 -0
  78. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/tag_cmd.py +0 -0
  79. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/template_cmd.py +0 -0
  80. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/tui_cmd.py +0 -0
  81. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/verify_cmd.py +0 -0
  82. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/cli/watch_cmd.py +0 -0
  83. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/completions/_dot-man.zsh +0 -0
  84. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/completions/dot-man.bash +0 -0
  85. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/completions/dot-man.fish +0 -0
  86. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/completions/install.sh +0 -0
  87. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/config.py +0 -0
  88. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/config_detector.py +0 -0
  89. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/constants.py +0 -0
  90. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/encryption.py +0 -0
  91. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/exceptions.py +0 -0
  92. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/files.py +0 -0
  93. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/hooks.py +0 -0
  94. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/interactive.py +0 -0
  95. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/lock.py +0 -0
  96. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/merge.py +0 -0
  97. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/operations.py +0 -0
  98. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/py.typed +0 -0
  99. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/secrets.py +0 -0
  100. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/section.py +0 -0
  101. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/status_ops.py +0 -0
  102. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/tui_log.py +0 -0
  103. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/ui.py +0 -0
  104. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/utils.py +0 -0
  105. {dotman_git-1.2.0 → dotman_git-1.2.1}/dot_man/vault.py +0 -0
  106. {dotman_git-1.2.0 → dotman_git-1.2.1}/dotman_git.egg-info/dependency_links.txt +0 -0
  107. {dotman_git-1.2.0 → dotman_git-1.2.1}/dotman_git.egg-info/entry_points.txt +0 -0
  108. {dotman_git-1.2.0 → dotman_git-1.2.1}/dotman_git.egg-info/requires.txt +0 -0
  109. {dotman_git-1.2.0 → dotman_git-1.2.1}/dotman_git.egg-info/top_level.txt +0 -0
  110. {dotman_git-1.2.0 → dotman_git-1.2.1}/setup.cfg +0 -0
  111. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_add_cmd.py +0 -0
  112. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_audit_cmd.py +0 -0
  113. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_backup_cmd.py +0 -0
  114. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_backups.py +0 -0
  115. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_branch_ops.py +0 -0
  116. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_clean.py +0 -0
  117. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_cli_commands.py +0 -0
  118. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_cli_extra.py +0 -0
  119. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_cli_help.py +0 -0
  120. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_cli_revert.py +0 -0
  121. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_cli_v1.py +0 -0
  122. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_common_v1.py +0 -0
  123. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_completion.py +0 -0
  124. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_completions_cmd.py +0 -0
  125. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_comprehensive.py +0 -0
  126. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_config.py +0 -0
  127. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_config_cmd_v1.py +0 -0
  128. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_config_ops_v1.py +0 -0
  129. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_config_preservation.py +0 -0
  130. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_config_section.py +0 -0
  131. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_core.py +0 -0
  132. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_core_extended.py +0 -0
  133. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_core_v1.py +0 -0
  134. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_custom_secrets.py +0 -0
  135. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_dotman_config.py +0 -0
  136. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_encryption.py +0 -0
  137. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_exceptions.py +0 -0
  138. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_export_cmd.py +0 -0
  139. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_files_atomic.py +0 -0
  140. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_files_extended.py +0 -0
  141. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_final_push.py +0 -0
  142. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_fixtures.py +0 -0
  143. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_git_manager.py +0 -0
  144. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_git_manager_extended.py +0 -0
  145. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_global_config.py +0 -0
  146. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_hooks.py +0 -0
  147. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_hooks_new.py +0 -0
  148. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_integration.py +0 -0
  149. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_lock.py +0 -0
  150. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_log_checkout_tag.py +0 -0
  151. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_log_cmd_v1.py +0 -0
  152. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_merge.py +0 -0
  153. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_more_integration.py +0 -0
  154. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_navigate_cmd.py +0 -0
  155. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_navigate_switch_v1.py +0 -0
  156. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_operations.py +0 -0
  157. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_ops_v1.py +0 -0
  158. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_performance_logic.py +0 -0
  159. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_profile_cmd.py +0 -0
  160. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_profile_cmd_v1.py +0 -0
  161. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_profile_extra.py +0 -0
  162. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_restore_cmd.py +0 -0
  163. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_save_deploy_ops.py +0 -0
  164. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_secrets.py +0 -0
  165. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_section.py +0 -0
  166. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_shell_completions.py +0 -0
  167. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_show_cmd.py +0 -0
  168. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_switch_cmd.py +0 -0
  169. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_switch_enhancements.py +0 -0
  170. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_symlink_deploy.py +0 -0
  171. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_tag_cmd.py +0 -0
  172. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_template_cmd.py +0 -0
  173. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_template_cmd_v1.py +0 -0
  174. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_template_extra.py +0 -0
  175. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_ui.py +0 -0
  176. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_utils.py +0 -0
  177. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_vault.py +0 -0
  178. {dotman_git-1.2.0 → dotman_git-1.2.1}/tests/test_verify_cmd.py +0 -0
@@ -5,7 +5,32 @@ All notable changes to dot-man will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [1.0.1] - 2026-05-17
8
+ ## [Unreleased]
9
+
10
+ ### Refactored
11
+
12
+ - **Deduplicate deploy logic** — extracted `_build_final_excludes`, `_deploy_repo_path`, `_restore_file_secrets_inplace` from duplicate code in `deploy_section` and `deploy_item` (save_deploy_ops.py)
13
+ - **Unify config loading** — extracted `load_config_file()` function in `global_config.py`, removing 30 lines of duplicate YAML/TOML loading from both `DotManConfig` and `GlobalConfig`
14
+ - **Clean up silent `except: pass`** — removed 4 redundant `pass` statements after `logging.debug()` in `common.py`, added `logging.debug()` to a bare `except` in `core.py`
15
+ - **Break up `_run_interactive_tutorial`** — 302-line function split into 8 discrete step functions (config_cmd.py)
16
+ - **Extract `SECTION_EXAMPLES`** — 260-line data dict moved from function body to module-level constant (config_cmd.py)
17
+ - **Break up `run_setup_wizard`** — 250-line wizard split into 5 helpers (init_cmd.py)
18
+ - **Break up `setup`** — 253-line remote setup split into 17 helpers; deep nesting reduced from 11 to 4 levels (remote_cmd.py)
19
+ - **Reduce deep nesting in `edit`** — from 11 to 4-5 levels (edit_cmd.py)
20
+
21
+ ### Test Improvements
22
+
23
+ - Strengthened loose assertions (24 tests): added output content checks, mock-call assertions, or file-state assertions
24
+ - **`interactive.py`** — 47 tests, 47% → 100% coverage
25
+ - **`branch_cmd.py`** — 23 tests, 51% → 100% coverage
26
+ - **`deploy_cmd.py`** — 25 tests, 59% → 100% coverage
27
+ - Overall coverage: 66% → 83%
28
+
29
+ ## [1.2.0] - 2026-05-17
30
+
31
+ ### Added
32
+ - **Symlink deploy mode** — `deploy_method = "symlink"` per section
33
+ - **Quickshell hook aliases** — `quickshell_reload`, `quickshell_restart`, `quickshell_validate` with `{qs_config}` → `{config_name}` placeholder
9
34
 
10
35
  ### Fixed
11
36
  - README outdated commands (switch → navigate)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dotman-git
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Dotfile manager with git-powered branching
5
5
  Author-email: Bishoy Ehab <beshoyehabhhmm@gmail.com>
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
1
  """dot-man: Dotfile manager with git-powered branching."""
2
2
 
3
- __version__ = "1.2.0"
3
+ __version__ = "1.2.1"
4
4
  __author__ = "Bishoy Ehab"
@@ -230,7 +230,6 @@ def _get_completion_cache() -> dict:
230
230
  return _memory_cache
231
231
  except Exception:
232
232
  logging.debug("Failed to load completion cache from file")
233
- pass
234
233
 
235
234
  _memory_cache = {}
236
235
  _memory_cache_time = time.time()
@@ -250,7 +249,6 @@ def _save_completion_cache(data: dict) -> None:
250
249
  _COMPLETION_CACHE_FILE.write_text(json.dumps(data))
251
250
  except Exception:
252
251
  logging.debug("Failed to save completion cache to file")
253
- pass
254
252
 
255
253
 
256
254
  def _clear_completion_cache() -> None:
@@ -266,7 +264,6 @@ def _clear_completion_cache() -> None:
266
264
  logging.debug(
267
265
  "Failed to unlink completion cache file in _clear_completion_cache"
268
266
  )
269
- pass
270
267
 
271
268
 
272
269
  def _clear_all_caches() -> None:
@@ -285,7 +282,6 @@ def _clear_all_caches() -> None:
285
282
  _COMPLETION_CACHE_FILE.unlink()
286
283
  except Exception:
287
284
  logging.debug("Failed to unlink completion cache file in _clear_all_caches")
288
- pass
289
285
 
290
286
 
291
287
  def parse_branch_arg(arg: str) -> dict: