diff --git a/src/devx/ci/sync_wiki.py b/src/devx/ci/sync_wiki.py index 8e23476..1af84f2 100644 --- a/src/devx/ci/sync_wiki.py +++ b/src/devx/ci/sync_wiki.py @@ -292,8 +292,10 @@ def main(dry_run: bool, repo: str | None, verify: bool, strict: bool) -> None: try: existing_pages = list_wiki_pages(client) - except APIError: - existing_pages = {} + except APIError as e: + raise click.ClickException( + _("Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.", error=e) + ) from e if existing_pages: click.echo(_("Found {count} existing wiki pages.", count=len(existing_pages))) diff --git a/src/devx/translations.json b/src/devx/translations.json index b037e03..8f6d7a6 100644 --- a/src/devx/translations.json +++ b/src/devx/translations.json @@ -3342,5 +3342,13 @@ "pl": "Katalog do skanowania (domyślnie: tests/integration). Można powtarzać.", "ru": "Директория для сканирования (по умолчанию: tests/integration). Можно повторять.", "zh": "要扫描的目录(默认:tests/integration)。可重复。" + }, + "Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.": { + "bg": "Неуспешно извличане на съществуващи wiki страници: {error}. Прекратяване, за да се избегне създаване на дублирани страници.", + "de": "Abrufen bestehender Wiki-Seiten fehlgeschlagen: {error}. Abbruch, um doppelte Seiten zu vermeiden.", + "en": "Failed to list existing wiki pages: {error}. Aborting to avoid creating duplicate pages.", + "pl": "Nie udało się wylistować istniejących stron wiki: {error}. Przerywanie, aby uniknąć tworzenia zduplikowanych stron.", + "ru": "Не удалось получить список существующих wiki-страниц: {error}. Прерывание, чтобы избежать создания дубликатов страниц.", + "zh": "列出现有 wiki 页面失败:{error}。正在中止以避免创建重复页面。" } } diff --git a/tests/unit/test_sync_wiki.py b/tests/unit/test_sync_wiki.py index b155965..8bc060d 100644 --- a/tests/unit/test_sync_wiki.py +++ b/tests/unit/test_sync_wiki.py @@ -537,8 +537,8 @@ class TestMain: @patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True) @patch("devx.ci.sync_wiki.GiteaClient") - def test_initial_list_api_error_treated_as_empty(self, mock_client_cls: MagicMock) -> None: - """When the initial page list fails, sync proceeds treating wiki as empty.""" + def test_initial_list_api_error_aborts(self, mock_client_cls: MagicMock) -> None: + """When the initial page list fails, sync aborts to avoid duplicate pages.""" mock_client = MagicMock() mock_client_cls.return_value = mock_client with patch("devx.ci.sync_wiki.MAPPING_FILE") as mock_mapping: @@ -549,8 +549,9 @@ class TestMain: with patch("devx.ci.sync_wiki.sync_page", return_value="created"): runner = CliRunner() result = runner.invoke(main, ["--repo", "owner/repo"]) - assert result.exit_code == 0 - assert "Created: Home" in result.output + assert result.exit_code != 0 + assert "Failed to list existing wiki pages" in result.output + assert "Aborting" in result.output @patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True) @patch("devx.ci.sync_wiki.GiteaClient")