Commit 26ecdddb by Sébastien Eustace

Revert "Update the self:update command"

This reverts commit 816c5103.
parent 816c5103
...@@ -23,21 +23,7 @@ class SelfUpdateCommand(Command): ...@@ -23,21 +23,7 @@ class SelfUpdateCommand(Command):
from poetry.__version__ import __version__ from poetry.__version__ import __version__
from poetry.repositories.pypi_repository import PyPiRepository from poetry.repositories.pypi_repository import PyPiRepository
from poetry.semver import Version from poetry.semver import Version
from poetry.utils._compat import Path
from poetry.utils._compat import decode from poetry.utils._compat import decode
from poetry.utils.appdirs import expanduser
home = Path(expanduser("~"))
poetry_home = home / ".poetry"
current_file = Path(__file__)
try:
current_file.relative_to(poetry_home)
except ValueError:
raise RuntimeError(
"Poetry has not been installed with the recommended installer. Aborting."
)
version = self.argument("version") version = self.argument("version")
if not version: if not version:
...@@ -98,66 +84,38 @@ class SelfUpdateCommand(Command): ...@@ -98,66 +84,38 @@ class SelfUpdateCommand(Command):
def update(self, release): def update(self, release):
from poetry.utils._compat import Path from poetry.utils._compat import Path
from poetry.utils.appdirs import expanduser from poetry.utils.helpers import temporary_directory
home = Path(expanduser("~"))
poetry_home = home / ".poetry"
poetry_bin = poetry_home / "bin"
poetry_lib = poetry_home / "lib"
poetry_lib_backup = poetry_home / "lib.backup"
version = release.version version = release.version
self.line("Updating to <info>{}</info>".format(version)) self.line("Updating to <info>{}</info>".format(version))
if poetry_lib.exists(): prefix = sys.prefix
# Backing up the current lib directory base_prefix = getattr(sys, "base_prefix", None)
if poetry_lib_backup.exists(): real_prefix = getattr(sys, "real_prefix", None)
shutil.rmtree(str(poetry_lib_backup))
prefix_poetry = self._bin_path(Path(prefix), "poetry")
shutil.copytree(str(poetry_lib), str(poetry_lib_backup)) if prefix_poetry.exists():
shutil.rmtree(str(poetry_lib)) pip = self._bin_path(prefix_poetry.parent.parent, "pip").resolve()
elif (
try: base_prefix
self._update(release, poetry_lib) and base_prefix != prefix
except Exception as e: and self._bin_path(Path(base_prefix), "poetry").exists()
# Reverting changes ):
if poetry_lib_backup.exists(): pip = self._bin_path(Path(base_prefix), "pip")
if poetry_lib.exists(): elif real_prefix:
shutil.rmtree(str(poetry_lib)) pip = self._bin_path(Path(real_prefix), "pip")
else:
shutil.copytree(str(poetry_lib_backup), str(poetry_lib)) pip = self._bin_path(Path(prefix), "pip")
message = ( if not pip.exists():
"An error occured when updating Poetry. " raise RuntimeError("Unable to determine poetry's path")
"The changes have been rolled back."
)
if self.output.is_debug():
message += " Original error: {}".format(e)
raise RuntimeError(message)
finally:
if poetry_lib_backup.exists():
shutil.rmtree(str(poetry_lib_backup))
self.line("")
self.line(
"<info>Poetry</> (<comment>{}</>) "
"is installed now. Great!".format(version)
)
def _update(self, release, lib):
from poetry.utils._compat import Path
from poetry.utils.helpers import temporary_directory
with temporary_directory(prefix="poetry-update-") as temp_dir: with temporary_directory(prefix="poetry-update-") as temp_dir:
temp_dir = Path(temp_dir) temp_dir = Path(temp_dir)
dist = temp_dir / "dist" dist = temp_dir / "dist"
self.line(" - Getting dependencies") self.line(" - Getting dependencies")
self.process( self.process(
sys.executable, str(pip),
"-m",
"pip",
"install", "install",
"-U", "-U",
"poetry=={}".format(release.version), "poetry=={}".format(release.version),
...@@ -184,7 +142,39 @@ class SelfUpdateCommand(Command): ...@@ -184,7 +142,39 @@ class SelfUpdateCommand(Command):
shutil.copy(str(file), str(dest)) shutil.copy(str(file), str(dest))
os.unlink(str(file)) os.unlink(str(file))
shutil.copytree(dist, str(lib)) wheel_data = dist / "poetry-{}.dist-info".format(version) / "WHEEL"
with wheel_data.open() as f:
wheel_data = Parser().parsestr(f.read())
tag = wheel_data["Tag"]
# Repack everything and install
self.line(" - Updating <info>poetry</info>")
shutil.make_archive(
str(temp_dir / "poetry-{}-{}".format(version, tag)),
format="zip",
root_dir=str(dist),
)
os.rename(
str(temp_dir / "poetry-{}-{}.zip".format(version, tag)),
str(temp_dir / "poetry-{}-{}.whl".format(version, tag)),
)
self.process(
str(pip),
"install",
"--upgrade",
"--no-deps",
str(temp_dir / "poetry-{}-{}.whl".format(version, tag)),
)
self.line("")
self.line(
"<info>poetry</> (<comment>{}</>) "
"successfully installed!".format(version)
)
def process(self, *args): def process(self, *args):
return subprocess.check_output(list(args), stderr=subprocess.STDOUT) return subprocess.check_output(list(args), stderr=subprocess.STDOUT)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment