{"id":"79d857250967abbe","repo":"python-poetry/poetry","slug":"a-repository-with-name-repository-name-was-alrea","errorCode":null,"errorMessage":"A repository with name {repository_name} was already added.","messagePattern":"A repository with name (.+?) was already added\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/poetry/repositories/repository_pool.py","lineNumber":138,"sourceCode":"\n    def get_priority(self, name: str) -> Priority:\n        return self._get_prioritized_repository(name).priority\n\n    def _get_prioritized_repository(self, name: str) -> PrioritizedRepository:\n        name = name.lower()\n        if self.has_repository(name):\n            return self._repositories[name]\n        raise IndexError(f'Repository \"{name}\" does not exist.')\n\n    def add_repository(\n        self, repository: Repository, *, priority: Priority = Priority.PRIMARY\n    ) -> RepositoryPool:\n        \"\"\"\n        Adds a repository to the pool.\n        \"\"\"\n        repository_name = repository.name.lower()\n        if self.has_repository(repository_name):\n            raise ValueError(\n                f\"A repository with name {repository_name} was already added.\"\n            )\n\n        self._repositories[repository_name] = PrioritizedRepository(\n            repository, priority\n        )\n        return self\n\n    def remove_repository(self, name: str) -> RepositoryPool:\n        if not self.has_repository(name):\n            raise IndexError(\n                f\"RepositoryPool can not remove unknown repository '{name}'.\"\n            )\n        del self._repositories[name.lower()]\n        return self\n\n    def package(\n        self, name: str, version: Version, repository_name: str | None = None","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/python-poetry/poetry/blob/92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54/src/poetry/repositories/repository_pool.py#L120-L156","documentation":"Raised by RepositoryPool.add_repository when a repository with the same (lowercased) name is already registered (repository_pool.py:136-140). Names must be unique within a pool because lookups are keyed by name.","triggerScenarios":"Calling pool.add_repository(repo) twice with repositories sharing a name; or a config that declares two [[tool.poetry.source]] entries with the same name.","commonSituations":"Duplicate source entries in pyproject.toml; programmatic pool assembly adding the default PyPI twice; copy-paste error in source config.","solutions":["Remove the duplicate [[tool.poetry.source]] entry with the colliding name.","If adding programmatically, call pool.has_repository(name) before add_repository.","Rename one of the repositories to a unique name."],"exampleFix":"// before\n[[tool.poetry.source]]\nname = \"private\"\nurl = \"https://a.example.com/simple/\"\n[[tool.poetry.source]]\nname = \"private\"          # duplicate\nurl = \"https://b.example.com/simple/\"\n// after\n[[tool.poetry.source]]\nname = \"private-a\"\nurl = \"https://a.example.com/simple/\"\n[[tool.poetry.source]]\nname = \"private-b\"\nurl = \"https://b.example.com/simple/\"","handlingStrategy":"validation","validationCode":"if pool.has_repository(repo.name):\n    raise ValueError(f\"repository '{repo.name}' already in pool; rename it\")\npool.add_repository(repo)","typeGuard":null,"tryCatchPattern":"try:\n    pool.add_repository(repo)\nexcept ValueError as e:\n    if \"already added\" in str(e):\n        log.warning(\"%s already registered; skipping\", repo.name)\n    else:\n        raise","preventionTips":["Always check pool.has_repository(name) before add_repository.","Lint pyproject.toml for duplicate [[tool.poetry.source]] names.","Generate source names deterministically to avoid accidental duplicates."],"tags":["repository-pool","config","duplicate"],"analyzedSha":"92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54","analyzedAt":"2026-08-04T20:33:34.072Z","schemaVersion":2}