poetry lock --no-update fails for renamed path dependencies #6828
Description
poetry -V
Poetry (version 1.3.0.dev0)
Example: https://github.com/adriangb/public-dump/tree/poetry
Scenario: you renamed pathdep/subproj
to pathdep/subprojnew
.
Note that it doesn't have to be pathdep/subproj
it could be flat as long as path
is then specified as ../subproj
.
Run poetry lock --no-update -vvv
and you get the following traceback. poetry lock
works fine.
12 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/application.py:329 in run
327│
328│ try:
→ 329│ exit_code = self._run(io)
330│ except Exception as e:
331│ if not self._catch_exceptions:
11 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/console/application.py:185 in _run
183│ self._load_plugins(io)
184│
→ 185│ exit_code: int = super()._run(io)
186│ return exit_code
187│
10 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/application.py:423 in _run
421│ io.input.set_stream(stream)
422│
→ 423│ exit_code = self._run_command(command, io)
424│ self._running_command = None
425│
9 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/application.py:465 in _run_command
463│
464│ if error is not None:
→ 465│ raise error
466│
467│ return event.exit_code
8 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/application.py:449 in _run_command
447│
448│ if event.command_should_run():
→ 449│ exit_code = command.run(io)
450│ else:
451│ exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
7 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/commands/base_command.py:119 in run
117│ io.input.validate()
118│
→ 119│ status_code = self.execute(io)
120│
121│ if status_code is None:
6 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/cleo/commands/command.py:83 in execute
81│
82│ try:
→ 83│ return self.handle()
84│ except KeyboardInterrupt:
85│ return 1
5 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/console/commands/lock.py:54 in handle
52│ self.installer.lock(update=not self.option("no-update"))
53│
→ 54│ return self.installer.run()
55│
4 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/installation/installer.py:103 in run
101│ # Check if refresh
102│ if not self._update and self._lock and self._locker.is_locked():
→ 103│ return self._do_refresh()
104│
105│ # Force update if there is no lock file present
3 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/installation/installer.py:195 in _do_refresh
193│ raise ValueError(f"Extra [{extra}] is not specified.")
194│
→ 195│ locked_repository = self._locker.locked_repository()
196│ solver = Solver(
197│ self._package,
2 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/packages/locker.py:215 in locked_repository
213│
214│ package.add_dependency(
→ 215│ Factory.create_dependency(dep_name, constraint, root_dir=root_dir)
216│ )
217│
1 ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/core/factory.py:316 in create_dependency
314│ )
315│ else:
→ 316│ dependency = DirectoryDependency(
317│ name,
318│ path,
ValueError
Directory subproj does not exist
at ~/.pyenv/versions/3.10.6/lib/python3.10/site-packages/poetry/core/packages/directory_dependency.py:38 in __init__
34│
35│ self._develop = develop
36│
37│ if not self._full_path.exists():
→ 38│ raise ValueError(f"Directory {self._path} does not exist")
39│
40│ if self._full_path.is_file():
41│ raise ValueError(f"{self._path} is a file, expected a directory")
42│
I think poetry is trying to "cache" information about the path dependencies but IMO it should at the very least check if any info in the path dependency's pyproject.toml
changed and if so invalidate it's cache and the cache of all it's sub-dependencies.