Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 60 additions & 3 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions poetry/console/commands/source/add.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from poetry.config.source import Source
from poetry.console.commands.command import Command
from poetry.factory import Factory
from poetry.repositories import Pool


class SourceAddCommand(Command):
Expand Down Expand Up @@ -89,13 +88,14 @@ def handle(self) -> Optional[int]:
self.line(f"Adding source with name <c1>{name}</c1>.")
sources.append(self.source_to_table(new_source))

self.poetry.config.merge(
{"sources": {source["name"]: source for source in sources}}
)

# ensure new source is valid. eg: invalid name etc.
self.poetry._pool = Pool()
try:
Factory.configure_sources(
self.poetry, sources, self.poetry.config, NullIO()
)
self.poetry.pool.repository(name)
pool = Factory.create_pool(self.poetry.config, NullIO())
pool.repository(name)
except ValueError as e:
self.line_error(
f"<error>Failed to validate addition of <c1>{name}</c1>: {e}</error>"
Expand Down
38 changes: 26 additions & 12 deletions poetry/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from pathlib import Path
from typing import TYPE_CHECKING
from typing import Dict
from typing import List
from typing import Optional

from cleo.io.io import IO
Expand All @@ -25,6 +24,7 @@

if TYPE_CHECKING:
from .repositories.legacy_repository import LegacyRepository
from .repositories.pool import Pool


class Factory(BaseFactory):
Expand Down Expand Up @@ -80,11 +80,18 @@ def create_poetry(
config,
)

# Configuring sources
self.configure_sources(
poetry, poetry.local_config.get("source", []), config, io
config.merge(
{
"sources": {
source["name"]: source
for source in poetry.local_config.get("source", [])
}
}
)

# Configuring sources
poetry.set_pool(self.create_pool(config, io))

plugin_manager = PluginManager("plugin", disable_plugins=disable_plugins)
plugin_manager.load_plugins()
poetry.set_plugin_manager(plugin_manager)
Expand Down Expand Up @@ -133,10 +140,15 @@ def create_config(cls, io: Optional[IO] = None) -> Config:
return config

@classmethod
def configure_sources(
cls, poetry: "Poetry", sources: List[Dict[str, str]], config: "Config", io: "IO"
) -> None:
for source in sources:
def create_pool(cls, config: "Config", io: Optional["IO"] = None) -> "Pool":
from poetry.repositories.pool import Pool

if io is None:
io = NullIO()

pool = Pool()

for source_name, source in config.get("sources").items():
repository = cls.create_legacy_repository(source, config)
is_default = source.get("default", False)
is_secondary = source.get("secondary", False)
Expand All @@ -151,17 +163,19 @@ def configure_sources(

io.write_line(message)

poetry.pool.add_repository(repository, is_default, secondary=is_secondary)
pool.add_repository(repository, is_default, secondary=is_secondary)

# Put PyPI last to prefer private repositories
# unless we have no default source AND no primary sources
# (default = false, secondary = false)
if poetry.pool.has_default():
if pool.has_default():
if io.is_debug():
io.write_line("Deactivating the PyPI repository")
else:
default = not poetry.pool.has_primary_repositories()
poetry.pool.add_repository(PyPiRepository(), default, not default)
default = not pool.has_primary_repositories()
pool.add_repository(PyPiRepository(), default, not default)

return pool

@classmethod
def create_legacy_repository(
Expand Down
Loading