Skip to content

Commit c23a3a8

Browse files
MK8S-25: Complete factorization of repository index.html file handling
Eliminates code duplication by centralizing all index.html file path logic: - Added _get_index_file_paths() method for consistent file path listing - Added _get_repository_directories() method for consistent directory listing - Updated clean(), create_index(), and targets list to use centralized methods - Ensures creation, cleanup, and task dependencies all reference same file paths
1 parent 1e73d78 commit c23a3a8

File tree

1 file changed

+63
-64
lines changed

1 file changed

+63
-64
lines changed

buildchain/buildchain/targets/repository.py

Lines changed: 63 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -229,76 +229,22 @@ def _get_saltenv_directories(self) -> tuple:
229229
)
230230
return saltenv_dir, top_saltenv_dir
231231

232-
def create_index_files(self) -> types.TaskDict:
233-
"""Create index.html files for repository directories."""
234-
235-
def clean() -> None:
236-
"""Delete the index.html files created by this task."""
237-
# Clean repository-specific index files
238-
index_files = [
239-
self.rootdir / self.INDEX_HTML_FILENAME,
240-
self.rootdir / self.ARCH / self.INDEX_HTML_FILENAME,
241-
]
242-
# Clean shared directory index files if this is scality repo
243-
saltenv_dir, top_saltenv_dir = self._get_saltenv_directories()
244-
if saltenv_dir and top_saltenv_dir:
245-
index_files.extend(
246-
[
247-
# Repository-level saltenv structure
248-
saltenv_dir / self.INDEX_HTML_FILENAME,
249-
saltenv_dir / "redhat" / self.INDEX_HTML_FILENAME,
250-
saltenv_dir
251-
/ "redhat"
252-
/ str(self._releasever)
253-
/ self.INDEX_HTML_FILENAME,
254-
# Top-level saltenv (for health check)
255-
top_saltenv_dir / self.INDEX_HTML_FILENAME,
256-
]
257-
)
258-
259-
# Actually remove the index.html files
260-
for index_file in index_files:
261-
if index_file.exists():
262-
index_file.unlink()
263-
264-
def create_index() -> None:
265-
"""Create empty index.html files in repository directories."""
266-
repository_directories = [
267-
self.rootdir, # Repository root (e.g., metalk8s-scality-el8)
268-
self.rootdir / self.ARCH, # Architecture directory (e.g., x86_64)
269-
]
270-
271-
# Also create shared directory index files, but only from scality repo
272-
# to avoid doit task conflicts between multiple repositories
273-
saltenv_dir, top_saltenv_dir = self._get_saltenv_directories()
274-
if saltenv_dir and top_saltenv_dir:
275-
repository_directories.extend(
276-
[
277-
# Repository-level saltenv structure
278-
saltenv_dir,
279-
saltenv_dir / "redhat",
280-
saltenv_dir / "redhat" / str(self._releasever),
281-
# Top-level saltenv (for health check)
282-
top_saltenv_dir,
283-
]
284-
)
285-
286-
for repository_directory in repository_directories:
287-
# Create directory if it doesn't exist, then create index.html
288-
repository_directory.mkdir(parents=True, exist_ok=True)
289-
index_file = repository_directory / self.INDEX_HTML_FILENAME
290-
index_file.touch()
291-
# Set readable permissions for nginx
292-
index_file.chmod(0o644)
232+
def _get_index_file_paths(self) -> List[Path]:
233+
"""Get all index.html file paths for this repository.
293234
294-
# Build targets list - include shared directories only for scality repo
295-
targets = [
235+
Returns:
236+
List of all index.html file paths that should be created/cleaned
237+
"""
238+
# Repository-specific index files
239+
index_files = [
296240
self.rootdir / self.INDEX_HTML_FILENAME,
297241
self.rootdir / self.ARCH / self.INDEX_HTML_FILENAME,
298242
]
243+
244+
# Add saltenv index files for scality repository
299245
saltenv_dir, top_saltenv_dir = self._get_saltenv_directories()
300246
if saltenv_dir and top_saltenv_dir:
301-
targets.extend(
247+
index_files.extend(
302248
[
303249
# Repository-level saltenv structure
304250
saltenv_dir / self.INDEX_HTML_FILENAME,
@@ -312,6 +258,59 @@ def create_index() -> None:
312258
]
313259
)
314260

261+
return index_files
262+
263+
def _get_repository_directories(self) -> List[Path]:
264+
"""Get all repository directories that need index.html files.
265+
266+
Returns:
267+
List of directory paths where index.html should be created
268+
"""
269+
# Repository-specific directories
270+
repository_directories = [
271+
self.rootdir, # Repository root (e.g., metalk8s-scality-el8)
272+
self.rootdir / self.ARCH, # Architecture directory (e.g., x86_64)
273+
]
274+
275+
# Add saltenv directories for scality repository
276+
saltenv_dir, top_saltenv_dir = self._get_saltenv_directories()
277+
if saltenv_dir and top_saltenv_dir:
278+
repository_directories.extend(
279+
[
280+
# Repository-level saltenv structure
281+
saltenv_dir,
282+
saltenv_dir / "redhat",
283+
saltenv_dir / "redhat" / str(self._releasever),
284+
# Top-level saltenv (for health check)
285+
top_saltenv_dir,
286+
]
287+
)
288+
289+
return repository_directories
290+
291+
def create_index_files(self) -> types.TaskDict:
292+
"""Create index.html files for repository directories."""
293+
294+
def clean() -> None:
295+
"""Delete the index.html files created by this task."""
296+
# Actually remove the index.html files
297+
for index_file in self._get_index_file_paths():
298+
if index_file.exists():
299+
index_file.unlink()
300+
301+
def create_index() -> None:
302+
"""Create empty index.html files in repository directories."""
303+
for repository_directory in self._get_repository_directories():
304+
# Create directory if it doesn't exist, then create index.html
305+
repository_directory.mkdir(parents=True, exist_ok=True)
306+
index_file = repository_directory / self.INDEX_HTML_FILENAME
307+
index_file.touch()
308+
# Set readable permissions for nginx
309+
index_file.chmod(0o644)
310+
311+
# Build targets list using centralized method
312+
targets = self._get_index_file_paths()
313+
315314
task = self.basic_task
316315
task.update(
317316
{

0 commit comments

Comments
 (0)