multi-workspace 3.2.19__tar.gz → 3.2.20__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 (48) hide show
  1. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/PKG-INFO +1 -1
  2. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/_version.py +2 -2
  3. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/doctor.py +29 -0
  4. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/.gitignore +0 -0
  5. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/LICENSE +0 -0
  6. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/README.md +0 -0
  7. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/__init__.py +0 -0
  8. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/__main__.py +0 -0
  9. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/add.py +0 -0
  10. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/api.py +0 -0
  11. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/app_api.py +0 -0
  12. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/bootstrap.py +0 -0
  13. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/branch.py +0 -0
  14. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/cli.py +0 -0
  15. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/cli_helpers.py +0 -0
  16. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/collaborator.py +0 -0
  17. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/convert_monorepo.py +0 -0
  18. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/errors.py +0 -0
  19. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/git_helpers.py +0 -0
  20. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/git_run.py +0 -0
  21. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/git_set_branch.py +0 -0
  22. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/hooks.py +0 -0
  23. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/ignore_files.py +0 -0
  24. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/init.py +0 -0
  25. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/logging.py +0 -0
  26. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/managed_blocks.py +0 -0
  27. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/open.py +0 -0
  28. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/paths.py +0 -0
  29. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/registry.py +0 -0
  30. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/remove.py +0 -0
  31. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/repo_urls.py +0 -0
  32. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/repos.py +0 -0
  33. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/resources/init_readme.md +0 -0
  34. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/service.py +0 -0
  35. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/settings.py +0 -0
  36. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync.py +0 -0
  37. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_agents.py +0 -0
  38. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_github.py +0 -0
  39. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode.py +0 -0
  40. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_devcontainer.py +0 -0
  41. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_extensions.py +0 -0
  42. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_helpers.py +0 -0
  43. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_launch.py +0 -0
  44. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_settings.py +0 -0
  45. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/sync_vscode_tasks.py +0 -0
  46. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/utils.py +0 -0
  47. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/multi/worktree.py +0 -0
  48. {multi_workspace-3.2.19 → multi_workspace-3.2.20}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: multi-workspace
3
- Version: 3.2.19
3
+ Version: 3.2.20
4
4
  Summary: Multi
5
5
  Project-URL: Repository, https://github.com/gabemontague/multi
6
6
  Project-URL: Issues, https://github.com/gabemontague/multi/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '3.2.19'
22
- __version_tuple__ = version_tuple = (3, 2, 19)
21
+ __version__ = version = '3.2.20'
22
+ __version_tuple__ = version_tuple = (3, 2, 20)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -10,6 +10,7 @@ import git as gitmodule
10
10
 
11
11
  from multi.errors import NoRepositoriesError
12
12
  from multi.git_helpers import is_git_repo_root
13
+ from multi.hooks import PROBLEM_STATES, configured_hooks_path, hooks_status
13
14
  from multi.paths import Paths
14
15
  from multi.repos import Repository, load_repos
15
16
 
@@ -258,6 +259,33 @@ def warn_on_repo_disk_mismatches(
258
259
  )
259
260
 
260
261
 
262
+ def warn_on_uninstalled_hooks(report: DoctorReport, paths: Paths) -> None:
263
+ try:
264
+ if configured_hooks_path(paths) is None:
265
+ return
266
+ except ValueError as exc:
267
+ report.errors.append(str(exc))
268
+ return
269
+
270
+ status = hooks_status(paths)
271
+ if not status.hooks_dir_exists:
272
+ report.warnings.append(
273
+ f"Workspace hooks directory {status.hooks_dir} does not exist; "
274
+ "git runs no hooks."
275
+ )
276
+ if status.non_executable:
277
+ report.warnings.append(
278
+ "Workspace hooks are not executable (git skips them): "
279
+ f"{', '.join(status.non_executable)}. Run `chmod +x` on them."
280
+ )
281
+ uninstalled = [repo.path for repo in status.repos if repo.state in PROBLEM_STATES]
282
+ if uninstalled:
283
+ report.warnings.append(
284
+ "Workspace hooks are not installed in: "
285
+ f"{', '.join(uninstalled)}. Run `multi hooks install`."
286
+ )
287
+
288
+
261
289
  def run_doctor_checks(target_dir: Path) -> DoctorReport:
262
290
  report = DoctorReport()
263
291
 
@@ -292,6 +320,7 @@ def run_doctor_checks(target_dir: Path) -> DoctorReport:
292
320
  warn_on_tracked_subrepos(report, paths, repos)
293
321
  warn_on_subrepo_submodules(report, paths, repos)
294
322
  warn_on_repo_disk_mismatches(report, paths, repos)
323
+ warn_on_uninstalled_hooks(report, paths)
295
324
 
296
325
  return report
297
326