Check if output directory is writable. Args: output_dir: Output directory path Returns: Validated output directory path Raises: RepositoryError: If output directory is not writable
(output_dir: Path)
| 72 | |
| 73 | |
| 74 | def check_writable_output(output_dir: Path) -> Path: |
| 75 | """ |
| 76 | Check if output directory is writable. |
| 77 | |
| 78 | Args: |
| 79 | output_dir: Output directory path |
| 80 | |
| 81 | Returns: |
| 82 | Validated output directory path |
| 83 | |
| 84 | Raises: |
| 85 | RepositoryError: If output directory is not writable |
| 86 | """ |
| 87 | output_dir = Path(output_dir).expanduser().resolve() |
| 88 | |
| 89 | # Check if output directory exists |
| 90 | if output_dir.exists(): |
| 91 | if not output_dir.is_dir(): |
| 92 | raise RepositoryError( |
| 93 | f"Output path exists but is not a directory: {output_dir}" |
| 94 | ) |
| 95 | |
| 96 | # Check if writable |
| 97 | if not os.access(output_dir, os.W_OK): |
| 98 | raise RepositoryError( |
| 99 | f"Output directory is not writable: {output_dir}\n\n" |
| 100 | f"Try: chmod u+w {output_dir}" |
| 101 | ) |
| 102 | else: |
| 103 | # Check if parent is writable |
| 104 | parent = output_dir.parent |
| 105 | if not parent.exists(): |
| 106 | raise RepositoryError( |
| 107 | f"Parent directory does not exist: {parent}" |
| 108 | ) |
| 109 | |
| 110 | if not os.access(parent, os.W_OK): |
| 111 | raise RepositoryError( |
| 112 | f"Cannot create output directory (parent not writable): {parent}\n\n" |
| 113 | f"Try: chmod u+w {parent}" |
| 114 | ) |
| 115 | |
| 116 | return output_dir |
| 117 | |
| 118 | |
| 119 | def _get_git_repo(repo_path: Path): |
no test coverage detected